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対応
コメント