DKIM & SPF のセットアップ

環境

事前準備

eo は OP25B を適用しているため、 postfix の main.cf に

relayhost = smptauth.eonet.ne.jp:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = cram-md5

を指定。 /etc/postfix/sasl/sasl_passwd に、

smtpauth.eonet.ne.jp:587	pop認証username:pop認証password

を作成し、

# postmap sasl_passwd

で hash DB を作成。滅多にないと思うけど、 cram-md5 非対応な鯖なら smtp_sasl_mechanism_filter を削除。

# apt-get install sasl2-bin

で sasl 関係のライブラリを一緒にインスコ

SPF

DNS の編集ができれば他の設定は別に不要。OP25B なので、SPF の判定が行われる受信サーバーと直接交信するのは ISP(eo) のサーバーな訳です。ですので、dns の txt レコードに

txt @ v=spf1 +include:eonet.ne.jp ~all

みたいな感じで外部レコードをインクルード。

DKIM

DomainKeysRFC は historical 認定となってしまったので、新たに規定された DKIM を設定。今回は受信時の判定はせず、送信時に DKIM ヘッダを挿入するだけとします。DKIM は規定ではヘッダ FROM で判定を行います。

詳細は DKIMRFC 4871 - DomainKeys Identified Mail (DKIM) Signatures を参照のこと。

# apt-get install dkim-filter

でキットを導入。 /etc/dkim-filter.conf に、

#Domain               example.com
#KeyFile               /etc/keys/dkim
KeyList                 /etc/postfix/dkim/key.list
InternalHosts           /etc/postfix/dkim/hosts.list

# Common settings. See dkim-filter.conf(5) for more information.
AutoRestart             yes
Background              yes
#Canonicalization       simple
#DNSTimeout             5
Mode                    s
SignatureAlgorithm      rsa-sha256
SubDomains              no
#ASPDiscard             no
#Version                        rfc4871
X-Header                yes

あたりでてけとーに設定します。

複数ドメインに対応させる場合、 /etc/postfix/dkim/key.list に

*@example.com:example.com:/etc/keys/alpha
*@example.jp:example.jp:/etc/keys/beta

と、適用アドレス:ドメイン:秘密鍵 形式で指定。秘密鍵のファイル名が DKIM におけるセレクタ名となるので注意。単一ドメインだけの場合は直接 /etc/dkim-filter.conf に、コメントアウトしてある Domain, KeyFile を有効に。

InternalHosts には、

127.0.0.1 # (これは指定しなくても初期値)
192.168.0.0/24

DKIM Signature を用いて送信される可能性のあるホストを全て指定。

んで、 /etc/keys にて

# dkim-genkey -b 1024 -r -s alpha -d example.jp -S

でできた dkim.txt に書いてある内容で DNS 登録を行います。 value-domain で txt レコードへの登録が失敗するのは、 g=* が含まれていたから。これを消してやるとすんなり登録できます。なお、 g タグ の意味については RFC 4871 - DomainKeys Identified Mail (DKIM) Signatures を。あとは dkim.private を dkim にリネームして、 /etc/init.d/dkim-filter restart でおk。これで認証付与側の設定は終了。

postfix 側の設定は、

# ps ax |grep dkim
10115 ?        S<l    0:00 /usr/sbin/dkim-filter -x /etc/dkim-filter.conf -u dkim-filter -P /var/run/dkim-filter/dkim-filter.pid -p inet:8981@localhost

dkim-filter が listen してるポートを調査。

main.cf に、

smtpd_milters = inet:localhost:8981
non_smtpd_milters = inet:localhost:8981
milter_default_action = accept

を追加。 milter_default_action は、 ubuntu で標準の MTA である postfix は milter が応答しない場合、規定値では応答するまで待ち続けるので、それを回避する設定。

チェック

とりあえず gmail 宛に送信するのが手っ取り早いかと。ヘッダに、

Received-SPF: pass (google.com: domain of test@example.com designates xxx.xxx.xxx.xxx as permitted sender) client-ip=xxx.xxx.xxx.xxx;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of test@example.com designates xxx.xxx.xxx.xxx as permitted sender) smtp.mail=test@example.com; dkim=pass header.i=@example.com
X-DKIM: Sendmail DKIM Filter v2.8.2 example.com xxxxxxxxxxx
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=dkim;
	t=xxxxxxxxxx; bh=<BASE64 Encoded Strings>;
	h=Message-ID:Date:From:MIME-Version:To:Subject:Content-Type:
	 Content-Transfer-Encoding;
	b=<BASE64 Encoded Keys>

とかが含まれてれば大丈夫。