我有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 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年九月),这就是它在服务器端所做的事情
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 是因为它不需要证书,因此是“匿名的”,在不受信任的网络中不是一个好的计划,但为此目的是可以接受的。)
我怀疑您可能还会遇到连接新系统的第二个问题。可能发生的情况是客户端(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
重建。您可能还需要将调用替换SSLv23_client_method()
为TLSv1_client_method()
also,以便不会尝试SSLv2“兼容”ClientHello 并check_nrpe
在Nagios 服务器上重新编译。由于您面临与其他客户端的连接中断的风险,因此您可能需要第二个check_nrpe_new
二进制文件用于“升级”服务器,并在您的模板中使用它 command
(check_command
但我认为这不应该发生)。
(作为最后的手段,您可能可以做一些不漂亮的事情socat
或stunnel
弥补任何不匹配,这是一种方法:https://security.stackexchange.com/a/108850/18555.)
更精确的答案需要 OpenSSL 版本(openssl version -a
或相关的包管理器输出)和您的发行版本。