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

ALL
スポンサーリンク

SSL/TLSのサーバー設定や脆弱性のテスト等を行う、bashスクリプト版のツール testssl.sh でのテストで検出されたセキュリティ問題への対処方法です。
今回は、メール受信サーバーの設定(dovecot)についてです。

testssl.sh については、次の記事を参照してください。
TLS/SSL暗号をサポートするサービスをチェックする testssl.sh | パソコン鳥のブログ

スポンサーリンク

テスト方法

次のように実行すると、imap/ポート143番に対してテストします。
xxxxxxの箇所は、サーバー名またはURLを指定します。
この時、サーバー証明書の内容と、サーバー名またはURLで指定したサーバー名が異なると、証明書のテストで「certificate does not match supplied URI」となって問題が検出されますので、注意してください。

./testssl.sh -t imap xxxxxx:143

実行すると、次のようにチェック結果が表示されます。
下記では表示結果の一部分だけを示していますが、実際はこの後に続けていろいろ表示されます。
ここで検出された問題の対処方法を以降で説明します。

検出された問題の対処方法

以降ではセキュリティ重大度が CRITICAL(ターミナル上で桜色で表示される項目)、HIGH(赤)、MEDIUM(暗い黄色)への対処方法を説明します。

以降の設定内容は、/etc/dovecot/conf.d/10-ssl.conf になります。
設定を変更後、service dovecot reload を実行して反映してください。

なお、ssl_cipher_list を次のようにすると多くの問題が修正されます。
先に下記を設定してから testssl.sh を実行してください。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

Testing protocols via sockets

testssl.sh の実行結果で、「Testing protocols via sockets」の箇所で検出された問題への対処方法です。

SSLv3、TLS 1、TLS 1.1

以下を設定します。

Dovecot バージョン2.2以前の場合
ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1

Dovecot バージョン2.3以降の場合
ssl_min_protocol = TLSv1.2

Testing cipher categories

testssl.sh の実行結果で、「Testing cipher categories」の箇所で検出された問題への対処方法です。

LOW: 64 Bit + DES, RC[2,4] (w/o export)

以下を設定します。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

Triple DES Ciphers / IDEA

以下を設定します。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

Obsolete CBC ciphers (AES, ARIA etc.)

以下を設定します。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

Testing robust (perfect) forward secrecy

testssl.sh の実行結果で、「Testing robust (perfect) forward secrecy」の箇所で検出された問題への対処方法です。

DH group offered

以下を設定します。

Dovecot バージョン2.2以前の場合
ssl_dh_parameters_length = 2048

Testing server preferences

testssl.sh の実行結果で、「Testing server preferences」の箇所で検出された問題への対処方法です。

Has server cipher order?

以下を設定します。

ssl_prefer_server_ciphers = yes

Negotiated cipher

以下を設定します。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH
ssl_prefer_server_ciphers = yes

Testing server defaults (Server Hello)

testssl.sh の実行結果で、「Testing server defaults (Server Hello)」の箇所で検出された問題への対処方法です。

Chain of trust

Let’s Encryptを使用している場合で本項目が検出された場合は、ssl_cert で fullchain.pem を設定します。
以下の設定で、XXXXXXXX の箇所は各自のドメイン名に読み替えてください。

ssl_cert = </etc/letsencrypt/live/XXXXXXXX/fullchain.pem

Testing vulnerabilities

testssl.sh の実行結果で、「Testing vulnerabilities」の箇所で検出された問題への対処方法です。

Secure Client-Initiated Renegotiation

本項目を対処する項目が、dovecotの設定にはありません。
また、該当のCVE(CVE-2011-1473)は論争中とのことで、本件が検出されても、わたしは現状はそのままにしています。

参考:
Client-initiated secure renegotiation
CVE – CVE-2011-1473

POODLE, SSL (CVE-2014-3566)

以下を設定します。

Dovecot バージョン2.2以前の場合
ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1

Dovecot バージョン2.3以降の場合
ssl_min_protocol = TLSv1.2

TLS_FALLBACK_SCSV (RFC 7507)

以下を設定します。

Dovecot バージョン2.2以前の場合
ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1

Dovecot バージョン2.3以降の場合
ssl_min_protocol = TLSv1.2

SWEET32 (CVE-2016-2183, CVE-2016-6329)

以下を設定します。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

LOGJAM (CVE-2015-4000), experimental

以下を設定します。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

BEAST (CVE-2011-3389)

以下を設定します。

Dovecot バージョン2.2以前の場合
ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1

Dovecot バージョン2.3以降の場合
ssl_min_protocol = TLSv1.2

LUCKY13 (CVE-2013-0169), experimental

以下を設定します。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

RC4 (CVE-2013-2566, CVE-2015-2808)

以下を設定します。

ssl_cipher_list = !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

参考

Server Cipher Order enforcement | cPanel Forums
null-i.net – Linux/postfix、dovecotのSSL対応

コメント