はじめに (対象読者・この記事でわかること)
この記事は、メールサーバーの管理者や構築を担当している方、Postfixを使用しているがSTARTTLSの設定方法に悩んでいる方を対象としています。
この記事を読むことで、STARTTLSの基本概念と重要性を理解し、PostfixでSTARTTLSを有効にする具体的な設定方法、STARTTLSが正しく機能しているかを確認する方法を習得できます。また、常に暗号化通信を強制する設定方法についても学ぶことができます。メールサーバーのセキュリティを強化し、安全なメール環境を構築するための知識を得ることができます。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- Linuxサーバーの基本的な操作
- Postfixの基本的な設定方法
- コマンドラインでの操作経験
- メールサーバーの基本的な仕組み
STARTTLSの概要と重要性
STARTTLSは、平文のSMTP通信を暗号化するための技術です。STARTTLSを利用することで、メールの送受信中の内容を第三者から盗聴されるリスクを大幅に低減できます。特に、パスワードや機密情報が含まれるメールを送信する際には必須のセキュリティ対策です。
Postfixは、メールサーバーとして広く使用されているオープンソースソフトウェアです。STARTTLSを正しく設定することで、Postfixはクライアントとの間でTLS/SSL暗号化通信を確立し、メールの安全性を確保します。
近年、多くのメールサービスプロバイダーがSTARTTLSの必須化を進めており、対応していないサーバーからのメールは受信拒否されるケースも増えています。そのため、メールサーバーの管理者としてSTARTTLSの設定と確認方法を理解しておくことは非常に重要です。
PostfixのSTARTTLS設定方法と確認方法
ステップ1:Postfixの現在の設定確認
まず、現在のPostfixの設定を確認します。以下のコマンドでmain.cfファイルの内容を確認します。
Bashsudo postconf -n
このコマンドにより、現在設定されているパラメータの一覧が表示されます。特に、以下のパラメータに注目します。
smtpd_tls_security_level: STARTTLSのセキュリティレベルを設定smtpd_tls_cert_file: サーバー証明書のパスsmtpd_tls_key_file: 秘密鍵のパスsmtpd_tls_CAfile: 認証局証明書のパス
ステップ2:必要なパッケージのインストール
STARTTLSを利用するには、必要なパッケージをインストールする必要があります。以下のコマンドでインストールします。
Bashsudo apt-get install postfix mailutils
また、TLS/SSLを利用するために、証明書と秘密鍵を用意する必要があります。自己署名証明書でも問題ありませんが、本番環境では信頼できる認証局から発行された証明書を使用することをお勧めします。
ステップ3:証明書と秘密鍵の準備
証明書と秘密鍵を準備します。以下のコマンドで自己署名証明書を作成できます。
Bashsudo openssl req -new -x509 -nodes -out /etc/postfix/smtpd.cert -keyout /etc/postfix/smtpd.key -days 365
このコマンドを実行すると、いくつかの質問が表示されます。適切に回答してください。証明書と秘密鍵は、Postfixが読み取り可能な場所に配置します。
ステップ4:Postfixの設定変更
Postfixの設定ファイルであるmain.cfを編集します。以下のコマンドでファイルを開きます。
Bashsudo nano /etc/postfix/main.cf
以下の設定を追加または変更します。
# STARTTLSの設定
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_loglevel = 1
各パラメータの説明:
- smtpd_tls_security_level = may: STARTTLSをオプションとして提供。encryptに設定すると、STARTTLS必須になる
- smtpd_tls_cert_file: サーバー証明書のパス
- smtpd_tls_key_file: 秘密鍵のパス
- smtpd_tls_CAfile: 認証局証明書のパス
- smtpd_tls_session_cache_database: セッションキャッシュの設定
- smtpd_tls_session_cache_timeout: セッションキャッシュの有効期限
- smtpd_tls_loglevel: ログレベル(0:なし、1:基本的な情報、2:詳細な情報)
設定が完了したら、ファイルを保存して閉じます。
ステップ5:Postfixの再起動
設定を反映させるために、Postfixを再起動します。
Bashsudo systemctl restart postfix
ステップ6:STARTTLSの確認
STARTTLSが正しく機能しているかを確認します。以下のコマンドで確認できます。
Bashopenssl s_client -connect localhost:25 -starttls smtp
このコマンドを実行すると、STARTTLSが有効な場合、以下のような応答が表示されます。
...
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
...
また、openssl s_clientコマンドの実行結果に以下のような情報が表示されれば、STARTTLSが正常に機能しています。
---
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: ...
Session-ID-ctx:
Master-Key: ...
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1641234567
Timeout : 7200 (sec)
Verify return code: 18 (self signed certificate)
Extended master secret: yes
Session-ID:
Session-ID-ctx:
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
Signature Algorithm: sha256WithRSAEncryption
...
ステップ7:外部からの確認
外部からもSTARTTLSが有効になっているか確認します。以下のコマンドで確認できます。
Bashtelnet mail.example.com 25
telnet接続後、以下のコマンドを入力します。
EHLO example.com
STARTTLSが有効な場合、以下のような応答が表示されます。
250-mail.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
ステップ8:常に暗号化通信を強制する設定
STARTTLSをオプションではなく必須にする場合は、smtpd_tls_security_levelをencryptに設定します。
smtpd_tls_security_level = encrypt
この設定に変更後、Postfixを再起動すると、STARTTLSなしでの接続はすべて拒否されます。
ハマった点やエラー解決
エラー1:証明書のパーミッションエラー
エラーメッセージ:
warning: connect to Milter service unix:/var/spool/postfix/spamass/spamass.sock: No such file or directory
warning: connect to Milter service unix:/var/spool/postfix/spamass/spamass.sock: No such file or directory
解決策: 証明書と秘密鍵のパーミッションを確認します。Postfixが読み取り可能である必要があります。
Bashsudo chmod 600 /etc/postfix/smtpd.cert sudo chmod 600 /etc/postfix/smtpd.key
エラー2:STARTTLSが有効になっていない
エラーメッセージ:
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
解決策:
STARTTLSの設定が正しく行われているか確認します。特にsmtpd_tls_security_levelの設定を確認します。
Bashsudo postconf -n | grep smtpd_tls_security_level
設定が反映されていない場合は、main.cfファイルの設定を再確認し、Postfixを再起動します。
Bashsudo systemctl restart postfix
エラー3:自己署名証明書による接続拒否
エラーメッセージ:
verify error:num=18:self signed certificate
verify return code:18 (self signed certificate)
解決策:
自己署名証明書を使用している場合、クライアント側で証明書を信頼する設定が必要です。テスト環境では、クライアント側で-ignore_verifyオプションを使用することで接続できます。
Bashopenssl s_client -connect localhost:25 -starttls smtp -ignore_verify
本番環境では、信頼できる認証局から証明書を取得することをお勧めします。
まとめ
本記事では、PostfixのSTARTTLS設定方法と確認方法について詳しく解説しました。
- STARTTLSの基本概念と重要性を理解しました
- PostfixでSTARTTLSを有効にする具体的な設定手順を学びました
- STARTTLSが正しく機能しているかを確認する方法を習得しました
- 常に暗号化通信を強制する設定方法も理解しました
この記事を通して、メールサーバーのセキュリティを強化するための重要な知識を得ることができたはずです。今後は、メールサーバーのセキュリティ対策についてさらに深く学習し、安全なメール環境を構築していきましょう。
参考資料
