nagios SSL 握手
我有
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.
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 是因為它不需要證書,因此是“匿名的”,在不受信任的網路中不是一個好的計劃,但可以用於此目的。)
我懷疑您可能還會遇到連接到新系統的第二個問題。可能發生的情況是客戶端(NSCA 伺服器)已更新為使用最近的 OpenSSL,SSLv2 最近已預設禁用,儘管一些發行版多年來一直這樣做。在大多數情況下,協議/密碼套件仍應存在重疊,但禁用 SSLv2 的 TLS 伺服器(在這種情況下為 nrpe 守護程序)拒絕 SSLv2 ClientHello握手數據包是可能且常見的,即使客戶端在握手(這裡的技術細節: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()
with的呼叫get_dh1024()
並用新的靜態 1024 位密鑰重新編譯它——為此,您需要通過修改硬-在configure
(第 6748 行)中編碼 512並重新執行它,或使用opensl dhparam -C 1024 | awk '/^-----/{exit} {print}' > include/dh.h
然後
make
重建。您可能還需要將呼叫替換為SSLv23_client_method()
也TLSv1_client_method()
,以便不會嘗試 SSLv2“兼容”ClientHello 並check_nrpe
在 Nagios 伺服器上重新編譯。由於您冒著中斷與其他客戶端連接的風險,因此您可能需要第二個check_nrpe_new
二進製文件用於“升級”伺服器,並在您的模板中使用它command
(check_command
但我認為這不應該發生)。(作為最後的手段,您可能會做一些不愉快的事情
socat
或stunnel
彌補任何不匹配,這是一種方法:https ://security.stackexchange.com/a/108850/18555 。)更準確的答案將需要 OpenSSL 版本(
openssl version -a
或相關的包管理器輸出)和您的分發版本。