# 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:​

```{=html}
<!-- -->
```
       * 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*).

::: noteimportant
 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](https://en.wikipedia.org/wiki/Forward_secrecy#Perfect_forward_secrecy_.28PFS.29).
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](/pt/​manual/encryption/using_certificates)
-   [criptografia baseada em PSK (chave
    compartilhada)](/pt/​manual/​encryption/​using_pre_shared_keys)

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|
|-------|---------------------|----------------------------|----------------------------|
|![none.png](/manual/encryption/none.png)|Texto plano|Texto plano|Certificado ou chave compartilhada|
|![cert.png](/manual/encryption/cert.png)|Criptografado, por certificado|Criptografado, por certificado|Texto plano e chave compartilhada|
|![psk\_psk.png](/manual/encryption/psk_psk.png)|Criptografado, por chave compartilhada|Criptografado, por chave compartilhada|Texto plano ou chave|
|![psk\_none\_psk.png](/manual/encryption/psk_none_psk.png)|Criptografado, por chave compartilhada|Texto plano ou chave compartilhada|Certificado|
|![all.png](/manual/encryption/all.png)|Criptografado, por certificado|Texto plano, certificado ou chave compartilhada|\-|

::: noteimportant
 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](/pt/manpages/​zabbix_get) e
[zabbix\_sender](/pt/manpages/​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<br>TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256<br>TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA<br>TLS-RSA-WITH-AES-128-GCM-SHA256<br>TLS-RSA-WITH-AES-128-CBC-SHA256<br>TLS-RSA-WITH-AES-128-CBC-SHA|TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256<br>TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA<br>TLS-PSK-WITH-AES-128-GCM-SHA256<br>TLS-PSK-WITH-AES-128-CBC-SHA256<br>TLS-PSK-WITH-AES-128-CBC-SHA|
|*GnuTLS 3.1.18*|TLS\_ECDHE\_RSA\_AES\_128\_GCM\_SHA256<br>TLS\_ECDHE\_RSA\_AES\_128\_CBC\_SHA256<br>TLS\_ECDHE\_RSA\_AES\_128\_CBC\_SHA1<br>TLS\_RSA\_AES\_128\_GCM\_SHA256<br>TLS\_RSA\_AES\_128\_CBC\_SHA256<br>TLS\_RSA\_AES\_128\_CBC\_SHA1|TLS\_ECDHE\_PSK\_AES\_128\_CBC\_SHA256<br>TLS\_ECDHE\_PSK\_AES\_128\_CBC\_SHA1<br>TLS\_PSK\_AES\_128\_GCM\_SHA256<br>TLS\_PSK\_AES\_128\_CBC\_SHA256<br>TLS\_PSK\_AES\_128\_CBC\_SHA1|
|*OpenSSL 1.0.2c*|ECDHE-RSA-AES128-GCM-SHA256<br>ECDHE-RSA-AES128-SHA256<br>ECDHE-RSA-AES128-SHA<br>AES128-GCM-SHA256<br>AES128-SHA256<br>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|
