Conexão segura com o banco de dados

Visão geral

Esta seção fornece etapas e exemplos de configuração do Zabbix para conexões TLS seguras entre:

Banco de Dados Componentes Zabbix
MySQL Zabbix frontend, Zabbix server, Zabbix proxy
PostgreSQL Zabbix frontend, Zabbix server, Zabbix proxy

Para configurar a criptografia de conexão dentro do SGBD, consulte a documentação oficial do fornecedor para obter detalhes:

  • MySQL: servidores de banco de dados de réplica e fonte.
  • MySQL: replicação em grupo, etc. servidores de banco de dados.
  • PostgreSQL: opções de criptografia.

Todos os exemplos são baseados nas versões GA do MySQL CE (8.0) e PgSQL (13) e estão disponíveis através de repositórios oficiais usando AlmaLinux 8.

Requisitos

Os seguintes itens são necessários para configurar a criptografia:

  • Sistema operacional com suporte do desenvolvedor com OpenSSL >=1.1.X ou alternativa.

Recomenda-se evitar sistemas operacionais em status de fim de vida, especialmente no caso de novas instalações.

  • Motor de banco de dados (RDBMS) instalado e mantido a partir do repositório oficial fornecido pelo desenvolvedor. Sistemas operacionais frequentemente são enviados com versões desatualizadas de software de banco de dados para as quais o suporte à criptografia não está implementado, por exemplo, sistemas baseados em RHEL 7 e PostgreSQL 9.2, MariaDB 5.5 sem suporte à criptografia.
Terminologia

Definir esta opção força o uso de conexão TLS para o banco de dados a partir do servidor/proxy Zabbix e do frontend para o banco de dados:

  • required - conectar usando TLS como modo de transporte sem verificações de identidade;
  • verify_ca - conectar usando TLS e verificar o certificado;
  • verify_full - conectar usando TLS, verificar o certificado e verificar se a identidade do banco de dados (CN) especificada por DBHost corresponde ao seu certificado;

Configuração do Zabbix

Frontend para bancos de dados

Uma conexão segura com o banco de dados pode ser configurada durante a instalação do frontend:

  • Marque a caixa de seleção Database TLS encryption na etapa Configure DB connection para habilitar a criptografia de transporte.
  • Marque a caixa de seleção Verificar certificado do banco de dados que aparece quando o campo TLS encryption está marcado para habilitar a criptografia com certificados.

Para MySQL, a caixa de seleção Database TLS encryption é desativada se o Database host estiver configurado como localhost, porque a conexão que usa um arquivo de socket (no Unix) ou memória compartilhada (no Windows) não pode ser criptografada.
Para PostgreSQL, a caixa de seleção TLS encryption é desativada se o valor do campo Database host começar com uma barra ou se o campo estiver vazio.

Os seguintes parâmetros ficam disponíveis no modo de criptografia TLS com certificados (se ambas as caixas de seleção estiverem marcadas):

Parâmetro Descrição
Database TLS CA file Especifique o caminho completo para um arquivo de autoridade de certificação (CA) TLS válido.
Database TLS key file Especifique o caminho completo para um arquivo de chave TLS válido.
Database TLS certificate file Especifique o caminho completo para um arquivo de certificado TLS válido.
Database host verification Marque esta caixa de seleção para ativar a verificação do host.
Desativado para MySQL, porque a biblioteca PHP MySQL não permite pular a etapa de validação do certificado do par.
Database TLS cipher list Especifique uma lista personalizada de cifras válidas. O formato da lista de cifras deve estar em conformidade com o padrão OpenSSL.
Disponível apenas para MySQL.

Os parâmetros TLS devem apontar para arquivos válidos. Se apontarem para arquivos inexistentes ou inválidos, isso resultará em um erro de autorização.
Se os arquivos de certificado forem graváveis, o frontend gerará um aviso no relatório System information de que "Os arquivos de certificado TLS devem ser somente leitura." (exibido apenas se o usuário PHP for o proprietário do certificado).

Certificados protegidos por senhas não são suportados.

Casos de uso

Zabbix frontendusa a interface GUI para definir as opções possíveis: required, verify_ca, verify_full. Especifique as opções necessárias na etapa do assistente de instalação Configurar conexões de banco de dados. Essas opções são mapeadas para o arquivo de configuração (zabbix.conf.php) da seguinte maneira:

Configurações da GUI Arquivo de configuração Descrição Resultado
...
// Usado para conexão TLS.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Marcar Criptografia TLS do banco de dados
Deixar Verificar certificado do banco de dados desmarcado
Ativar modo 'required'.
...
$DB['ENCRYPTION'] = true;\\ $DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
1. Marcar Criptografia TLS do banco de dados e Verificar certificado do banco de dados
2. Especificar o caminho para o Arquivo CA TLS do banco de dados
Ativar o modo 'verify_ca'.
...
// Usado para conexão TLS com lista de cifras estritamente definida.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '<cipher_list>';
...

Ou:

...
// Usado para conexão TLS sem lista de cifras definida - selecionada pelo servidor MySQL
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '';
...
1. Marcar Criptografia TLS do banco de dados e Verificar certificado do banco de dados
2. Especificar o caminho para o Arquivo de chave TLS do banco de dados
3. Especificar o caminho para o Arquivo CA TLS do banco de dados
4. Especificar o caminho para o Arquivo de certificado TLS do banco de dados
5. Especificar lista de cifras TLS (opcional)
Ativar o modo 'verify_full' para MySQL.
...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = ' ';
...
1. Marcar Criptografia TLS do banco de dados e Verificar certificado do banco de dados
2. Especificar o caminho para Database TLS key file
3. Especificar o caminho para o Arquivo CA TLS do banco de dados
4. Especificar o caminho para o Arquivo de certificado TLS do banco de dados
5. Marcar Verificação de host do banco de dados
Ativar o modo 'verify_full'para PostgreSQL.

Consulte também: Encryption configuration examples for MySQL, Encryption configuration examples for PostgreSQL.

Configuração do Zabbix server/proxy

Conexões seguras ao banco de dados podem ser configuradas com os respectivos parâmetros no arquivo de configuração do Zabbix server e/ou proxy.

Configuração Resultado
Nenhuma Conexão ao banco de dados sem criptografia.
1. Defina DBTLSConnect=required Servidor/proxy faz uma conexão TLS com o banco de dados. Uma conexão não criptografada não é permitida.
1. Defina DBTLSConnect=verify_ca
2. Defina DBTLSCAFile - especifique o arquivo da autoridade de certificação TLS
Servidor/proxy faz uma conexão TLS com o banco de dados após verificar o certificado do banco de dados.
1. Defina DBTLSConnect=verify_full
2. Defina DBTLSCAFile - especifique o arquivo da autoridade de certificação TLS
Servidor/proxy faz uma conexão TLS com o banco de dados após verificar o certificado do banco de dados e a identidade do host do banco de dados.
1. Defina DBTLSCAFile - especifique o arquivo da autoridade de certificação TLS
2. Defina DBTLSCertFile - especifique o arquivo do certificado de chave pública do cliente
3. Defina DBTLSKeyFile - especifique o arquivo da chave privada do cliente.
Servidor/proxy fornece um certificado de cliente ao se conectar ao banco de dados.
1. Defina DBTLSCipher - a lista de cifras de criptografia que o cliente permite para conexões usando protocolos TLS até o TLS 1.2

ou DBTLSCipher13 - a lista de cifras de criptografia que o cliente permite para conexões usando o protocolo TLS 1.3
(MySQL) Conexão TLS é feita usando uma cifra da lista fornecida.
(PostgreSQL) Definir esta opção será considerado um erro.