Postfix SMTP メールリレー MTA 送信に TLS を利用する Rocky Linux

ソフトウエア

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

Postfixで構築したメールリレーのサーバーでTLSを利用し、SMTP通信を行いたい。手順方法が知りたい。

この疑問に回答します。

いつの間にか平文通信のプロトコルは、暗号化して通信する前提になっています。平文でも受け取ってくれるけれど、色々なところでアラートを出すようになってきました。時代の流れですね、従いましょう。

Postfixの設定方法(TLS化)

SMTP通信は平文です。暗号化は後から出来るようになった技術です。デフォルト設定だと暗号化はされません。明示的に設定を有効化する必要があります。SMTPは外部のメールサーバーと通信する仕組みなので、相手の設定を強制できません。

したがって、HTTP/HTTPSのように一気に切替わることは無理だと思います。

設定ファイル main.cf の変更

PostfixのTLS化は、とても簡単です。main.cf にTLS設定を追加するのみです。

# vi /etc/postfix/main.cf
smtp_tls_CAfile = /etc/pki/tls/cert.pem
smtp_tls_security_level = may
smtp_tls_loglevel = 1

あとは、設定を反映させるだけです。私の利用している環境はRocky Linux、CentOSです。環境に合わせてサービスを再読み込みさせてください。

# systemctl reload postfix

あとは、ログを確認し通信状況を確認しましょう。

Rocky Linux の場合は、smtp_tls_CAfile パラメータが既に設定されています。重複を防ぎましょう。

重複エラーのログです。

postfix/postlog[466866]: warning: /etc/postfix/main.cf, line xxx: overriding earlier entry: smtp_tls_CAfile=/etc/pki/tls/certs/ca-bundle.crt

既に「smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt」と設定されているのに「smtp_tls_CAfile = /etc/pki/tls/cert.pem」を追加したため重複エラーがログに表示されました。

Postfix 設定パラメーターの意味

smtp_tls_security_level

ここが一番重要な設定です。

パラメーター値を 「may」 を設定します。

may の場合、送信先の SMTP サーバーが TLS 対応している場合はTLS を利用し、未対応の場合は通常の SMTP で送信します。

パラメーター値意味
なしTLSが有効にされない限り、TLSは使われません。
mayサーバーがサポートしていればTLSが使われます。
encryptTLS暗号化の強制。
verifyTLS検証の強制。
secureセキュアチャネルTLS。

smtp_tls_CAfile

接続先の証明書を検証するためのルート証明書です。

ルート証明書の期限が切れていたりすると正しい設定でもエラーが出力されるので内容を確認しましょう。もし、古いようであれば最新のものに更新しましょう。

ルート証明書確認方法

# openssl x509 -text -noout -in /etc/pki/tls/cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 6828503384748696800 (0x5ec3b7a6437fa4e0)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=ACCVRAIZ1, OU=PKIACCV, O=ACCV, C=ES
        Validity
            Not Before: May  5 09:37:37 2011 GMT
            Not After : Dec 31 09:37:37 2030 GMT ← 有効期限
        Subject: CN=ACCVRAIZ1, OU=PKIACCV, O=ACCV, C=ES
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)

私の利用しているルート証明書は、有効期限が将来になっているので問題はありませんが、もし、有効期限が過去になっている場合は最新のものに更新してください。

ルート証明書の更新手順

ルート証明書の更新に利用するファイル「/etc/pki/tls/certs/ca-bundle.crt」です。

CentOSの場合「ca-bundle.crt」は openssl パッケージで管理していますので、ルート証明書の更新は簡単です。

#### yum コマンドの場合
# yum update openssl

### dnf コマンドの場合
# dnf upate openssl

smtp_tls_loglevel

これを設定しないとログファイルに送信時の TLS 情報が出ません。設定しましょう。TLSの動作確認が目的なのでパラメータ値は「1」をしています。

パラメーター値意味
0TLS動作に関するログ記録を無効にします(デフォルト値)
1TLSハンドシェイクと証明書の情報をログに記録します。
2TLSネゴシエーションの間のレベルをログに記録します。
3TLSネゴシエーションプロセスの16進数およびASCIIダンプをログに記録します。
4STARTTLS以降の通信の16進数およびASCIIダンプを完全にログに記録します。

動作確認(ログ)

あとは、ログを確認し通信状況を確認しましょう。postfixのログ(/var/log/maillog)を確認します。

postfix/smtp[16207]: Trusted TLS connection established to mx02.mail.icloud.com[x.x.x.x]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

ログに「Trusted TLS connection established」を記述されていれば正常に動作しています。