目次

Postfix

概要

インストール

設定

メールの中継

スパムチェックなどの関係で、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認証への対応

送信先での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件のエントリーがある場合は上の設定は機能しないので注意が必要。

submission port の設置

ウィルスチェック

SASL Auth

SPF認証

SPF認証は、外部のPerlまたはPythonのpolicy-spfモジュールと連携して行う。

pypolicy-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認証に成功したということ。

postfix の設定。

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

メールサーバ

1)
ここでは割愛する。
2)
デフォルトのFailだとリジェクトされる。