SSL POODLE脆弱性の対処として設定でSSLv3を無効にする方法が出回っていますが、何かの拍子に有効化してしまう危険性もあるので、とりあえずNagiosのプラグインを書いて監視するようにしました。opensslコマンドがインストール済みである前提です。
上記ファイルをダウンロードしてNagiosのプラグインディレクトリに保存します。コマンドのパスがFreeBSD前提になっているので、適宜書き換えて下さい。
設定のサンプルです。
define command { command_name check_sslv3 command_line $USER1$/check_sslv3 -H $HOSTADDRESS$ -p $ARG1$ }
監視対象が多いので、各サービス監視用の共通定義を書きます。サービスの監視は別にやっているので、チェック間隔は長め(60分)にします。
# HTTPS SSLv3 define service { name generic-https-sslv3 use generic-service normal_check_interval 60 service_description SSLv3 HTTPS check_command check_sslv3!443 is_volatile 0 register 0 }
こんな感じでIMAPS(993), POP3S(995), SMTPS(465), LDAPS(636)あたりの定義も書いておきます。
サーバ毎のサービス監視定義を記述します。
# HTTP define service{ use generic-https-sslv3 host_name <target.host> } # IMAP define service{ use generic-imaps-sslv3 host_name <target.host> }
設定が終わったらNagiosを再起動して監視できているか確認します。
Courier IMAPのimaps/pop3sサーバについて、設定サンプルの記述ミスに起因して効果のない対策が広まってしまっているようです。
Courier IMAPでは、imapd-ssl, pop3d-sslという設定ファイル内のTLS_PROTOCOLという設定項目で使用するプロトコルのバージョンを指定でき、設定ファイルには、
##NAME: TLS_PROTOCOL:0 # # TLS_PROTOCOL sets the protocol version. The possible versions are: # # OpenSSL: # # SSL3 - SSLv3 # SSL23 - all protocols (including TLS 1.x protocols) # TLS1 - TLS1 # TLSv1.1 - TLS1.1 # TLSv1.2 - TLS1.2
と記述されています。このコメントに沿って
TLS_PROTOCOL=TLS1
という記述をもってPOODLE対策としているサイトがいくつかあるようです。
ところが、実際のプロトコルを決定するための処理は、
method=((!protocol || !*protocol) ? NULL: strcmp(protocol, "SSL3") == 0 ? SSLv3_method(): strcmp(protocol, "SSL23") == 0 ? SSLv23_method(): strcmp(protocol, "TLSv1") == 0 ? TLSv1_method(): #ifdef HAVE_TLSV1_1_METHOD strcmp(protocol, "TLSv1.1") == 0 ? TLSv1_1_method(): #endif #ifdef HAVE_TLSV1_2_METHOD strcmp(protocol, "TLSv1.2") == 0 ? TLSv1_2_method(): #endif NULL); if (!method) { method=SSLv23_method(); options|=SSL_OP_NO_SSLv2; }
というコードになっており、TLS_PROTOCOLの値が"SSL3", "SSL23", {~orangered:"TLSv1"~}, "TLSv1.1", "TLSv1.2"であればそれらに対応するプロトコル、それ以外、つまりサンプルに記述されている"TLS1"などの場合は"SSL23"相当、つまりSSLv3が有効な状態になってしまいます。
したがって、正しくは当該部分を
TLS_PROTOCOL=TLSv1 TLS_STARTTLS_PROTOCOL=TLSv1
と記述する必要があるようでした。
ちなみに、opensslコマンドで以下のように実行して、handshake failureが返ってくればSSLv3は無効になっている事が確認できます。
% openssl s_client -ssl3 -connect localhost:993 CONNECTED(00000003) 62978:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/s3_pkt.c:1106:SSL alert number 40 62978:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/s3_pkt.c:543:
こうならずに
* OK [CAPABILITY (略)] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
のような表示になったらSSLv3がまだ有効になったままですので、設定を見直す必要があります。