目次
PostfixでSMTP-AUTHを利用する
2016/07/10
FreeBSD 10.2 から 10.3へのOSアップグレードの際にmail/postfixをPortsから再コンパイルしたところ、SASL関係でエラーが発生、SMTP-AUTHが使えずメール送信ができなくなりました。
mail/postfix-sasl で入れ替えしたところ使えるようになりました。
2012/05/05
SMTP-AUTHの設定について調べたところ、二つのシチュエーションがごちゃごちゃ入り混じっているので自分なりに整理した。
ちょっと勘違いしていて、ちょっと嵌った。smtpd_sasl_xxx と smtp_sasl_xxx で(a)(b)の振る舞いが個別指定できる事がわかったけどちょっと紛らわしい…
どのシチュエーションの話か明確にする
SMTP-AUTHを使う事シチュエーションは二つ。
- (a)クライアントがPostfix接続時にSMTP-AUTHを使用
- (b)PostfixがISPのSMTP接続時にSMTP-AUTHを使用
(a)は許可されたユーザ・プログラムだけにPostfixからのメール送信を許可するのが主目的となる。
(b)はISPの指定するSMTPサーバがSMTP-AUTH対応を必須としている場合に必要となる。
Postfixで(a)のシチュエーションに対しては smtpd_sasl_xxxの名前、(b)のシチュエーションに対しては smtp_sasl_xxxの名前でそれぞれパラメタがありこれでSMTP-AUTHの指定を行う事になる。
セットアップ
Postfixのセットアップに際して、SASL2を有効にしておく。 Cyrus-SASL2 も導入しておく。
main.cf に記述する、smtp_sasl_xxxx と smtpd_sasl_xxxx を間違えないように。
(a)クライアントがPostfix接続時にSMTP-AUTHを使用
FreeBSD9.0の場合、/usr/local/lib/sasl2/postfixsmtpd.conf を以下の内容で作成しておく。
- postfixsmtpd.conf
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: cram-md5 digest-md5 plain login
アカウント追加は以下のコマンドで実施。
# saslpasswd2 -c -u smtp.hogehoge.co.jp user001
-u オプションで指定するホスト名は、main.cfに記述した myhostname のホスト名になる。これで user001 の登録が行われる事になる。
アカウントを削除するときは -c オプションの変わりに -d オプションを指定する。
main.cfに以下を追加変更する。
smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_path = postfixsmtpd smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_sasl_authenticated, permit_auth_destination, reject_unauth_destination
パラメタ | 説明 | |
---|---|---|
smtpd_sasl_auth_enable | yes で SMTP-AUTH が有効になる。 | |
smtpd_sasl_security_options | デフォルトでは noanonymous, noplaintext になる。問題ないならこの指定はコメントアウト。 平文パスワードを許す場合は noplaintext があってはまずいのでnoanonymousを指定する。 |
|
smtpd_sasl_path | SASL2ライブラリで /usr/local/lib/sasl2/postfixsmtpd.conf の定義を使う旨の宣言。 | |
smtpd_sasl_local_domain | 認証時のレルムとして myhostname を使う。SASLのアカウントを登録する際の-uオプションで指定するものと同じ。 | |
smtpd_recipient_restrictions | 接続時の制限を指定する。以下の順に検証が行われる。 | |
permit_sasl_authenticated | 認証に成功した場合のメール送信を許可する。元々期待している動作。 | |
reject_unauth_destination | このサーバで配送終了とならないドメイン宛メール送信を却下する。不正中継対応。 | |
permit_auth_destination | このサーバで配送終了となるドメイン宛メール送信を許可する。認証しない接続用。 | |
特定のアドレスやクライアントからの接続を許したければ以下も追加。 | ||
permit_mynetworks | 接続元が$mynetworksにリストアップされたネットワーク・ホストから来たものであれば許可。 |
(b)PostfixがISPのSMTP接続時にSMTP-AUTHを使用
main.cf に以下を追加修正する。
mydomain = hogehoge.co.jp relayhost = [smtp.isp.co.jp]:587 smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = cdb:/usr/local/etc/postfix/relay_passwd
パラメタ | 説明 |
---|---|
mydomain | このメールサーバのドメイン。リレー先によってはここの指定が実在する(インターネットで解決可能な)ドメインでなければならない。 |
relayhost | リレーするサーバとそのポート。ブランケットで囲むとMXレコード確認を行わなくなる。 |
smtp_sasl_auth_enable | yes で SMTP-AUTH が有効になる。 |
smtp_sasl_security_options | デフォルトでは noanonymous, noplaintext になる。 平文パスワード指定のサーバの場合 noplaintext があると平文でパスワードを送れなくなる。 |
smtp_sasl_password_maps | リレー先SMTPサーバでSMTP-AUTHが必要な場合、SMTPサーバと使用するアカウントのインデクスを指定する。 |
smtp_sasl_password_mapsにしているインデクスは以下のように作成する。
例えば/usr/local/etc/postfix/relay_passwd ファイルに
[smtp.isp.co.jp]:587 userid:password
の記述を行い、以下を実行することでCDB形式のインデクス /usr/local/etc/postfix/relay_passwd.cdb が作成される。
# postmap cdb:/usr/local/etc/postfix/relay_passwd
再起動
main.cfファイルやインデクスファイルを変更した後は以下を実行しておく。
/usr/local/etc/rc.d/postfix reload