Áú»¢¶Ä²© suporta comunica??es criptografadas entre componentes Áú»¢¶Ä²© usando Protocolo Transport Layer Security (TLS) v.1.2 e 1.3 (dependendo do biblioteca de criptografia). Criptografia baseada em certificado e baseada em chave pr¨¦-compartilhada ¨¦ suportado.
A criptografia pode ser configurada para conex?es:
A criptografia ¨¦ opcional e configur¨¢vel para componentes individuais:
Os programas daemon Áú»¢¶Ä²© usam uma porta de escuta para conex?es de entrada n?o criptografadas. Adicionar uma criptografia n?o requer abrindo novas portas em firewalls.
Para suportar a criptografia, o Áú»¢¶Ä²© deve ser compilado e vinculado a um dos bibliotecas de criptografia suportadas:
tls_*()
n?o s?o usadas. Componentes Áú»¢¶Ä²© compilados com LibreSSL n?o poder?o usar PSK, somente certificados podem ser usados.A biblioteca ¨¦ selecionada especificando a respectiva op??o para script "configurar":
--with-gnutls[=DIR]
--with-openssl[=DIR]
(tamb¨¦m usado para LibreSSL)Por exemplo, para configurar as origens para servidor e agente com OpenSSL voc¨º pode usar algo como:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
Diferentes componentes Áú»¢¶Ä²© podem ser compilados com diferentes criptomoedas bibliotecas (por exemplo, um servidor com OpenSSL, um agente com GnuTLS).
::: n?o importante Se voc¨º planeja usar chaves pr¨¦-compartilhadas (PSK), considere usar bibliotecas GnuTLS ou OpenSSL 1.1.0 (ou mais recente) em Componentes Áú»¢¶Ä²© usando PSKs. Bibliotecas GnuTLS e OpenSSL 1.1.0 suporta conjuntos de cifras PSK com . Vers?es mais antigas da biblioteca OpenSSL (1.0.1, 1.0.2c) tamb¨¦m suportam PSKs, mas os conjuntos de cifras PSK dispon¨ªveis n?o fornecem Perfect Forward Segredo. :::
Conex?es no Áú»¢¶Ä²© podem usar:
Existem dois par?metros importantes usados ??para especificar a criptografia entre Componentes do Áú»¢¶Ä²©:
TLSConnect
¨¦ usado nos arquivos de configura??o do proxy Áú»¢¶Ä²© (no modo ativo, especifica apenas conex?es com o servidor) e agente Áú»¢¶Ä²© (para verifica??es ativas). No frontend do Áú»¢¶Ä²©, o equivalente do TLSConnect ¨¦ o Conex?es ao host campo em Configura??o ¡ú Hosts ¡ú <alguns host> ¡ú guia Criptografia e o campo Conex?es ao proxy em Administra??o ¡ú Proxies ¡ú <algum proxy> ¡ú guia Criptografia. Se o tipo de criptografia configurado para falha de conex?o, nenhuma outra criptografia tipos ser?o tentados.
TLSAccept
¨¦ usado nos arquivos de configura??o do proxy Áú»¢¶Ä²© (no modo passivo, especifica apenas conex?es do servidor) e agente Áú»¢¶Ä²© (para verifica??es passivas). No frontend do Áú»¢¶Ä²©, o equivalente do TLSAccept ¨¦ o Conex?es do host campo em Configura??o ¡ú Hosts ¡ú <alguns host> ¡ú aba Criptografia e o campo Conex?es do proxy em Administra??o ¡ú Proxies ¡ú <algum proxy> ¡ú guia Criptografia.
Normalmente voc¨º configura apenas um tipo de criptografia para criptografias. Mas voc¨º pode querer mudar o tipo de criptografia, por exemplo a partir de descriptografado para baseado em certificado com tempo de inatividade e revers?o m¨ªnimos possibilidade. Para alcan?ar isto:
TLSAccept=unencrypted,cert
no arquivo de configura??o do agente e reinicie o agente Áú»¢¶Ä²©TLSAccept=cert
no arquivo de configura??o do agente e reinicie o agente Áú»¢¶Ä²©. Agora o agente aceitar¨¢ apenas conex?es baseadas em certificados criptografados. Conex?es n?o criptografadas e baseadas em PSK ser?o rejeitadas.De maneira semelhante, funciona no servidor e no proxy. Se no Áú»¢¶Ä²© frontend em configura??o do host Conex?es do host ¨¦ definido como "Certificado" e somente conex?es criptografadas baseadas em certificado ser?o aceitas do agent (verifica??es ativas) e zabbix_sender (itens do trapper).
Muito provavelmente voc¨º ir¨¢ configurar conex?es de entrada e sa¨ªda para usar o mesmo tipo de criptografia ou nenhuma criptografia. Mas tecnicamente ¨¦ poss¨ªvel configur¨¢-lo assimetricamente, por ex. baseado em certificado criptografia para conex?es de entrada e baseadas em PSK para conex?es de sa¨ªda.
A configura??o de criptografia para cada host ¨¦ exibida no Áú»¢¶Ä²© frontend, em Configura??o ¡ú Hosts na coluna Criptografia do agente. Por exemplo:
|Exemplo|Conex?es ao host|Conex?es permitidas do host|Conex?es rejeitadas do host| |-------|-------------------|--------------------- --------|------------------------------| ||Unencrypted|Unencrypted|Criptografado, certificado e criptografado com base em PSK| |
|Criptografado, baseado em certificado|Criptado, baseado em certificado|N?o criptografado e criptografado com base em PSK| |
|Criptografado, baseado em PSK|Criptado, baseado em PSK|N?o criptografado e criptografado com base em certificado| |
|Criptografado, baseado em PSK|Criptografia n?o criptografada e baseada em PSK|Criptografia baseada em certificado| |
|Criptografado, baseado em certificado|N?o criptografado, PSK ou criptografado baseado em certificado|-|
::: n?o importante As conex?es n?o s?o criptografadas por padr?o. Criptografia deve ser configurado para cada host e proxy individualmente. :::
Veja zabbix_get e zabbix_sender manpages para us¨¢-los com criptografia.
Ciphersuites por padr?o s?o configurados internamente durante a inicializa??o do Áú»¢¶Ä²© e, antes do Áú»¢¶Ä²© 4.0.19, 4.4.7, n?o s?o configur¨¢veis ??pelo usu¨¢rio.
Desde o Áú»¢¶Ä²© 4.0.19, 4.4.7 tamb¨¦m os ciphersuites configurados pelo usu¨¢rio s?o suportado para GnuTLS e OpenSSL. Os usu¨¢rios podem configure ciphersuites de acordo com suas pol¨ªticas de seguran?a. O uso deste recurso ¨¦ opcional (integrado ciphersuites padr?o ainda funcionam).
Para bibliotecas de criptografia compiladas com configura??es padr?o Áú»¢¶Ä²© built-in regras normalmente resultam nos seguintes conjuntos de cifras (em ordem de prioridade mais alta para mais baixa):
Biblioteca | Certificate ciphersuites | PSK ciphersuites |
---|---|---|
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 |
OpenSSL 1.1.0 | ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128- CCM8 AES128-CCM AES128-SHA256 AES128-SHA |
ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128 -GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA |
OpenSSL 1.1.1d | TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM- SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA |
TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA |
Os crit¨¦rios de sele??o do conjunto de cifras integrados podem ser substitu¨ªdos por ciphersuites configurados pelo usu¨¢rio.
::: n?o importante Ciphersuites configurados pelo usu¨¢rio ¨¦ um recurso destinado para usu¨¢rios avan?ados que entendem conjuntos de criptografia TLS, sua seguran?a e consequ¨ºncias de erros e que se sentem ¨¤ vontade com o TLS solu??o de problemas. :::
Os crit¨¦rios de sele??o do ciphersuite integrados podem ser substitu¨ªdos usando o seguintes par?metros:
Substituir escopo | Par?metro | Valor | Descri??o |
---|---|---|---|
Sele??o de Ciphersuite para certificados | TLSCipherCert13 | V¨¢lido OpenSSL 1.1.1 para protocolo TLS 1.3 (seus valores s?o passados ??para a fun??o OpenSSL SSL_CTX_set_ciphersuites()). | Crit¨¦rios de sele??o de conjuntos de c¨®digos baseados em certificados para TLS 1.3 Somente OpenSSL 1.1.1 ou mais recente. |
TLSCipherCert | OpenSSL v¨¢lido para TLS 1.2 ou GnuTLS v¨¢lido . Seus valores s?o passados ??para as fun??es SSL_CTX_set_cipher_list() ou gnutls_priority_init(), respectivamente. | Crit¨¦rios de sele??o de conjuntos de c¨®digos baseados em certificados para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
Sele??o de Ciphersuite para PSK | TLSCipherPSK13 | V¨¢lido OpenSSL 1.1.1 para protocolo TLS 1.3 (seus valores s?o passados ??para a fun??o OpenSSL SSL_CTX_set_ciphersuites()). | Crit¨¦rios de sele??o de conjuntos de c¨®digos baseados em PSK para TLS 1.3 Somente OpenSSL 1.1.1 ou mais recente. |
TLSCipherPSK | OpenSSL v¨¢lido para TLS 1.2 ou GnuTLS v¨¢lido . Seus valores s?o passados ??para as fun??es SSL_CTX_set_cipher_list() ou gnutls_priority_init(), respectivamente. | Crit¨¦rios de sele??o de ciphersuite baseados em PSK para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
Lista combinada de ciphersuite para certificado e PSK | TLSCipherAll13 | Valid OpenSSL 1.1.1 para protocolo TLS 1.3 (seus valores s?o passados ??para a fun??o OpenSSL SSL_CTX_set_ciphersuites()). | Crit¨¦rios de sele??o de Ciphersuite para TLS 1.3 Somente OpenSSL 1.1.1 ou mais recente. |
TLSCipherAll | OpenSSL v¨¢lido para TLS 1.2 ou GnuTLS v¨¢lido . Seus valores s?o passados ??para as fun??es SSL_CTX_set_cipher_list() ou gnutls_priority_init(), respectivamente. | Crit¨¦rios de sele??o do Ciphersuite para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) |
Para substituir a sele??o do ciphersuite em zabbix_get e zabbix_sender utilit¨¢rios - use o par?metros de linha de comando:
--tls-cipher13
--tls-cipher
Os novos par?metros s?o opcionais. Se um par?metro n?o for especificado, o valor padr?o interno ¨¦ usado. Se um par?metro ¨¦ definido, ele n?o pode ser vazio.
Se a configura??o de um valor TLSCipher* na biblioteca de criptografia falhar, o servidor, proxy ou agente n?o ser¨¢ iniciado e um erro ser¨¢ registrado.
? importante entender quando cada par?metro ¨¦ aplic¨¢vel.
O caso mais simples s?o as conex?es de sa¨ªda:
--tls-cipher13
e --tls-cipher
podem ser usados (a criptografia ¨¦ especificada sem ambiguidade com um --tls-connect
par?metro)O caso mais simples s?o as conex?es de sa¨ªda:
--tls-cipher13
e --tls-cipher
podem ser usados (a criptografia ¨¦ especificada sem ambiguidade com um --tls-connect
par?metro)Para ver quais ciphersuites foram selecionados, voc¨º precisa definir 'DebugLevel=4' no arquivo de configura??o, ou use a op??o -vv
para zabbix_sender.
Algumas experi¨ºncias com os par?metros TLSCipher*
podem ser necess¨¢rias antes de obter os conjuntos de cifras desejados. ? inconveniente reiniciar Servidor, proxy ou agente Áú»¢¶Ä²© v¨¢rias vezes apenas para ajustar TLSCipher*
par?metros. Op??es mais convenientes est?o usando zabbix_sender ou o comando openssl
. Vamos mostrar os dois.
1. Usando zabbix_sender.
Vamos fazer um arquivo de configura??o de teste, por exemplo /home/zabbix/test.conf, com a sintaxe de um arquivo zabbix_agentd.conf:
Nome do host=n?o existente
ServerActive=inexistente
TLSConnect=cert
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/agent.crt
TLSKeyFile=/home/zabbix/agent.key
TLSPSKIdentity=inexistente
TLSPSKFile=/home/zabbix/agent.psk
Voc¨º precisa de certificados v¨¢lidos de CA e agente e PSK para este exemplo. Ajuste os caminhos e nomes de certificados e arquivos PSK para seu ambiente.
Se voc¨º n?o estiver usando certificados, mas apenas PSK, voc¨º pode simplificar arquivo de teste:
Nome do host=n?o existente
ServerActive=inexistente
TLSConnect=psk
TLSPSKIdentity=inexistente
TLSPSKFile=/home/zabbix/agentd.psk
Os ciphersuites selecionados podem ser vistos executando zabbix_sender (exemplo compilado com OpenSSL 1.1.d):
$ zabbix_sender -vv -c /home/zabbix/test.conf -k item_n?o-existente -o 1 2>&1 | grep ciphersuites
zabbix_sender [41271]: depura??o: zbx_tls_init_child () ciphersuites de certificados: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-MCG-SHA256 ECDHE-RSA-AES de 128 SHA256 ECDHE-RSA-AES128-SHA AES128-MCG-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA
zabbix_sender [41271]: depura??o: zbx_tls_init_child () PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES de 128 CBC-SHA256 ECDHE-PSK-AES de 128 CBC-SHA PSK-AES128-MCG-SHA256 PSK-AES de 128 CCM8 PSK-AES de 128 CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
zabbix_sender [41271]: depura??o: zbx_tls_init_child () certificado e PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-MCG-SHA256 ECDHE-RSA-AES de 128 SHA256 ECDHE-RSA-AES128-SHA AES128-MCG-SHA256 AES128-CCM8 AES128 -CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
Aqui voc¨º v¨º os conjuntos de cifras selecionados por padr?o. Esses valores padr?o s?o escolhidos para garantir a interoperabilidade com os agentes Áú»¢¶Ä²© rodando em sistemas com vers?es mais antigas do OpenSSL (de 1.0.1).
Com sistemas mais novos, voc¨º pode optar por aumentar a seguran?a permitindo apenas um alguns conjuntos de cifras, e. apenas ciphersuites com PFS (Perfect Forward Segredo). Vamos tentar permitir apenas ciphersuites com PFS usando Par?metros TLSCipher*
.
::: n?o importante O resultado n?o ser¨¢ interoper¨¢vel com sistemas usando OpenSSL 1.0.1 e 1.0.2, se PSK for usado. Baseado em certificado criptografia deve funcionar. :::
Adicione duas linhas ao arquivo de configura??o test.conf
:
e teste novamente:
$ zabbix_sender -vv -c /home/zabbix/test.conf -k item_n?o-existente -o 1 2>&1 | grep ciphersuites
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificados ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES1128-SHA256 ECDHE-RSA-AES1128-SHA256
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() Ciphersuites PSK: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
zabbix_sender [42892]: depura??o: zbx_tls_init_child () certificado e PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-MCG-SHA256 ECDHE-RSA-AES de 128 SHA256 ECDHE-RSA-AES128-SHA AES128-MCG-SHA256 AES128-CCM8 AES128 -CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
As listas "certificate ciphersuites" e "PSK ciphersuites" foram alteradas - eles s?o mais curtos do que antes, contendo apenas conjuntos de cifras TLS 1.3 e TLS 1.2 ECDHE-* ciphersuites conforme esperado.
2. TLSCipherAll e TLSCipherAll13 n?o podem ser testados com zabbix_sender; eles n?o afetam "certificados e conjuntos de cifras PSK" valor mostrado no exemplo acima. Para ajustar TLScipherAll e TLSCipherAll13 voc¨º precisa experimentar com o agente, proxy ou servidor.
Portanto, para permitir apenas conjuntos de cifras PFS, voc¨º pode precisar adicionar at¨¦ tr¨ºs par?metros
TLSCipherCert=EECDH+aRSA+AES128
TLS CipherPSK=kECDHEPSK+AES128
TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128
para zabbix_agentd.conf, zabbix_proxy.c
O Áú»¢¶Ä²© usa o AES128 como padr?o interno para dados. Vamos supor que voc¨º est¨¢ usando certificados e deseja mudar para AES256, no OpenSSL 1.1.1.
Isso pode ser feito adicionando os respectivos par?metros em zabbix_server.conf
:
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/server.crt
TLSKeyFile=/home/zabbix/server.key
TLSCipherCert13=TLS_AES_256_GCM_SHA384
TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
TLSipherPSK13=TLS_CHACHA20_POLY1305_SHA256
TLSCipherPSK=kECDHEPSK+AES256:-SHA1
TLSipherAll13=TLS_AES_256_GCM_SHA384
TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384
::: n?o importante Embora apenas conjuntos de criptografia relacionados a certificados ser¨¢ usado, os par?metros TLSCipherPSK*
tamb¨¦m s?o definidos para evitar seus valores padr?o que incluem cifras menos seguras para interoperabilidade. Ciphersuites PSK n?o podem ser completamente desabilitados em servidor/proxy. :::
E em zabbix_agentd.conf
: