Submission ポートのサービスを Postfix から Dovecot に移す
最近、検索してみると、メールサーバ(Submission ポート)構築のトレンドは、Dovecot SASL + Postfix という組み合わせのようです。 Submission ポートは Postfix で待ち受けて、Postfix と Dovecot を UNIX ソケットでつないで、Postfix から Dovecot の認証情報を利用する設定です。 その設定でも問題ないのですが、最新の Dovecot は Submission ポートのサービスが実装されていますので、それを使う方がスッキリすると思います。ということで、さっそくやってみます。
なお、Dovecot 2.3.20、Postfix 3.7.3 を使用しています。
Postfix 側の設定
主題と少し逸れるので、簡単に書きます。
Postfix は SMTP (ポート 25)だけを開けるので、/etc/postfix/master.cf
はデフォルト設定のままで、OK です。Submission ポートを LISTEN する設定になっている場合は、元に戻してください。
/etc/postfix/main.cf
は通常通りの設定で OK ですが、Dovecot で受け取ったメールを Postfix で中継することになるので、
Dovecot を動かしているホストからの中継を許可します。小規模メールサーバではどちらも同一のホストだと思うので、通常は許可する設定になっていると思います。
既に動いているメールサーバをこの設定に変更したい時は、/etc/postfix/main.cf
は放っておいて、/etc/postfix/master.cf だけデフォルト設定に戻せば OK です(要は ポート 587 を閉じる。
/etc/postfix/main.cf
に Submission ポートに関する設定が残っていても、どのみち無視されるので問題ないです)。
Postfix を再起動して設定を反映させましょう。
ポートの話が出たので、一つ。Dovecot SASL を使ってメールサーバを構築するブログ記事の多くで、ポート 465 を Submission ポートのように使っていますが、Submission ポートは 587 です。歴史的な経緯でまだ使えますが、現在ではポート 465 は非推奨です。
Dovecot 側の設定
/etc/dovecot/dovecot.conf
を設定します。
# Protocols we want to be serving. #protocols = imappop3 lmtpsubmission protocols = imap submission
IMAP と Submission サービスを有効にします。POP3 はお好みで。
/etc/dovecot/conf.d/10-ssl.conf
を設定します。
# root. Included doc/mkcert.sh can be used to easily generate self-signed # certificate, just make sure to update the domains in dovecot-openssl.cnf ssl_cert =</etc/pki/dovecot/certs/dovecot.pemssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem ssl_key =</etc/pki/dovecot/private/dovecot.pemssl_key = </etc/letsencrypt/live/example.com/privkey.pem # Or migrate from old ssl-parameters.dat file with the command dovecot # gives on startup when ssl_dh is unset.#ssl_dh =</etc/dovecot/dh.pemssl_dh = </etc/ssl/dh2048.pem # To disable non-EC DH, use: #ssl_cipher_list = ALL:!DH:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH ssl_cipher_list =PROFILE=SYSTEMssl_cipher_list = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305 # Prefer the server's order of ciphers over client's.#ssl_prefer_server_ciphers =nossl_prefer_server_ciphers = yes # Dovecot also recognizes values ANY and LATEST. ANY matches with any protocol # version, and LATEST matches with the latest version supported by library.#ssl_min_protocol = TLSv1.2 ssl_min_protocol = TLSv1.2
通常の TLS の設定です。いつも通りなので、言及すべきことは特にありません。/etc/ssl/dh2048.pem
は事前に作成しておいてください。
/etc/dovecot/conf.d/20-submission.conf
は一カ所だけ設定が必要です。
# Host name for the relay server (required)#submission_relay_host = submission_relay_host = smtp.example.com
リレー先の SMTP サーバを指定します。小規模メールサーバの場合はおそらく Dovecot と同一ホストで動いている Postfix を指定すると思いますが、その場合でも、localhost
のような書き方は避けた方が良いと思います。この部分は、メールヘッダ(Recieved:
)に出てきます。
Dovecot を再起動して、設定を反映させましょう。
Dovecot で Submission サーバを構築する場合、/etc/dovecot/dovecot.conf
と /etc/dovecot/conf.d/20-submission.conf
に 2行書くだけで済みます。Dovecot SASL を設定する場合に比較すると、かなり簡便に済みます。
それ以外の設定項目
他に情報が少ないので、/etc/dovecot/conf.d/20-submission.conf
の各設定についてざっと紹介します。
submission_logout_format = in=%i out=%o
- ログの出力フォーマットです。通常は変更する必要はないでしょう。
hostname = mail.example.com
HELO/EHLO
コマンドに対して、Submission サーバが名乗るホスト名を指定します。デフォルトは動作中のシステムのホスト名です。submission_max_mail_size =
submission_max_recipients =
- メールの最大サイズ、最大宛先数を指定します。デフォルトは無制限ですが、リレー先の SMTP サーバによっても制限されます。
submission_client_workarounds = whitespace-before-path mailbox-for-path
- Postfix の設定では broken_sasl_client に相当するもので、古いメールクライアントへの救済措置です。デフォルトは指定なしで、必要に応じて
whitespace-before-path
とmailbox-for-path
をスペース区切りで指定します。 submission_relay_host = smtp.example.com
リレー先の SMTP サーバを指定します。必須の設定項目です。
submission_relay_port = 25
- リレー先の SMTP サーバのポートを指定します。デフォルトは 25 です。
submission_relay_trusted = yes
|no
- リレー先の SMTP サーバに対して
XCLIENT
コマンドを送信するかどうかを指定します。デフォルトはno
です。XCLIENT
コマンドは Postfix の独自拡張です。何をするのかよくわかりませんでした。詳しい方、解説いただけると幸いです。 submission_relay_user =
submission_relay_master_user =
submission_relay_password =
- リレー先の SMTP サーバで認証が必要な場合、ユーザ名とパスワードを指定します。私は試していないので、言及は避けます。
submission_relay_ssl = no
|smtps
|starttls
- リレー先の SMTP サーバとの間の通信を暗号化するかどうかを指定します。同一のサーバ内や安全なネットワーク内で完結するならば、デフォルトの
no
のままで OK です。念のため書いておきますが、Submission サービスは StartTLS で暗号化されますのでご安心を。 submission_relay_ssl_verify = yes
|no
- リレー先の SMTP サーバの SSL 証明書の真正性を検証する場合は
yes
を指定します。 submission_relay_rawlog_dir = /var/log
- リレー先の SMTP サーバとの通信内容を出力するディレクトリを指定します。デバッグ用です。
submission_backend_capabilities =
- Dovecot は Message Submission BURL Extension(RFC4468)をサポートしています。Dovecot が Submission サービスを実装した大きな動機の一つで、目玉機能ではあるのですが、よくわかりません。
おわりに
Dovecot で Submission サーバを構築する事例を紹介しました。 Dovecot SASL を使う方法に比べると、Dovecot - Postfix 間のソケットを作らなくて済むので、簡単に設定できます。 ただ、新しすぎて情報が少ないですし、logwatch もまだログのフィルタが整備されておらず、毎日正常終了した送信ログが届きます。 全体としてはサーバの更生がスッキリするので、皆様もお試しください。