サーバーのSSL/TLS設定をテストするssltest.shでの結果に対処する postfix編

ALL
スポンサーリンク

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

コメント