はじめに (対象読者・この記事でわかること)

この記事は、メールサーバーの管理者や構築を担当している方、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ファイルの内容を確認します。

Bash
sudo postconf -n

このコマンドにより、現在設定されているパラメータの一覧が表示されます。特に、以下のパラメータに注目します。

  • smtpd_tls_security_level: STARTTLSのセキュリティレベルを設定
  • smtpd_tls_cert_file: サーバー証明書のパス
  • smtpd_tls_key_file: 秘密鍵のパス
  • smtpd_tls_CAfile: 認証局証明書のパス

ステップ2:必要なパッケージのインストール

STARTTLSを利用するには、必要なパッケージをインストールする必要があります。以下のコマンドでインストールします。

Bash
sudo apt-get install postfix mailutils

また、TLS/SSLを利用するために、証明書と秘密鍵を用意する必要があります。自己署名証明書でも問題ありませんが、本番環境では信頼できる認証局から発行された証明書を使用することをお勧めします。

ステップ3:証明書と秘密鍵の準備

証明書と秘密鍵を準備します。以下のコマンドで自己署名証明書を作成できます。

Bash
sudo openssl req -new -x509 -nodes -out /etc/postfix/smtpd.cert -keyout /etc/postfix/smtpd.key -days 365

このコマンドを実行すると、いくつかの質問が表示されます。適切に回答してください。証明書と秘密鍵は、Postfixが読み取り可能な場所に配置します。

ステップ4:Postfixの設定変更

Postfixの設定ファイルであるmain.cfを編集します。以下のコマンドでファイルを開きます。

Bash
sudo 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を再起動します。

Bash
sudo systemctl restart postfix

ステップ6:STARTTLSの確認

STARTTLSが正しく機能しているかを確認します。以下のコマンドで確認できます。

Bash
openssl 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が有効になっているか確認します。以下のコマンドで確認できます。

Bash
telnet 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_levelencryptに設定します。

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が読み取り可能である必要があります。

Bash
sudo 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の設定を確認します。

Bash
sudo postconf -n | grep smtpd_tls_security_level

設定が反映されていない場合は、main.cfファイルの設定を再確認し、Postfixを再起動します。

Bash
sudo systemctl restart postfix

エラー3:自己署名証明書による接続拒否

エラーメッセージ:

verify error:num=18:self signed certificate
verify return code:18 (self signed certificate)

解決策: 自己署名証明書を使用している場合、クライアント側で証明書を信頼する設定が必要です。テスト環境では、クライアント側で-ignore_verifyオプションを使用することで接続できます。

Bash
openssl s_client -connect localhost:25 -starttls smtp -ignore_verify

本番環境では、信頼できる認証局から証明書を取得することをお勧めします。

まとめ

本記事では、PostfixのSTARTTLS設定方法と確認方法について詳しく解説しました。

  • STARTTLSの基本概念と重要性を理解しました
  • PostfixでSTARTTLSを有効にする具体的な設定手順を学びました
  • STARTTLSが正しく機能しているかを確認する方法を習得しました
  • 常に暗号化通信を強制する設定方法も理解しました

この記事を通して、メールサーバーのセキュリティを強化するための重要な知識を得ることができたはずです。今後は、メールサーバーのセキュリティ対策についてさらに深く学習し、安全なメール環境を構築していきましょう。

参考資料