O Áú»¢¶Ä²© suporta comunica??o criptografada entre os seus componentes (Áú»¢¶Ä²© server/Proxy/Agent/Sender/get) atrav¨¦s de TLS v1.2. O suporte a criptografia come?ou no Áú»¢¶Ä²© 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 Áú»¢¶Ä²© 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.
Para suportar a criptografia do Áú»¢¶Ä²© 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 Áú»¢¶Ä²© 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 Áú»¢¶Ä²© usando PSKs. As bibliotecas GnuTLS e mbed TLS / PSK suportam a suite de cifras com . 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 Áú»¢¶Ä²© podem usar:
Existem dois par?metros importantes utilizados para especificar a criptografia de conex?es entre os componentes do Áú»¢¶Ä²©:
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 Áú»¢¶Ä²© proxy (em modo ativo) e do Áú»¢¶Ä²© 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 Áú»¢¶Ä²© 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 Áú»¢¶Ä²©, 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 Áú»¢¶Ä²© 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 Áú»¢¶Ä²© no canto direito da listagem de hosts na coluna "Criptografia do agente".
O padr?o sao conex?es n?o criptografadas. A criptografia precisa ser configurada em cada host e proxy individualmente.
O Áú»¢¶Ä²© pode utilizar certificados no formato PEM, assinados por uma CA. A verifica??o de certificado ¨¦ feita atrav¨¦s de um certificado CA pr¨¦-instalado. Certificados auto-assinados n?o s?o suportados. Opcionalmente uma lista de certificados revogados poder¨¢ ser utilizada. Cada componente Áú»¢¶Ä²© dever¨¢ ter apenas um certificado configurado. A escolha entre m¨²ltiplos certificados n?o ¨¦ suportada.
Para mais informa??es sobre como configurar e opera??o interna da CA, como gerar as requisi??es de certificados e assina-las, como revogar certificados voc¨º encontrar¨¢ em in¨²meros sites da internet, por exemplo:
Par?metro | °¿²ú°ù¾±²µ²¹³Ù¨®°ù¾±´Ç | Descri??o | ||
---|---|---|---|---|
TLSCAFile | * | Caminho completo do arquivo contendo os certificados raiz (CA) para verifica??o dos certificados entre as partes, utilizado para comunica??es criptografadas entre os componentes do Áú»¢¶Ä²©. Certificados de v¨¢rias CAs dever?o ser inclu¨ªdos em uma ¨²nica linha. | ||
TLSCertFile | * | Caminho completo para o arquivo contendo o certificado de agente ou a cadeia de certificados. | ||
TLSCRLFile | * | Caminho completo para o arquivo contendo os certificados revogados, utilizado para comunica??es criptografadas entre os componentes do Áú»¢¶Ä²©. Se o arquivo definido em TLSCAFile contiver v¨¢rias CAs e o componente Áú»¢¶Ä²© for compilado com OpenSSL e TLSCRLFile estiver definido, cada CA mencionada em TLSCAFile dever¨¢ ter um correspondente CRL (que pode ser um CRL vazio) no TLSCRLFile | ||
TLSKeyFile | n?o | Caminho completo para o arquivo contendo a chave privada do agente. Verifique se o permissionamento do arquivo permite que o usu¨¢rio 'zabbix' o leia | ||
TLSServerCertIssuer | * | Emissor de certificado autorizado do server (proxy) | ||
TLSServerCertSubject | * | Destino do certificado permitido pelo server (proxy) |
No Áú»¢¶Ä²© cada PSK atualmente ¨¦ um par de:
A identidade PSK ¨¦ um texto n?o vazio no formato UTF-8. Por exemplo, "PSK ID 001 Áú»¢¶Ä²© agentd". ? o nome ¨²nico com o qual este PSK espec¨ªfico ser¨¢ referenciado pelos componentes do Áú»¢¶Ä²©. N?o coloque informa??o sens¨ªvel na identidade PSK - ela ser¨¢ transmitida de forma n?o criptografada pela rede.
O valor PSK ¨¦ mais dif¨ªcil de adivinhar por ser um texto hexadecimal, por exemplo, "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Aqui temos um tamanho m¨¢ximo para a identidade e para o valor PSK no Áú»¢¶Ä²©, em alguns casos a biblioteca de criptografia tem um valor menor:
Componente | Tamannho da identidade PSK | Tamanho do valor PSK |
---|---|---|
Áú»¢¶Ä²© | 128 UTF-8 characteres | 2048-bit (256-byte PSK, informado como 512 digitos hexadecimais) |
GnuTLS | 128 bytes (may include UTF-8 characteres) | 2048-bit (256-byte PSK, informado como 512 digitos hexadecimais) |
mbed TLS (PolarSSL) | 128 UTF-8 characters | 256-bit (limite padr?o) (32-byte PSK, informado como 64 digitos hexadecimais) |
OpenSSL | 127 bytes (pode incluri caracteres UTF-8) | 2048-bit (256-byte PSK, informado como 512 digitos hexadecimais) |
A interface web do Áú»¢¶Ä²© permite configurar identidades PSK de at¨¦ 128 caracteres e at¨¦ 2048-bit sem o uso das bibliotecas PSK. Se algum componente do Áú»¢¶Ä²© suportar valores menores ¨¦ de responsabilidade do usu¨¢rio configura ra identidade e valor PSK de forma que ambos o aceitem. Exceder o limite de tamanho resultar¨¢ em falha de comunica??o.
Antes do Áú»¢¶Ä²© Server se conectar com o agente usando PSK, o servidor analisa a identidade e valor PSK configurados para aquele agente no banco de dados (ou no cache de configura??o). Ap¨®s receber a conex?o do agente, ele usa a identidade e valor PSK de sua configura??o. Se ambas as partes tiverem o mesmo conjunto a conex?o ser¨¢ estabelecida.
? de responsabilidade do usu¨¢rio garantir que n?o existam duas chaves PSK com o mesmo conte¨²do, mas com valores diferentes. Isso poder¨¢ causar interrup??es imprevis¨ªveis de comunica??o entre os componentes.
No host do agente salve o valor PSK em um arquivo, por exemplo, /home/zabbix/zabbix_agentd.psk
. O arquivo precisa conter o PSK em sua primeira linha, por exemplo:
Defina o permissionamento do arquivo, somente o usu¨¢rio Áú»¢¶Ä²© dever¨¢ conseguir l¨º-lo.
Edite os par?metros de TLS no arquivo de configura??o do agente zabbix_agentd.conf
:
O agente ir¨¢ se conectar com o servidor (verifica??o ativa) e aceitar¨¢ do servidor e do zabix_get
apenas conex?es usando PSK. Neste caso a identidade PSK ser¨¢ "PSK 001".
Reinicie o agente. Agora voc¨º pode fazer um teste de conex?o utilizando o zabbix_get
:
zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk
(Para minimizar o tempo de indisponibilidade veja como mudar o tipo de conex?o em gerenciamento de conex?o criptografada).
Configure o PSK para este host na interface web do Áú»¢¶Ä²©.
Ap¨®s a atualiza??o do cache de configura??o do Áú»¢¶Ä²© Server/Proxy as comunica??es come?ar?o a ocorrer atrav¨¦s de conex?es criptografadas com PSK. Eventuais erros podem ser localizados tanto no log do agente quanto no log do servidor
Salve o arquivo de valor PSK do proxy em um arquivo, por exemplo, /home/zabbix/zabbix_proxy.psk
. O arquivo precisa conter o valor em sua primeira linha:
Defina o permissionamento do arquivo, somente o usu¨¢rio Áú»¢¶Ä²© dever¨¢ conseguir l¨º-lo.
Edite os par?metros de TLS no arquivo de configura??o do agente zabbix_proxy.conf
:
O proxy vai se conectar ao servidor usando PSK e a identidade PSK ser¨¢ "PSK 002".
(Para minimizar o tempo de indisponibilidade veja como mudar o tipo de conex?o em gerenciamento de conex?o criptografada).
Configure o PSK para este proxy na interface web do Áú»¢¶Ä²©.
Reinicie o proxy. Ele ir¨¢ se comunicar com o servidor usando conex?o criptografada baseada em PSK. Verifique os logs do proxy e do server por mensagens de erro.
Para proxies passivos o processo ¨¦ muito similar, a ¨²nica diferen?a ¨¦ que tem que se configurar o par?metro TLSAccept=psk
no arquivo de configura??o do proxy e definr o campo Conex?es com o proxy na interface web do Áú»¢¶Ä²© para PSK
.
* entre o servidor web e o navegador do usu¨¢rio,
* entre o Áú»¢¶Ä²© Server (ou proxy) e seu banco de dados.
gnutls_handshake() failed: -110 The TLS connection was non-properly terminated.
in TLS client side log.
gnutls_handshake() failed: -90 The SRP username supplied is illegal.
in TLS server side log.
Causa poss¨ªvel: Identidade PSK maior que 128 informada para a biblioteca GnuTLS.
ssl_set_psk(): SSL - Bad input parameters to function
Causa poss¨ªvel: PSK maior que 32 bytes informada para a biblioteca mbed TLS (PolarSSL)