Custom Search

JITAKU_SVR_Wiki



環境

OS:CentOS6.3(64bit)

ミドルウェア:
postfix:postfix-2.6.6-2.2.el6_1.x86_64
opendkim:opendkim-2.6.7-1.el6.rf.x86_64
bind:bind-9.8.2-0.10.rc1.el6_3.6.x86_64

DKIMについて

DKIMとは、DomainKeys Identified Mailの略で、これを入れることで何が出来るかというと、迷惑メール扱いされなくなる、ということ。
具体的にはメールを送信する際にヘッダーに鍵情報を渡し、受け取った側がDNSに置いてある公開鍵に認証することで、より安全なメールだと認識してくれる。
いわゆる、電子署名。

spfレコード(txtレコード)だけでもそれなりの効果もあるが、最近はそれでも迷惑メールに振り分けられるこもある。

今回はpostfix + opendkimでの構築をしていく。

難易度としてはやや高いほう。
出来上がったとき、理解出来たときの感動は高い。
ここで一番はまったのはDNSだったので、DNSの予備知識がないと厳しいかも。



インストール

CentOS6.3の標準リポジトリでインストールできる。

# yum -y install opendkim

構築

構築に関してはそれほど難しくないので一気に記述。
※パスはすべてデフォルトのもの

鍵の生成

# mkdir /etc/opendkim/keys/ml.jitaku-svr.info

# opendkim-genkey -D /etc/opendkim/keys/ml.jitaku-svr.info/ -d ml.jitaku-svr.info -s default

TIPS:
opendkim-genkeyコマンドの説明
オプション

-Dはどこに鍵を作成するか

-d ドメイン名を指定

-s セレクタ名

セレクタ名はとりあえず何でも良い。何でもいいけど、ヘッダの中にも入ってくるので、あまり恥ずかしいものはやめたほうが無難。
defaultとかselectorとかで良い。

鍵準備

上記のコマンドを実行すると以下のファイルが出来上がる。

# ls /etc/opendkim/keys/ml.jitaku-svr.info/
default.private default.txt
default.privateが秘密鍵でdefault.txtが公開鍵

中身の確認

# cat /etc/opendkim/keys/ml.jitaku-svr.info/default.private

-----BEGIN RSA PRIVATE KEY-----
~~秘密鍵~~
-----END RSA PRIVATE KEY-----

# cat /etc/opendkim/keys/ml.jitaku-svr.info/default.txt

default._domainkey IN TXT "v=DKIM1; k=rsa; p=~~公開鍵~~" ; ----- DKIM key default for ml.jitaku-svr.info

default.privateは今後もファイルの指定をすることが多いので、長いからファイル名を変更(もちろんそのままでもOK)

# mv /etc/opendkim/keys/ml.jitaku-svr.info/default.private /etc/opendkim/keys/ml.jitaku-svr.info/default

・権限変更

# chown -R opendkim:opendkim /etc/opendkim/keys
※鍵自体の権限も確認しておくこと。

# ls -la /etc/opendkim/keys/ml.jitaku-svr.info/default

-rw------- 1 opendkim opendkim 891 Aug 7 14:43 /etc/opendkim/keys/ml.jitaku-svr.info/default
600じゃないとパーミッションが緩いと怒るので。

以上で準備OK。

メイン設定ファイルの編集

# vim /etc/opendkim.conf

PidFile /var/run/opendkim/opendkim.pid
Mode    sv          ←sは送信時の署名、vは受信時の確認
Syslog  yes
SyslogSuccess   yes
LogWhy  yes
UserID  opendkim:opendkim
Socket  inet:8891@localhost
Umask   002
Canonicalization        relaxed/simple
#KeyFile        /etc/opendkim/keys/default.private        ←コメントアウト
KeyTable        refile:/etc/opendkim/KeyTable             ←パスの前にrefileを記述
SigningTable    refile:/etc/opendkim/SigningTable
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts   refile:/etc/opendkim/TrustedHosts

※コメントアウト部分は省略
refileは正規表現を使用する場合のファイル指定方法

KeyTableファイルの編集

KeyTableはメールを送信する際にヘッダに付与させる鍵の情報を示すファイル

# vim /etc/opendkim/KeyTable

default._domainkey.ml.jitaku-svr.info ml.jitaku-svr.info:default:/etc/opendkim/keys/ml.jitaku-svr.info/default

SigningTableファイルの編集

SigningTableはFromに対する鍵を付与する設定。
ここでは、ml.jitaku-svr.infoから送信される(From)メールに対して鍵を付与させる。
正規表現を使用できる。(opendkim.confでrefile指定するため)

# vim /etc/opendkim/SigningTable

*@ml.jitaku-svr.info default._domainkey.ml.jitaku-svr.info

TrustedHostsファイルの編集

どのサーバから通信を受けるかの設定。
このサーバでしか通信を行わない場合は以下のようにしておけばOK。

# vim /etc/opendkim/TrustedHosts

127.0.0.1

ExternalIgnoreListファイルの編集

特定のサーバを拒否する設定。
今回は存在しないのでファイルなし。

ここまででopendkimの設定は完了。

最後にopendkimを起動させる。

# /etc/init.d/opendkim start

postfixの設定

opendkimがメールにヘッダを付与させるには、postfixからメールをもらわなくてはいけないので、postfixに以下の設定を追加する。

# vim /etc/postfix/main.cf

#DKIM
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

設定を変更したらpostfixを再起動。

# /etc/init.d/postfix restart

BINDの設定方法

zoneファイルに以下を追加

                        IN MX 10 ml.jitaku-svr.info.
jitaku-svr.info.        IN A 49.212.182.151
ml                      IN A 49.212.182.151
_adsp._domainkey.ml.jitaku-svr.info.        IN TXT "dkim=unknown"
default._domainkey.ml.jitaku-svr.info.      IN TXT "v=DKIM1; k=rsa; t=y; p=~~公開鍵~~" ; ----- DKIM key default for ml.jitaku-svr.info

TIPS:
t=y;はテストモードなので、テストが終わったら抜いてあげる。
長いので必要箇所だけ抜粋。
_adsp._domainkey.ml.jitaku-svr.info. はこの様に書いてあげる。

default._domainkey~の項目はprivate.txtに書かれてる行をそのままコピペでOK。
注意点としては、そのままコピペすると、↓

default._domainkey IN TXT "v=DKIM1; k=rsa; p=~~公開鍵~~" ; ----- DKIM key default for ml.jitaku-svr.info

こうなっているので、少し修正してあげる。
上記の様にきちんと、default._domainkey.ml.jitaku-svr.info.(ドット)まで書いてあげないと、ドメインを補完されてしまう。

zoneを変更したので、serialを変更し、zoneの再読み込み。

# rndc reload

テスト

opendkimからメールに鍵が付与されているかをチェックする。
手段がいくつかあるので、それぞれチェックしてみる。
①メールを投げてみる。
②DKIM Key Checkerを使う。
http://www.protodave.com/security/checking-your-dkim-dns-record/
sa-test@sendmail.netに空メールを送信する。

③については環境によってメールを受信できなかったりするので、なくてもOKだと思う。

①は確実に出来るはずなので、google,yahoo,hotmailなどでテストしてみる。
ちなみに、yahooメールで試したときのヘッダがこちら↓

From root Mon Aug 19 12:01:57 2013
X-Apparently-To: XXXXXXXXX@yahoo.co.jp via 114.111.99.84; Mon, 19 Aug 2013 12:01:58 +0900
Return-Path: <root@ml.jitaku-svr.info>
X-YMailISG: BmBzX94WLDs0IS_gYuUkpeU72l70cMKuDXe_0BOfhn3haQFE
 pKK6eMF9oLvud2vZpew.GlP3.lSST.CJkw4.vO9u1sptnfV8mgstmAFQPn6Q
 g7WfGS8ytt2i3hnRQ12nJmE5EB4Ft1GpaFvShAUkjcTwXmHQhhsJogyB92iO
 mghNP_A5joLeFXo.w7E.fMxgW63C8m1rwq7etbvu6USQg3hobSILNVlA_X8L
 DqcGVl7dwD2VZWHQ4EDvLhwcq9KF2VWPP5fifdiaypFbXGcnd1Ss5zB45nls
 Xr1L7l_y1KhpTInQIKX1CEagHyL.P2JJGor6BlxvCZtA8YZ8UpqdFZtoeEvu
 DrfVG8N.xlB4.XJohtDT.D6vNlazvnHKOQ7bnicWLDT4SpzpD5t0zCGNMCzr
 ZavGPVilmF76o8Rw7YEAEVhDezyv3y5p6iLe86peS4paT.lZnI9bH5fjuD6S
 7ptQOAntPvgpGKnHkbsQL7iwAOcyIKPih5.U4_O23LoNNQHjgNnYb0xLaEgD
 rxF7MMhNQfbOOpH79mvxkAUrWV7xtGV0UEMvCbg9qvJ20yLf9Q7w6KrkW8b6
 sHJtbkrOVvdWApIRdbwfBvCc0AAfZilpVaFU7DF4UqhfbHLPkR3Jm4QLXGSN
 qRtsmyJRP7uUFPpVQv_zEXjz8_5jrLU4pRXk0cgxgbHgKcIJWIF4EQpW4ebp
 XLDMiOBwu970BcZjFTJPBWjmPF2MqjevhIDyEsWaO4W9LUc_OtXojnry6T.n
 hbONP10l10YIqwnwOX38v1FDaTqteBv.cy76OE2agG5qR8A2MPXOJcNyjjq5
 JW9MXg2e1LRQDI.Ra5836PHOB7olqA1nY952W.GdBbPy6kInZa.kiqFDKBWK
 WYrnWZb20dZpDbobAc79VyGSXEktJ85KsEpuwwcXJbGtDUEt4QBHLlT.z64A
 ..1nX3zAehJfNA_RBNWKXm.eROhWWNjjZ4g60r8_hSFiOMhbgSs1LLMAkl29
 NvnIazl0lKH5.99fVXITTSGIL5VsYqIwj9TW7tW3.r5sh2igMImG23Q9Lxau
 So0WQr8YFHK4pI5rqnqN6wIDNO4fvNqcLosrKQobOUotp_8lsNbM.apdySaP
 oJhxZCFcSUdzzPJ1pIn1r9BRcfburSHY6XOV
X-Originating-IP: [49.212.182.151]
Received-SPF: pass (ml.jitaku-svr.info: domain of root@ml.jitaku-svr.info designates 49.212.182.151 as permitted sender) receiver=ml.jitaku-svr.info; 
client-ip=49.212.182.151; envelope-from=root@ml.jitaku-svr.info;
Authentication-Results: mta510.mail.kks.yahoo.co.jp  from=ml.jitaku-svr.info; domainkeys=neutral (no sig); dkim=pass (ok); header.i=@ml.jitaku-svr.info
Received: from 49.212.182.151  (EHLO ml.jitaku-svr.info) (49.212.182.151)
  by mta510.mail.kks.yahoo.co.jp with SMTP; Mon, 19 Aug 2013 12:01:58 +0900
Received: by ml.jitaku-svr.info (Postfix, from userid 0)
	id EB7B1806CA; Mon, 19 Aug 2013 12:01:57 +0900 (JST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ml.jitaku-svr.info;
	s=default; t=1376881317;
	bh=Phj6rpM4SpDxcpxtnTKAfOjvWayPv0m9f8iyFr/pEg4=;
	h=Date:To:Subject:From;
	b=M+9xYAB6Sn6PjlheokbL93Tnbceboa5etKFRMxhvnP+dkhLXcv/LdbKRXB5o4hLJY
	 ksGXypgnHQojQBTQTM0LthcjuhOJhXp73DjaJMKAg0p67/F51WFdWDTvFuz3YIXFXj
	 tkp/RqClZTsahUQnfsDVCOf+xGZnRitI1b1+SywM=
Date: Mon, 19 Aug 2013 12:01:57 +0900
To: XXXXXXXXX@yahoo.co.jp
Subject: testmail
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20130819030157.EB7B1806CA@ml.jitaku-svr.info>
From: root@ml.jitaku-svr.info (root)
Content-Length: 15

↓に注目

Authentication-Results: mta510.mail.kks.yahoo.co.jp  from=ml.jitaku-svr.info; domainkeys=neutral (no sig); dkim=pass (ok); header.i=@ml.jitaku-svr.info

dkim=pass (ok)となれば問題ない。

Authentication-Results: mta552.mail.kks.yahoo.co.jp  from=ml.jitaku-svr.info; domainkeys=neutral (no sig); dkim=permerror (no key); header.i=@ml.jitaku-svr.info

という感じでerrorが出てしまうとどこかおかしい。

エラー

権限エラー

opendkimの権限周りでエラーが出たので、念のため。

Aug 19 11:37:05 xxxxxxx opendkim[2582]: can't load key from /etc/opendkim/keys/ml.jitaku-svr.info/default: Permission denied
Aug 19 11:37:05 xxxxxxx opendkim[2582]: 440E5806CC: error loading key 'default._domainkey.ml.jitaku-svr.info'

読んで字のごとくパーミッションがおかしい。
opendkimユーザから読み込みが出来なくなっていないか確認する。

設定ファイルミス

maillogに出ていた
Sep 4 16:30:24 localhost opendkim[25629]: 34B0EB0E0372: no signing table match for 'root@ml.jitaku-svr.info' Sep 4 16:30:24 localhost opendkim[25629]: 34B0EB0E0372: no signature data

opendkim.confで各ファイルをファイル指定でIncludeする箇所。具体的には↓

SigningTable    refile:/etc/opendkim/SigningTable

上記にrefileでファイルを指定する箇所が"refile"を付け忘れていたので、エラーとなっていた。

参考

http://damelog.com/computer/server-administration/postfix-dkim-milter%E3%81%8B%E3%82%89opendkim%E3%81%AB%E7%A7%BB%E8%A1%8C%E3%81%99%E3%82%8B/
http://nobnoob.hatenablog.com/entry/2013/04/01/093120
http://www.ohoclick.com/archives/38
http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-17 (木) 16:50:08 (648d)