/ uso8000k.net: October 2012 Archives

20121031235144

: DKIMをつらつらと

人生急に好きなことに対してやる気が出なくなることがありまして、私もここ数ヶ月そんな感じでした。いや、単に模型やゲーム等にに現をぬかしていただけなのですが・・・ さて久々にセキュリティ更新以外でサーバに対して何かをやってみようということで、手っ取り早いのでメールに対して信頼性を向上に試みようかと。

最近読みましたGoogleの脆弱性の記事の使われていた技術 DKIM (Domain Key Identified Mail) を導入。とりあえず、送り主のドメイン名が正当かをチェックするSPF (Sender Policy Framework) だけでやっていましたので併せてDKIMも入れてみようかというお話。 DKIMは送信時にヘッダに"DKIM-Signature:"を追加して、以下秘密鍵で暗号化されたを含んだ電子署名を送信。電子署名含みのメールを受け取ったサーバは送り主ドメインを管理するDNSサーバに問い合わせを行い、TXTレコードに登録された指定のホスト名として登録された公開鍵を使用して認証。

こんな感じのものを入れてみようかと。

パッケージインストール (いつものGentoo環境に)

$ sudo emerge opendkim
... 依存で mail-filter/libmilter

Postfixと組み合わせて使う予定をしているのでmilterなりが絡む。調べてみるとDKIMを使う場合にはdkim-milterを使うとのことでしたが、最近の流行に乗って opendkim なるものを使用。といいますか、dkim-milterが無い(゚Д゚) そんな感じのパッケージ選択。 ほかはlibdkim/zdkimfilterもあるが、他MTA用であることとMASKされてることから、コレが今のところ正解かと。

インストール後、Portageの書置きの通りに鍵作成

$ sudo emerge --config
mail-filter/opendkim
Configuring pkg...

鍵の名前的なものと強度指定。ここ1を選ぶ。解読できる。俺知ってる。

Enter the selector name (default xxxx.uso8000k.net): mydkim
 * Select the size of private key:
 *   [1] 512 bits
 *   [2] 1024 bits
  Press 1 or 2 on the keyboard to select the key size: 2

(略)

DNS用 TXTレコードの内容が出力。

 
mydkim._domainkey IN TXT "v=DKIM1;=rsa;p=公開鍵";

ちなみにここには罠があり、

mydkim._domainkey IN TXT "v=DKIM1;k=rsa;p=公開鍵";

"k=rsa"と追記しないとキーとして働かないらしい。追記。

インストール時に /etc/opendkim へ opendkim.conf (設定ファイル) が、鍵生成時に mydkim.txt (DNS TXTレコード用テキスト)、mydkim.private (秘密鍵) のファイルが生成。 mydkim.txt の内容は自分が管理するDNSサーバ内自分のZONE不ファイルに適切に加工して追加。VPSについてくるWeb登録型のDNSについても、適切に加工すれば登録は可能。Linodeの場合は以下、

Name: mydkim._domainkey
Value: v=DKIM1;k=rsa;p=公開鍵;

ダブルクォートを消去。これでDNSの設定は終わり。以下確認。

$ nslookup -q=txt mydkim._domainkey.uso8000k.net
Server:         74.207.242.5
Address:        74.207.242.5#53

Non-authoritative answer:
mydkim._domainkey.uso8000k.net   text = "v=DKIM1\;k=rsa\; p=略\;"

Authoritative answers can be found from:
uso8000k.net    nameserver = ns1.uso8000k.net.

以降、opendkimの設定と、postfixのmilter設定

/etc/opendkim/opendkim.conf

# Syslog 
Syslog                  yes
SyslogSuccess           yes

Canonicalization        relaxed/simple

Domain                  uso8000k.net
Selector                mydkim
KeyFile                 /etc/opendkim/mydkim.private

SendReports             yes
ReportAddress           postmaster@uso8000k.net
#Statistics             /var/lib/opendkim/stats.dat

Socket                  inet:8891@localhost
UserID                  milter
PidFile                 /var/run/opendkim/opendkim.pid

/etc/postfix/main.cf

smtpd_milters     = unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:/var/run/opendkim/opendkim.sock

を追記。これで最低限の動作が可能。DNSの設定が反映されている事を確認の後、それぞれサービスの起動/再起動を行えば完了。複数ドメインを管理する場合はKeyFileではなくKeyTable記述を行う。

最後にDKIMの動作テスト: http://www.appmaildev.com/jp/dkim/

This email is an automatic response from AdminSystem DKIM verifier service (1.0.0.3).
The service allows email senders to perform a simple check of SPF, DKIM and DomainKeys.
It is provided free of charge, in the hope that it is useful to the email community.

We welcome any feedback you may have at <support@emailarchitect.net>.
Thank you for using the service.
AdminSystem Software Limited

============================================================
SPF result: Pass
============================================================
Domain: uso8000k.net
IP: 173.230.147.180

SPF Record: uso8000k.net
	IN TXT = "v=spf1 mx ~all"

============================================================
DomainKey result: none (no signature)
============================================================

============================================================
DKIM result: pass
============================================================
Signed by: harumaki@uso8000k.net
Expected Body Hash: 本文ハッシュ値

PublicKey: mydkim._domainkey.uso8000k.net
	IN TXT = "v=DKIM1;k=rsa; p=公開鍵;"

---Original Message Header---

∩( ・ω・)∩

参考URL


Posted by uso8000k | Permalink | Categories: Tech | [ツィート(笑)]