nagios handshake SSL

0

Eu tenho nagios client que gerou um erro repentino após uma atualização. Eu reinstalei o agente nagios-plugin e nrpe novamente, mas não consigo resolver o erro. Esta versão usa nrpe em 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
}

Não é possível efetuar telnet do cliente para o servidor

# 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.
    
por Mongrel 08.03.2016 / 17:53

1 resposta

2

O NRPE não foi atualizado em alguns anos ( setembro de 2013 ), isso é o que faz no lado do servidor

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();

e o cliente ( check_nrpe no servidor 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");

As funções SSLv23_xxx costumavam ser a maneira mais compatível para se conectar a qualquer sistema SSLv2 ou SSLv3.x. Ambos os itens acima são reprovados . Enquanto o código desativa as versões de protocolo 2.0 e 3.0 (deixando apenas TLS), a conexão do cliente será iniciada com um SSLv2 ClientHello.

DH primos menores que 1024 são agora considerados inseguros (embora possa ser 768 em algumas versões do OpenSSL). Isso explica porque você não pode se conectar a si mesmo, o cliente OpenSSL (check_nrpe) irá rejeitar uma chave DH curta. (ADH é usado desde que não precisa de um certificado e é, portanto, "anônimo", não um bom plano em uma rede não confiável, mas aceitável para este fim.)

Suspeito que você também esteja enfrentando um segundo problema ao se conectar ao novo sistema. O que provavelmente aconteceu é que o cliente (servidor NSCA) atualizou para usar um OpenSSL recente, o SSLv2 foi recentemente desativado por padrão , embora algumas distribuições o façam há anos. Na maioria dos casos, ainda deve haver uma sobreposição no protocolo / ciphersuite, mas é possível e comum para o servidor TLS (daemon nrpe, neste caso) com SSLv2 desabilitado rejeitar um pacote de handshake SSLv2 ClientHello , mesmo que o client indica SSLv3 ou superior no handshake (detalhes técnicos aqui: usado quando acessando um site"> )

Para corrigir isso, pode ser necessário fazer o downgrade do OpenSSL no sistema atualizado ou instalar uma versão OpenSSL antiga paralela que não tenha essas precauções (sensatas!). Nem soa como boas opções ...

Se você criou nrpe , deve ser suficiente , será necessário substituir a chamada por get_dh512() por get_dh1024() e recompile-o com uma nova chave estática de 1024 bits - para isso, você precisará criar uma nova codificação de 1024 bits, modificando a codificação embutida 512 em configure (linha 6748) e reexecutando-a, ou usando

opensl dhparam -C 1024 | awk '/^-----/{exit} {print}' > include/dh.h

e, em seguida, make para reconstruir. Provavelmente, você também precisará substituir a chamada para SSLv23_client_method() with TLSv1_client_method() para que um Clienthello SSLv2 "compatível" não seja tentado e recompile check_nrpe no servidor Nagios. Como você corre o risco de quebrar a conectividade com outros clientes, talvez precise de um segundo check_nrpe_new para servidores "atualizados" e usar isso em command / check_command de seus modelos (não acho que isso deva acontecer embora).

(Como último recurso, você pode fazer algo imprevisível com socat ou stunnel para colmatar qualquer incompatibilidade, aqui está uma maneira de fazer isso: link .)

Uma resposta mais precisa exigirá a versão do OpenSSL ( openssl version -a ou a saída do gerenciador de pacotes relevante) e suas versões de distribuição.

    
por 08.03.2016 / 20:36