16. Criptografia
Visão geral
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.
Limitações
- As chaves privadas são armazenadas em texto plano em arquivos com permissão de leitura pelos componentes do Zabbix durante a inicialização.
- As chaves compartilhadas são informadas na interface web do Zabbix e salvas em texto plano no banco de dados.
- A criptografia nativa da solução não proteje as comunicações:
<!-- -->
* 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.
Compilando o Zabbix com o suporte a criptografia
Para suportar a criptografia do Zabbix você precisa compilar e associar com uma destas três bibliotecas:
- mbed TLS (antigamente PolarSSL)(versão 1.3.9 ou superior - 1.3.x) - o mbed TLS 2.x não é suportado atualmente
- GnuTLS (a partir da versão 3.1.18)
- OpenSSL (a partir da versão 1.0.1)
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.
Gerenciamento de conexão criptografada
As conexões do Zabbix podem usar:
- nenhuma criptografia (default)
- criptografia baseada em certificado
- criptografia baseada em PSK (chave compartilhada)
Existem dois parâmetros importantes utilizados para especificar a criptografia de conexões entre os componentes do Zabbix:
TLSConnectTLSAccept
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.
zabbix_get e zabbix_sender com criptografia
Consulte o manual dos componentes zabbix_get e zabbix_sender para informações sobre como eles trabalham com criptografia.
Algorítimos de 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 |




