Configuración de cifrado de PostgreSQL

Descripción general

Esta sección proporciona varios ejemplos de configuración de cifrado para CentOS 8.2 y PostgreSQL 13.

La conexión entre Zabbix frontend y PostgreSQL no puede cifrarse (los parámetros en la interfaz gráfica están deshabilitados) si el valor del campo Database host comienza con una barra diagonal o si el campo está vacío.

Requisitos previos

Instale la base de datos PostgreSQL usando el repositorio oficial.

PostgreSQL no está configurado para aceptar conexiones TLS de forma predeterminada. Siga las instrucciones de la documentación de PostgreSQL para la preparación de certificados con postgresql.conf y también para el control de acceso de usuarios a través de ph_hba.conf.

De forma predeterminada, el socket de PostgreSQL está vinculado a localhost; para permitir conexiones remotas de red, debe escuchar en la interfaz de red real.

La configuración de PostgreSQL para todos los modes puede verse así:

/var/lib/pgsql/13/data/postgresql.conf:

...
ssl = on
ssl_ca_file = 'root.crt'
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'
ssl_prefer_server_ciphers = on
ssl_min_protocol_version = 'TLSv1.3'
...

Para el control de acceso, ajuste /var/lib/pgsql/13/data/pg_hba.conf:

...
### require
hostssl all all 0.0.0.0/0 md5

### verify CA
hostssl all all 0.0.0.0/0 md5 clientcert=verify-ca

### verify full
hostssl all all 0.0.0.0/0 md5 clientcert=verify-full
...

Cifrado solo de transporte

Frontend

Para habilitar el cifrado solo de transporte para las conexiones entre el frontend de Zabbix y la base de datos:

  • Marque Database TLS encryption
  • Deje sin marcar Verify database certificate

server

Para habilitar el cifrado exclusivo del transporte para las conexiones entre el server y la base de datos, edite el archivo de configuración del server:

...
DBHost=10.211.55.9
DBName=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=required
...

Cifrado con verificación de la autoridad de certificación

frontend

Para habilitar el cifrado con verificación de la autoridad certificadora para las conexiones entre el frontend de Zabbix y la base de datos:

  • Marque Cifrado TLS de la base de datos y Verificar el certificado de la base de datos
  • Especifique la ruta al archivo de CA TLS de la base de datos

Como alternativa, esto se puede configurar en el archivo de configuración del frontend (zabbix.conf.php):

...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/pgsql/root.crt';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...

server

Para habilitar el cifrado con verificación de certificados para las conexiones entre el server de Zabbix y la base de datos, edite el archivo de configuración del server:

...
DBHost=10.211.55.9
DBName=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=verify_ca
DBTLSCAFile=/etc/ssl/pgsql/root.crt
...

Cifrado con verificación completa

Frontend

Para habilitar el cifrado con verificación del certificado y de la identidad del host de la base de datos para las conexiones entre el frontend de Zabbix y la base de datos:

  • Marque Cifrado TLS de la base de datos y Verificar el certificado de la base de datos
  • Especifique la ruta al archivo de clave TLS de la base de datos
  • Especifique la ruta al archivo de CA TLS de la base de datos
  • Especifique la ruta al archivo de certificado TLS de la base de datos
  • Marque Verificación del host de la base de datos

Como alternativa, esto se puede configurar en el archivo de configuración del frontend (zabbix.conf.php):

$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/pgsql/root.crt';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '';
...

Server

Para habilitar el cifrado con verificación de identidad del certificado y del host de la base de datos para las conexiones entre el server de Zabbix y la base de datos, edite el archivo de configuración del server:

...
DBHost=10.211.55.9
DBName=zabbix
DBUser=zbx_srv
DBPassword=<strong_password>
DBTLSConnect=verify_full
DBTLSCAFile=/etc/ssl/pgsql/root.crt
DBTLSCertFile=/etc/ssl/pgsql/client.crt
DBTLSKeyFile=/etc/ssl/pgsql/client.key
...