Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

5 Conexão segura com o banco de dados

Visão geral

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

Banco de dados Componentes do 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 replicação de origem e réplica.
  • MySQL: servidores de banco de dados de replicação de grupo, etc.
  • PostgreSQL opções de criptografia.

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

Requisitos

O seguinte é necessário para configurar a criptografia:

  • Sistema operacional suportado pelo 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

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

Definir esta opção obriga o uso de conexão TLS com o banco de dados a partir do Zabbix server/proxy e 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 o banco 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 Criptografia TLS do banco de dados na etapa Configurar conexão com o BD para habilitar a criptografia de transporte.
  • Marque a caixa de seleção Verificar certificado do banco de dados que aparece quando o campo Criptografia TLS está marcado para habilitar a criptografia com certificados.

Para MySQL, a caixa de seleção Criptografia TLS do banco de dados é desabilitada se o Host do banco de dados estiver definido como localhost, pois a conexão que usa um arquivo de soquete (no Unix) ou memória compartilhada (no Windows) não pode ser criptografada.
Para PostgreSQL, a caixa de seleção Criptografia TLS é desabilitada se o valor do campo Host do banco de dados começar com uma barra ou 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
Arquivo CA TLS do banco de dados Especifique o caminho completo para um arquivo de autoridade certificadora (CA) TLS válido.
Arquivo de chave TLS do banco de dados Especifique o caminho completo para um arquivo de chave TLS válido.
Arquivo de certificado TLS do banco de dados Especifique o caminho completo para um arquivo de certificado TLS válido.
Verificação do host do banco de dados Marque esta caixa de seleção para ativar a verificação do host.
Desabilitado para MYSQL, pois a biblioteca PHP MySQL não permite pular a etapa de validação do certificado do par.
Lista de cifras TLS do banco de dados 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 levará a um erro de autorização.
Se os arquivos de certificado forem graváveis, o frontend gera um aviso no relatório Informações do sistema de que "Os arquivos de certificado TLS devem ser somente leitura." (exibido apenas se o usuário do PHP for o proprietário do certificado).

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

Casos de uso

O frontend do Zabbix usa 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 com o BD. Essas opções são mapeadas para o arquivo de configuração (zabbix.conf.php) da seguinte maneira:

Configurações 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'] = '';
...
Marque Criptografia TLS do banco de dados
Deixe Verificar certificado do banco de dados desmarcado
Habilita o 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. Marque Criptografia TLS do banco de dados e Verificar certificado do banco de dados
2. Especifique o caminho para Arquivo CA TLS do banco de dados
Habilita 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. Marque Criptografia TLS do banco de dados e Verificar certificado do banco de dados
2. Especifique o caminho para Arquivo de chave TLS do banco de dados
3. Especifique o caminho para Arquivo CA TLS do banco de dados
4. Especifique o caminho para Arquivo de certificado TLS do banco de dados
5. Especifique Lista de cifras TLS do banco de dados (opcional)
Habilita 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. Marque Criptografia TLS do banco de dados e Verificar certificado do banco de dados
2. Especifique o caminho para Arquivo de chave TLS do banco de dados
3. Especifique o caminho para Arquivo CA TLS do banco de dados
4. Especifique o caminho para Arquivo de certificado TLS do banco de dados
5. Marque Verificação do host do banco de dados
Habilita o modo verify_full para PostgreSQL.

Veja também: Exemplos de configuração de criptografia para MySQL, Exemplos de configuração de criptografia para PostgreSQL.

Configuração do server/proxy do Zabbix

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

Configuração Resultado
Nenhuma Conexão com o banco de dados sem criptografia.
1. Defina DBTLSConnect=required O server/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 certificadora TLS
O server/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 certificadora TLS
O server/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 certificadora 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
O server/proxy fornece um certificado de cliente ao conectar-se 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) A conexão TLS é feita usando uma cifra da lista fornecida.
(PostgreSQL) Definir esta opção será considerado um erro.