SSL/TLSのサーバー設定や脆弱性のテスト等を行う、bashスクリプト版のツール testssl.sh でのテストで検出されたセキュリティ問題への対処方法です。
今回は、メール送信サーバーの設定(postfix)についてです。
testssl.sh については、次の記事を参照してください。
TLS/SSL暗号をサポートするサービスをチェックする testssl.sh | パソコン鳥のブログ
テスト方法
次のように実行すると、smtp/ポート587番に対してテストします。
xxxxxxの箇所は、サーバー名またはURLを指定します。
この時、サーバー証明書の内容と、サーバー名またはURLで指定したサーバー名が異なると、証明書のテストで「certificate does not match supplied URI」となって問題が検出されますので、注意してください。
./testssl.sh -t smtp xxxxxx:587
実行すると、次のようにチェック結果が表示されます。
下記では表示結果の一部分だけを示していますが、実際はこの後に続けていろいろ表示されます。
ここで検出された問題の対処方法を以降で説明します。
検出された問題の対処方法
以降ではセキュリティ重大度が CRITICAL(ターミナル上で桜色で表示される項目)、HIGH(赤)、MEDIUM(暗い黄色)への対処方法を説明します。
以降のmain.cf は /etc/postfix/main.cf になります。
また設定を変更後、service postfix reload を実行して反映してください。
Testing protocols via sockets
testssl.sh の実行結果で、「Testing protocols via sockets」の箇所で検出された問題への対処方法です。
SSLv3、TLS 1、TLS 1.1
main.cfで以下を設定します。
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
Testing cipher categories
testssl.sh の実行結果で、「Testing cipher categories」の箇所で検出された問題への対処方法です。
Anonymous NULL Ciphers (no authentication)
main.cfで以下を設定します。
tls_high_cipherlist = EECDH+AESGCM
LOW: 64 Bit + DES, RC[2,4] (w/o export)
main.cfで以下を設定します。
smtpd_tls_mandatory_ciphers = high
Triple DES Ciphers / IDEA
main.cfで以下を設定します。
smtpd_tls_mandatory_ciphers = high
Obsolete CBC ciphers (AES, ARIA etc.)
main.cfで以下を設定します。
tls_high_cipherlist = EECDH+AESGCM
Testing server preferences
testssl.sh の実行結果で、「Testing server preferences」の箇所で検出された問題への対処方法です。
Has server cipher order?
main.cfで以下を設定します。
tls_preempt_cipherlist = yes
Negotiated cipher
main.cfで以下を設定します。
tls_high_cipherlist = EECDH+AESGCM
Testing vulnerabilities
testssl.sh の実行結果で、「Testing vulnerabilities」の箇所で検出された問題への対処方法です。
Secure Client-Initiated Renegotiation
CentOS7では、「VULNERABLE (NOT ok), potential DoS threat」と出ますが誤検知です。
CentOS8/RockyLinux(postfixバージョンが3.4以降)の場合、main.cfで以下を設定します。
tls_ssl_options = NO_RENEGOTIATION
postfixバージョンが2.11以降~3.4未満の場合、main.cfで以下を設定します。
tls_ssl_options = 0x40000000
なお、postfixのバージョンは次を実行すると確認できます。
postconf | grep mail_version
POODLE, SSL (CVE-2014-3566)
main.cfで以下を設定します。
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
SWEET32 (CVE-2016-2183, CVE-2016-6329)
main.cfで以下を設定します。
smtpd_tls_mandatory_ciphers = high
LOGJAM (CVE-2015-4000), experimental
main.cfで以下を設定します。
tls_high_cipherlist = EECDH+AESGCM
BEAST (CVE-2011-3389)
main.cfで以下を設定します。
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
LUCKY13 (CVE-2013-0169), experimental
main.cfで以下を設定します。
tls_high_cipherlist = EECDH+AESGCM
RC4 (CVE-2013-2566, CVE-2015-2808)
main.cfで以下を設定します。
smtpd_tls_mandatory_ciphers = high
参考
レンタルサーバとSSL/TLS – Qiita
10. メールサーバ構築(4) – postfix [さくらのVPS/CentOS7] – ma3ki’s memo
linux – How to disable client-initiated renegotiation in Postfix? – Server Fault
これからのメールセキュリティ~ 暗号編 ~
Postfix TLS Support
Postfixのバージョンを確認する
CentOS/RHEL 7 postfix false postives · Issue #484 · drwetter/testssl.sh · GitHub
コメント