スパムチェックなどの関係で、DHCP割り当てのホストからのSMTP発信は、受信側ではじかれてしまう場合がある。 このため、プロバイダなどが提供するSMTPサーバなどにリレーを要求する必要がある。
main.cf に次の設定を行う。
relayhost = [smtp.xxxx.xxx]
SMTPポート(25)以外を使う場合は、ポート番号も指定する。 但し、465 (SSL/TLS)に関しては、Postfixは単体でその機能をサポートできないので、stunnel などと組み合わせて利用することになり、やや煩雑となる。 1)
submission ポート(587)を使う場合は次のようになる。
relayhost = [smtp.xxxx.xxx]:587
リレー先が認証を求めない場合はこれで完了となる。
2015年10月を以て、旧C3-Netのサービスが終了となるため、SMTPのリレーを smtp.c3-net.ne.jpから J:COMのものに置き換える必要が発生した。
C3-Netでは、自身の管理下のIPからのSMTPリレー要求は、認証なしで受け入れてくれていたが、J:COMの方は認証を求められるため、これに対応した設定が必要となる。
main.cf には上記の設定に加えて、次の設定も行う。
smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth smtp_sasl_security_options = noanonymous
リレー先のSMTPサーバがPLAIN以外の認証をサポートしている場合には、smtp_sasl_security_option は特に指定しなくてもいい。
最後に、smtp_sasl_password_mapsで指定したファイルに、SMTPサーバ、IDおよびパスワードを設定する。
[smtp.xxxx.xxx] user_id:password
パスワードは平文で記入するので、このファイルの管理には十分留意すること。
最後に、マップを更新して、postfix をリロードする。
# postmap hash:/etc/postfix/smtp_auth # /etc/init.d/postfix reload postfix/postfix-script: refreshing the Postfix mail system #
送信先でのSPF認証に対応するために、DNSに適切なSPFレコードを登録する必要がある。 一般的な、1IPアドレスで運用されているドメインであれば、単純にMXレコードが出ているホスト(IP)で認証されればいいので、次のようになるだろう。
v=spf1 mx ~all
但し、個々のようにリレーを行っている場合は、送信先はリレーしているサーバのIPを以て認証に来るため、上記ではFailになってしまう。
その場合は、リレー先のSPFレコードを取り込めばよい。
v=spf1 mx include:xxx.xxx.xxx ~all
但し、xxx.xxx.xxxで得られるSPFレコードに既に10件のエントリーがある場合は上の設定は機能しないので注意が必要。
SPF認証は、外部のPerlまたはPythonのpolicy-spfモジュールと連携して行う。
pypolicy-spfモジュールはeasy_installにてアクセス可能なものの、パッケージングに問題があり、easy_installで導入することが出来ない。 このため直接アーカイブを取得して導入する必要がある。
導入に先立ち、pydnsおよびpyspfのモジュールをeasy_installにて導入しておく。
# easy_install pydns ... # easy_install pyspf ... #
pypolicy-spfモジュールはここから最新版を取得してビルドする。2016/6/30現在1.3.2が最新版。
# tar -zxf pypolicyd-spf-1.3.2.tar.gz # cd pypolicyd-spf-1.3.2 # python setup.py install ... # cp policyd-spf.conf.commented /etc/postfix/policyd-spf.conf
そのまま運用してもいいが、以下の変更を加えておいた。
Mail_From_reject = False
SPF認証に失敗してもメールはリジェクトされない。2) 認証の結果が Received-SPF: というヘッダでメールに付加されるので、procmailなり、sieveなりで対処すればいいだろう。
Received-SPF: Pass (sender SPF authorized) identity=mailfrom client-ip=...)
のように出ていればSPF認証に成功したということ。
master.cfに次の行を追加する。
# # SPF Policy Deamon # policy-spf unix - n n - - spawn user=nobody argv=/usr/bin/python /usr/bin/policyd-spf /etc/postfix/policyd-spf.conf
ついで、main.cfに次の設定を追加する。
policy-spf_time_limit = 3600s
最後に main.cf内の、smtpd_recipient_restrictions に check_policy_service unix:private/policy-spf をreject_unauth_destinationの後に追加する。
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,check_policy_service unix:private/policy-spf,pcre:/etc/postfix/access_regexp,permit_auth_destination,reject