nagios
アップグレード後に突然エラーが発生したクライアントがあります。再インストールしnagios-plugin
てnrpe
プロキシを再インストールしましたが、エラーを解決できませんでした。このバージョンnrpe
はxinetd
。
# /usr/local/nagios/libexec/check_nrpe -H localhost
CHECK_NRPE: Error - Could not complete SSL handshake.
# netstat -plan | grep :5666
tcp 0 0 :::5666 :::* LISTEN 20265/xinetd
Nagios-server-IP 10.10.3.30
# cat /etc/xinetd.d/nrpe | grep -i only_from
only_from = 127.0.0.1 10.10.3.30
# cat /etc/xinetd.d/nrpe
# default: on
# description: NRPE (Nagios Remote Plugin Executor)
service nrpe
{
flags = REUSE
socket_type = stream
port = 5666
wait = no
user = nagios
group = nagios
server = /usr/local/nagios/bin/nrpe
server_args = -c /usr/local/nagios/etc/nrpe.cfg --inetd
log_on_failure += USERID
disable = no
only_from = 127.0.0.1 10.10.3.30
}
クライアントからサーバーに Telnet できません。
# telnet 10.10.3.30 5666
Trying 10.10.3.30...
Connected to 10.10.3.30.
Escape character is '^]'.
Connection closed by foreign host.
答え1
NRPEは数年間更新されていません(2013 年 9 月)、これがサーバー側で行われる作業です。
SSL_library_init();
SSLeay_add_ssl_algorithms();
meth=SSLv23_server_method();
...
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
...
SL_CTX_set_cipher_list(ctx,"ADH");
dh=get_dh512();
とクライアント(check_nrpe
Nagiosサーバー)
SSL_library_init();
SSLeay_add_ssl_algorithms();
meth=SSLv23_client_method();
...
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
...
SSL_CTX_set_cipher_list(ctx,"ADH");
これらのSSLv23_xxx
機能は、かつてSSLv2またはSSLv3.xシステムに接続する最も互換性のある方法でした。上記の両方廃止。コードはプロトコルバージョン2.0と3.0を無効にしますが(TLSのみを残します)、クライアント接続はSSLv2 ClientHelloで始まります。
1024未満のDH素数は今は安全ではないと考えられる(一部のOpenSSLバージョンでは768かもしれませんが)これは、OpenSSLクライアント(check_nrpe)に接続できない場合に短いDHキーを拒否する理由を示しています。 (ADHは証明書を必要としないため、「匿名」なので、信頼できないネットワークでは良い計画ではありませんが、この目的には許可されています。)
新しいシステムへの接続に2番目の問題がある可能性があります。クライアント(NSCAサーバー)が最新のOpenSSLを使用するように更新され、最近SSLv2も更新されたためです。デフォルトでは無効、一部のディストリビューションでは、長年この作業を行ってきました。ほとんどの場合、プロトコル/パスワードのコレクションにはまだ冗長性が必要ですが、SSLv2が無効なTLSサーバー(この場合はnrpeデーモン)はSSLv2を拒否できます。こんにちはお客様クライアントがハンドシェイクでSSLv3以降を表示している場合でも、ハンドシェイクパケット(技術詳細:https://security.stackexchange.com/questions/59367/what-exactly-determines-what-version-of-ssl-tls-is-used-when-accessing-a-site)
この問題を解決するには、最新のシステムでOpenSSLをダウングレードしたり、これらの(合理的な!)予防措置なしで並列以前のバージョンのOpenSSLをインストールする必要があるかもしれません。どちらも良い選択ではないようです...
自分で建てたらnrpe
、しなければならない十分です。get_dh512()
通貨を次に変更する必要があります。get_dh1024()
そして新しい静的1024ビットキーで再コンパイルします。configure
(行6748)でハードコードされた512を変更して、これを実行してやり直すか、以下を使用してください。
opensl dhparam -C 1024 | awk '/^-----/{exit} {print}' > include/dh.h
その後、make
再構築します。また、SSLv2「互換性」ClientHelloを試さずにNagiosサーバーで再コンパイルしないように呼び出しを置き換えることもできますSSLv23_client_method()
。他のクライアントとの接続が切断される危険性があるため、サーバーを「アップグレード」するために2番目のバイナリが必要になる可能性があり、これをテンプレートで使用できます(しかし私はこれが起こってはならないと思います)。TLSv1_client_method()
check_nrpe
check_nrpe_new
command
check_command
(最後の手段で悪いことをしたり、socat
矛盾stunnel
を補償したりする方法は次のとおりです。https://security.stackexchange.com/a/108850/18555.)
より正確な回答を得るには、OpenSSLバージョン(openssl version -a
または関連パッケージマネージャの出力)とディストリビューションが必要です。