5 Conexión segura a la base de datos

Descripción general

Esta sección proporciona los pasos de configuración de Zabbix y ejemplos de configuración para conexiones TLS seguras entre:

Base de datos Componentes de Zabbix
MySQL Interfaz web de Zabbix, servidor Zabbix, proxy Zabbix
PostgreSQL Interfaz web de Zabbix, servidor Zabbix, proxy Zabbix

Para configurar el cifrado de la conexión dentro del SGBD, consulte la documentación oficial del proveedor para más detalles:

  • MySQL: servidores de base de datos de replicación de origen y réplica.
  • MySQL: replicación en grupo, etc. servidores de base de datos.
  • PostgreSQL opciones de cifrado.

Todos los ejemplos se basan en las versiones GA de MySQL CE (8.0) y PgSQL (13) disponibles a través de los repositorios oficiales utilizando CentOS 8.

Requisitos

Se requiere lo siguiente para configurar el cifrado:

  • Sistema operativo compatible por el desarrollador con OpenSSL >=1.1.X o alternativa.

Se recomienda evitar sistemas operativos en estado de fin de vida, especialmente en el caso de nuevas instalaciones

  • Motor de base de datos (RDBMS) instalado y mantenido desde el repositorio oficial proporcionado por el desarrollador. Los sistemas operativos a menudo se entregan con versiones de software de base de datos obsoletas para las cuales no se implementa soporte de cifrado, por ejemplo, sistemas basados en RHEL 7 y PostgreSQL 9.2, MariaDB 5.5 sin soporte de cifrado.
Terminología

Configurar esta opción obliga a usar una conexión TLS a la base de datos desde el servidor/proxy de Zabbix y el frontend a la base de datos:

  • required - conectar usando TLS como modo de transporte sin comprobaciones de identidad
  • verify_ca - conectar usando TLS y verificar el certificado
  • verify_full - conectar usando TLS, verificar el certificado y verificar que la identidad de la base de datos (CN) especificada por DBHost coincida con su certificado

Configuración de Zabbix

Frontend a la base de datos

Se puede configurar una conexión segura a la base de datos durante la instalación del frontend:

  • Marque la casilla Database TLS encryption en el paso Configure DB connection para habilitar el cifrado del transporte.
  • Marque la casilla Verify database certificate, que aparece cuando el campo TLS encryption está marcado, para habilitar el cifrado con certificados.

Para MySQL, la casilla Database TLS encryption está deshabilitada si Database host está establecido en localhost, porque una conexión que utiliza un archivo de socket (en Unix) o memoria compartida (en Windows) no puede cifrarse.
Para PostgreSQL, la casilla TLS encryption está deshabilitada si el valor del campo Database host comienza con una barra o si el campo está vacío.

Los siguientes parámetros están disponibles en el modo de cifrado TLS con certificados (si ambas casillas están marcadas):

Parameter Description
Database TLS CA file Especifique la ruta completa a un archivo válido de autoridad de certificación (CA) TLS.
Database TLS key file Especifique la ruta completa a un archivo válido de clave TLS.
Database TLS certificate file Especifique la ruta completa a un archivo válido de certificado TLS.
Database host verification Marque esta casilla para activar la verificación del host.
Deshabilitado para MYSQL, porque la biblioteca PHP MySQL no permite omitir el paso de validación del certificado del par.
Database TLS cipher list Especifique una lista personalizada de cifrados válidos. El formato de la lista de cifrados debe ajustarse al estándar OpenSSL.
Disponible solo para MySQL.

Los parámetros TLS deben apuntar a archivos válidos. Si apuntan a archivos inexistentes o no válidos, se producirá un error de autorización.
Si los archivos de certificado tienen permisos de escritura, el frontend genera una advertencia en el informe System information indicando que "TLS certificate files must be read-only." (se muestra solo si el usuario de PHP es el propietario del certificado).

No se admiten certificados protegidos con contraseña.

Casos de uso

La frontend de Zabbix usa la interfaz GUI para definir las opciones posibles: required, verify_ca, verify_full. Especifique las opciones requeridas en el paso del asistente de instalación Configurar conexiones DB. Estas opciones se asignan al archivo de configuración (zabbix.conf.php) de la siguiente manera:

GUI settings Configuration file Description Result
...
// Used for TLS connection.
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Marque Database TLS encryption
Deje sin marcar Verify database certificate
Habilita el 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 Database TLS encryption y Verify database certificate
2. Especifique la ruta del archivo Database TLS CA file
Habilita el modo verify_ca.
...
// Used for TLS connection with strictly defined Cipher list.
$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>';
...

Or:

...
// Used for TLS connection without Cipher list defined - selected by MySQL server
$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 Database TLS encryption y Verify database certificate
2. Especifique la ruta del archivo Database TLS key file
3. Especifique la ruta del archivo Database TLS CA file
4. Especifique la ruta del archivo Database TLS certificate file
5. Especifique Database TLS cipher list (opcional)
Habilita el 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 Database TLS encryption y Verify database certificate
2. Especifique la ruta del archivo Database TLS key file
3. Especifique la ruta del archivo Database TLS CA file
4. Especifique la ruta del archivo Database TLS certificate file
5. Marque Database host verification
Habilita el modo verify_full para PostgreSQL.

Véase también: Ejemplos de configuración de cifrado para MySQL, Ejemplos de configuración de cifrado para PostgreSQL.

Configuración de Zabbix server/proxy

Las conexiones seguras a la base de datos se pueden configurar con los parámetros respectivos en el archivo de configuración de Zabbix server y/o proxy.

Configuration Result
None Conexión a la base de datos sin cifrado.
1. Set DBTLSConnect=required Server/proxy realizan una conexión TLS a la base de datos. No se permite una conexión sin cifrado.
1. Set DBTLSConnect=verify_ca
2. Set DBTLSCAFile - specify the TLS certificate authority file
Server/proxy realizan una conexión TLS a la base de datos después de verificar el certificado de la base de datos.
1. Set DBTLSConnect=verify_full
2. Set DBTLSCAFile - specify TLS certificate authority file
Server/proxy realizan una conexión TLS a la base de datos después de verificar el certificado de la base de datos y la identidad del host de la base de datos.
1. Set DBTLSCAFile - specify TLS certificate authority file
2. Set DBTLSCertFile - specify the client public key certificate file
3. Set DBTLSKeyFile - specify the client private key file
Server/proxy proporcionan un certificado de cliente al conectarse a la base de datos.
1. Set DBTLSCipher - the list of encryption ciphers that the client permits for connections using TLS protocols up to TLS 1.2

or DBTLSCipher13 - the list of encryption ciphers that the client permits for connections using TLS 1.3 protocol
(MySQL) La conexión TLS se realiza usando un cifrado de la lista proporcionada.
(PostgreSQL) La configuración de esta opción se considerará un error.