環境
- Ubuntu linux 9.04 x64
- postfix
- eo (OP25B 適用済み)
事前準備
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
DomainKeys の RFC は historical 認定となってしまったので、新たに規定された DKIM を設定。今回は受信時の判定はせず、送信時に DKIM ヘッダを挿入するだけとします。DKIM は規定ではヘッダ FROM で判定を行います。
詳細は DKIM や RFC 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>
とかが含まれてれば大丈夫。