ここでは、Postfix環境のメールサーバーにおいて送信時のSTARTTLSを有効にする手順について解説します。また、メール送信は認証されたユーザーのみ行うようにするため、SASL AUTH認証の設定を合わせて行います。認証処理はDovecot側で行うようにします。
自己証明書の作成
STARTTLSに対応する前に、サーバーで使用する証明書を作成していきます。
まずは秘密鍵とCSRを作成します。
openssl req -new -newkey rsa:2048 -nodes -keyout postfix.key -out postfix.csr -subj "/C=JP/ST=Tokyo/L=Tokyo/O=MyOrg/CN=mail.domain.internal"CSRが作成できたら、次に証明書を作成します。
openssl x509 -req -days 365 -in postfix.csr -signkey postfix.key -out postfix.crt証明書を発行したら、秘密鍵と証明書を/etc/pki/tls以下の所定の場所に配置します。
cp postfix.key /etc/pki/tls/private
cp postfix.crt /etc/pki/tls/certsmain.cfの設定
続いて、/etc/postfix/main.cfに対して以下のように設定を追加します。
# SMTPサーバが使用するサーバー証明書を指定する
smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.crt
# サーバー証明書に対する秘密鍵
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
# SMTP接続時のTLS必須レベル
# none:TLS無効/ may:TLS可能なら使用 / encrypt:TLS必須
smtpd_tls_security_level = encrypt
# SMTP AUTHを有効化してクライアントがAUTH PLAIN とAUTH LOGINを使用できるようにする
smtpd_sasl_auth_enable = yes
# 認証バックエンドをdovecotに指定し、dovecotのauthプロセスに問い合わせてユーザー認証を行う。
smtpd_sasl_type = dovecot
# Dovecotの認証ソケットを指定。/var/spool/postfix/private/auth
smtpd_sasl_path = private/auth
# 許可する認証方式を匿名禁止にし、ユーザー名とパスワードを要求する。
smtpd_sasl_security_options = noanonymous
# 認証ドメインのデフォルト値。userとして認証するとuser@$myhostnameとして認証。
smtpd_sasl_local_domain = $myhostname
# メールを送れる対象の指定。先頭から順に評価される。
smtpd_recipient_restrictions = permit_sasl_authenticated, reject/etc/postfix/master.cfを編集し、submissionポートの設定箇所のコメントアウトを外します。
submission inet n - n - - smtpd
# -o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yessmtpd_sasl_auth_enableでSASL AUTHを有効にし、smtpd_tls_auth_onlyの設定ではクライアントがメール送信する際に必ず認証を行うようにしています。
もし社内ネットワークで認証できないサービスがある場合は、mynetworkに対象の機器のIPアドレスを指定して以下のように設定を行う。
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, rejectdovecotの設定
Postfix側でSASL AUTH認証処理をDovecotで行うように設定したので、併せてDovecot側でも設定を行います。/etc/dovecot/conf.d/10-master.confを編集し、serviece authの項目を以下のように設定します。
service auth {
(抜粋)
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}サービスの起動
設定項目が正しいかどうか確認し、問題なければサービスを再起動します。
postfix check
systemctl restart postfix
systemctl restart dovecotファイアウォール設定
firewall-cmd --add-port=587/tcp --permanent
firewall-cmd --reload送信サーバーの設定
メールクライアントで、送信サーバーの設定を行い、接続の保護やユーザー名を指定してOKを選択する。

信頼済みの証明書ではないのでエラーが出ますが、今回は例外として処理しました。
以上でSTARTTLSとSASL AUTHの設定は完了です。
ご覧いただきありがとうございました。