O Zabbix suporta comunicação criptografada entre os seus componentes (Zabbix server/Proxy/Agent/Sender/get) através de TLS v1.2. O suporte a criptografia começou no Zabbix 3.0. A criptografia baseada em PSK e certificado também é suportada.
A criptografia é opcional e configurável para cada componente (ex. alguns proxies e agentes podem estar configurados para utilizar criptografia com certificados ao falar com o Server, enquanto outros utilizam PSK, e outros não usam criptografia).
O proxy pode utilizar diferentes configurações de criptografia para diferentes hosts.
Os daemons do Zabbix utilizam uma porta para escutar comunicações criptografadas ou não criptografia. Adicionar a criptografia não exigirá a abertura de novas portas nos firewalls.
* entre o servidor web do Zabbix e o navegador do usuário ((Nota do tradutor: para isso você deve habilitar o HTTPS no Apache)),
* entre a interface web e o Zabbix Server,
* entre o Zabbix Server/Proxy e seu banco de dados.
* Atualmente cada conexão criptografada precisa de validação TLS completa, não é feito nenhum cache de sessão ou uso de sistema de tickets.
* A adição de criptografia aumenta o tempo de verificações e ações, dependendo da latência da rede.\\ Por exemplo, se atraso do pacote é de 100ms quando se abre uma conexão TCP e envia uma requisição em texto plano consome cerca de 200ms.\\ A mesma solicitação com o uso de criptografia gastará cerca de 1000 ms para o estabelecimento da conexão TLS.\\ O tempo limite (timeout) precisa ser ajustado, de outra forma alguns itens e ações executando scripts remotos que funcionavam com a conexão sem criptografia poderão falhar por esgotamento do tempo quando passarem a utilizar criptografia.
Para suportar a criptografia do Zabbix você precisa compilar e associar com uma destas três bibliotecas:
A biblioteca é selecionada através de parâmetro no script de configuração:
--with-mbedtls[=DIR]
--with-gnutls[=DIR]
--with-openssl[=DIR]
Por exemplo, para configurar os fontes do servidor edo agente com OpenSSL você pode executar algo assim:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
Diferentes componentes do Zabbix podem ser compilados com diferentes bibliotecas criptográficas (ex. um servidor com OpenSSL, um agente com GnuTLS).
Se você planejar utilizar PSK, considere a utilização das bibliotecas GnuTLS ou mbed TLS nos componentes Zabbix usando PSKs. As bibliotecas GnuTLS e mbed TLS suportam a suite de cifras com Perfeito encaminhamento de segredo. A biblioteca OpenSSL (versões 1.0.1, 1.0.2c) suporta o PSK mas não tem disponível as suítes de cifras que provejam o perfeito encaminhamento de segredo.
As conexões do Zabbix podem usar:
Existem dois parâmetros importantes utilizados para especificar a criptografia de conexões entre os componentes do Zabbix:
TLSConnect
TLSAccept
TLSConnect
define qual criptografia a utilizar nas conexões de saída e pode pegar 1 de 3 valores (unencrypted
, PSK
, certificate
). TLSConnect
é utilizado em arquivos de configuração do Zabbix proxy (em modo ativo, identifica apenas conexões para o servidor) e do Zabbix agentd (para verificações ativas). Na interface web o TLSConnect
é equivalente ao campo Conexões com o host em Configuração → Hosts →<some host> aba Criptografia e o campo Conexões com o proxy em Administração→Proxies→<some proxy> aba Criptografia. Se um tipo de conexão criptografada falhar, não será tentado outro tipo. TLSAccept
define quais tipos de conexão de entrada serão permitidos. Tipos possíveis: unencrypted
, PSK
, certificate
. Podem ser definidos 1 ou mais valores. TLSAccept
é utilizado em arquivos de configuração do proxy (em modo passivo) e do agente (em modo passivo). Na interface web do Zabbix o TLSAccept
é equivalente ao campo "Conexões com o host" em "//Configuração → Hosts →<some host>" aba Criptografia e o campo "Conexões com o proxy" em //Administração→Proxies→<some proxy>" aba Criptografia.
Normalmente você configura somente um tipo de criptografia para as conexões de entrada. Mas você pode precisar alterar o tipo de criptografia, (ex. de não criptografado para criptografia baseada em certificados) com o mínimo de 'downtime' e possibilidade de rápido retorno. \\Para fazer isso defina TLSAccept=unencrypted,cert
no arquivo de configuração do agente o o reinicie. \\Então você poderá testar a conexão com o zabbix_get
com o agente usando certificado. Se funcionar, você reconfigura a criptografia daquele agente na interface web do Zabbix, configurando para o uso de certificado. Quando o cache de comunicação do servidor for atualizado (e a configuração do proxy for atualizada se o proxy estiver sendo monitorado por um) as conexões começarão a ocorrer de forma criptografa. \\Se tudo estiver funcionando como o esperado você pode configurar TLSAccept=cert
na configuração do agente e reinicia-lo. Agora o agente vai aceitar apenas conexões criptografadas e com certificado. Comunicações sem criptografia ou baseadas em PSK serão rejeitadas.
A configuração funciona de forma similar entre o Zabbix Server/Proxy. Se o host estiver configurado para usar certificado, então apenas comunicações criptografadas com certificados serão aceitas pelo agente (verificações ativas) e pelo zabbix_sender
(trapper items).
Provavelmente você irá configurar para que as comunicações de entrda e de saída ocorram com o mesmo tipo de criptografia ou sem criptografia para todos. Mas é tecnicamente possível configurar isso de forma assimétrica, ex. criptografia com certificados para entrada e com PSK para a saída.
Para uma visão geral, a configuração de criptografia de cada host será apresentada na interface do Zabbix no canto direito da listagem de hosts na coluna "Criptografia do agente". Exemplos de configurações:
Exemplo | Conexões PARA o host | Conexões permitidas DO host | Conexões REJEITADAS do host |
---|---|---|---|
Texto plano | Texto plano | Certificado ou chave compartilhada | |
Criptografado, por certificado | Criptografado, por certificado | Texto plano e chave compartilhada | |
Criptografado, por chave compartilhada | Criptografado, por chave compartilhada | Texto plano ou chave | |
Criptografado, por chave compartilhada | Texto plano ou chave compartilhada | Certificado | |
Criptografado, por certificado | Texto plano, certificado ou chave compartilhada | - |
O padrão sao conexões não criptografadas. A criptografia precisa ser configurada em cada host e proxy individualmente.
Consulte o manual dos componentes zabbix_get e zabbix_sender para informações sobre como eles trabalham com criptografia.
Os algorítimos são configurados internamente durante a inicialização do Zabbix e, dependendo da biblioteca de criptografia, eles podem não ser configuráveis pelo usuário.
Lista de bibliotecas de criptografia configuradas ordenadas por sua prioridade:
Library | Certificate ciphersuites | PSK ciphersuites |
---|---|---|
mbed TLS (PolarSSL) 1.3.9 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256 TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA TLS-RSA-WITH-AES-128-GCM-SHA256 TLS-RSA-WITH-AES-128-CBC-SHA256 TLS-RSA-WITH-AES-128-CBC-SHA |
TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA TLS-PSK-WITH-AES-128-GCM-SHA256 TLS-PSK-WITH-AES-128-CBC-SHA256 TLS-PSK-WITH-AES-128-CBC-SHA |
GnuTLS 3.1.18 | TLS_ECDHE_RSA_AES_128_GCM_SHA256 TLS_ECDHE_RSA_AES_128_CBC_SHA256 TLS_ECDHE_RSA_AES_128_CBC_SHA1 TLS_RSA_AES_128_GCM_SHA256 TLS_RSA_AES_128_CBC_SHA256 TLS_RSA_AES_128_CBC_SHA1 |
TLS_ECDHE_PSK_AES_128_CBC_SHA256 TLS_ECDHE_PSK_AES_128_CBC_SHA1 TLS_PSK_AES_128_GCM_SHA256 TLS_PSK_AES_128_CBC_SHA256 TLS_PSK_AES_128_CBC_SHA1 |
OpenSSL 1.0.2c | ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-SHA256 AES128-SHA |
PSK-AES128-CBC-SHA |
Uso dos conjuntos criptográficos (linhas - TLS de cliente, colunas - TLS de servidor): Usando certificados:
mbed TLS (PolarSSL) | GnuTLS | OpenSSL | |
---|---|---|---|
mbed TLS (PolarSSL) | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 |
GnuTLS | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 |
OpenSSL | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 |
Usando PSK:
mbed TLS (PolarSSL) | GnuTLS | OpenSSL | |
---|---|---|---|
mbed TLS (PolarSSL) | TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 | TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 | TLS-PSK-WITH-AES-128-CBC-SHA |
GnuTLS | TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 | TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 | TLS-PSK-WITH-AES-128-CBC-SHA |
OpenSSL | TLS-PSK-WITH-AES-128-CBC-SHA | TLS-PSK-WITH-AES-128-CBC-SHA | TLS-PSK-WITH-AES-128-CBC-SHA |