2008/06/01(日)Postfix/Dovecot Debian/Ubuntu で SMTP Auth の設定
Postfix(MTA) + Dovecot(POP/IMAP)の設定メモ。SMTP Auth + APOP で構成しました。
設定の概要
PostfixにはSMTP Authを外部に任せる機能があり(SASL)、DovecotにはそのPostfixのSMTP Authを代行する機能があります。これを行うとPOPとSMTPパスワードをDovecotで一元管理することができます。
- メール固有のパスワードファイルを使用する。
- Maildir形式で保存する。
Dovecotの設定
Debian 12以前
Dovecotの認証は専用のパスワードファイルで行うように設定。
# conf.d/10-auth.conf mechanisms = apop cram-md5 # 最後の方 #!include auth-system.conf.ext #!include auth-sql.conf.ext #!include auth-ldap.conf.ext !include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-static.conf.ext
# conf.d/10-mail.conf mail_location = maildir:~/Maildir
# auth-passwdfile.conf.ext
userdb {
# driver = passwd-file
# args = username_format=%u /etc/dovecot/users
driver = passwd
SMTP-AUTHのための設定。
# 10-master.conf
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}
Debian 13以降
# conf.d/10-mail.conf mail_driver = maildir mail_path = ~/Maildir mail_inbox_path = ~/Maildir/.INBOX
# auth-passwdfile.conf.ext
passdb passwd-file {
passwd_file_path = /etc/dovecot/users
}
userdb passwd {
}
# 10-master.conf
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}
パスワードの設定
デフォルトでは/etc/dovecot/usersがパスワードファイルになります。
userx:{PLAIN}plain-pass
PLAINだけ書いておけば他のすべての形式で認証できます。
- 受信に使うユーザIDは実ユーザIDと同一でなければなりません。
- passwd-file 変更時の再起動は不要です。
Postfix側の設定
main.cf を設定します。
smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated home_mailbox = Mailbox
submissionポートを開けるため、master.cfの次の行のコメントを外します。
submission inet n - y - - smtpd
注意
Postfixは設定ファイルにミスがあると、一見きちんと動いているように見えてメールが受信出来ないというおそろしい状況になるので気を付けた方がよいです。
- 行の始めが空白やTABのときは、前の行の続きと解釈されます。
- コメントの # は行頭でしか効かないそうです。
ローカルIPアドレスのReceivedヘッダへの漏洩を防ぐ
以上の設定では、このサーバを経由してメール送信したとき、送信元PCのローカルIPがダダ漏れてしまいますので、これを消去するための設定を行います。
/etc/postfix/master.cf
submission inet n - y - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_tls_auth_only=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o cleanup_service_name=scleanup scleanup unix n - y - 0 cleanup -o header_checks=regexp:/etc/postfix/header_checks_submission
/etc/postfix/header_checks_submission
/^Received:.*/ IGNORE
原理としては、メール送信にときに使用するsubmission(587)ポート経由で送信時に、main.cfの内容をmaster.cfのsubmission部分の設定で上書きします。その際、header_checksによって、Receivedヘッダを消去する設定を加えています。
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
これはSMTP Authを成功したクライアントの接続のみを許可する設定です。この設定を行わないと、外部から587ポートにSPAM等を送りつけられたときにReceivedヘッダが欠落するという致命的欠陥を抱えることになります。
設定変更後は再起動を行ってください。
SMTP(25番)ポートでのSMTP認証を無効化する
インターネットにサーバを公開していると絶えず攻撃にさらされますが、その中で25番ポートでの認証攻撃もかなり多く見掛けます。通常25番ポートは外部からのメール送信用にしか使いませんので、mastar.cf を編集してそもそも25番ポートでのSMTP認証を無効にしておきます。
smtp inet n - y - - smtpd -o smtpd_sasl_auth_enable=no
変更後は Postfix の再起動が必要です。この設定も行っても、587番ポートから(ID/PASSが合致すれば)メールは問題なく外部送信できます。可能ならば、ファイヤーウォールで587番ポートへのアクセスを制限しておくとさらに良いと思います。
SMTP認証は on のまま、外部への送信を許可しない場合は以下。
-o smtpd_relay_restrictions=permit_mynetworks,defer_unauth_destination