Conexión segura al frontend

Descripción general

Esta sección proporciona pasos de configuración de Zabbix y ejemplos de configuración para conexiones TLS seguras entre Zabbix frontend y Zabbix server.

Configuración

De forma predeterminada, la comunicación entre el frontend de Zabbix y el server de Zabbix no está cifrada. Para mejorar la seguridad, habilite TLS en ambos lados. A continuación se muestra un ejemplo de la forma más sencilla de hacerlo.

1. Genere certificados y claves.

Cree un directorio de trabajo:

sudo mkdir -p /etc/zabbix/ssl && cd /etc/zabbix/ssl

Cree un certificado de CA (ajuste el valor MyZabbixCA para que coincida con el nombre común real):

sudo openssl genrsa -out ca.key 4096
sudo openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=MyZabbixCA/"

Genere una clave privada y un certificado para el server de Zabbix (ajuste el valor zabbix-server.example.com para que coincida con el nombre común real):

sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr -subj "/CN=zabbix-server.example.com/"
sudo openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out server.crt

Genere una clave privada y un certificado para el frontend de Zabbix (ajuste el valor zabbix-frontend-node para que coincida con el nombre común real):

sudo openssl genrsa -out frontend.key 2048
sudo openssl req -new -key frontend.key -out frontend.csr -subj "/CN=zabbix-frontend-node/"
sudo openssl x509 -req -days 365 -in frontend.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out frontend.crt

2. Establezca los permisos adecuados.

Para el server de Zabbix (ajuste el propietario/grupo según el usuario del demonio del server de Zabbix de su distribución):

sudo chown root:zabbix /etc/zabbix/ssl/server.{crt,key} /etc/zabbix/ssl/ca.crt
sudo chmod 640 /etc/zabbix/ssl/server.key
sudo chmod 644 /etc/zabbix/ssl/server.crt /etc/zabbix/ssl/ca.crt

Para el frontend (ajuste el propietario/grupo según el usuario del webserver de su distribución):

sudo chown root:www-data /etc/zabbix/ssl/frontend.{crt,key}
sudo chmod 640 /etc/zabbix/ssl/frontend.key
sudo chmod 644 /etc/zabbix/ssl/frontend.crt

3. Configure el server de Zabbix.

En el archivo de configuración del server (zabbix_server.conf), añada:

TLSFrontendAccept=cert
TLSCertFile=/etc/zabbix/ssl/server.crt
TLSKeyFile=/etc/zabbix/ssl/server.key
TLSCAFile=/etc/zabbix/ssl/ca.crt
# Opcionalmente:
# TLSFrontendCertIssuer=CN=MyZabbixCA
# TLSFrontendCertSubject=CN=zabbix-frontend-node

A continuación, reinicie el server:

sudo systemctl restart zabbix-server

4. Configure el frontend de Zabbix.

Durante la instalación de la interfaz web, habilite la opción Cifrar las conexiones desde la interfaz web (y la opción Verificar el emisor y el asunto del certificado del server, si es necesario) y complete los campos Archivo de CA TLS, Archivo de clave TLS, Archivo de certificado TLS (y los campos Emisor del certificado TLS del server y Asunto del certificado TLS del server, si es necesario):

Parámetro Descripción
Archivo de CA TLS Especifique la ruta completa al archivo de certificado de la autoridad certificadora (CA) utilizado para verificar el certificado del server.
Archivo de clave TLS Especifique la ruta completa al archivo de clave privada del cliente correspondiente al certificado del cliente.
Archivo de certificado TLS Especifique la ruta completa al archivo de certificado del cliente si se requiere autenticación TLS mutua.
Emisor del certificado TLS del server Especifique un nombre distinguido (DN) del emisor que se comparará con el certificado del server.
Asunto del certificado TLS del server Especifique un nombre distinguido (DN) del asunto que se comparará con el certificado del server.

En las instalaciones existentes, edite los siguientes parámetros en el archivo de configuración del frontend:

$ZBX_SERVER_TLS['ACTIVE'] = 'true';
$ZBX_SERVER_TLS['CA_FILE'] = '/etc/zabbix/ssl/ca.crt';
$ZBX_SERVER_TLS['KEY_FILE'] = '/etc/zabbix/ssl/frontend.key';
$ZBX_SERVER_TLS['CERT_FILE'] = '/etc/zabbix/ssl/frontend.crt';
// Opcionalmente:
// $ZBX_SERVER_TLS['CERTIFICATE_ISSUER']  = 'CN=MyZabbixCA';
// $ZBX_SERVER_TLS['CERTIFICATE_SUBJECT'] = 'CN=zabbix-server.example.com';

5. Verifique el cifrado confirmando que no haya mensajes de error en el frontend de Zabbix ni en el archivo de registro del server de Zabbix:

tail -f /var/log/zabbix/zabbix_server.log

Solución de problemas

Una configuración TLS incorrecta o incompleta puede provocar errores en el frontend de Zabbix o indicar que el server de Zabbix está en ejecución, pero que la conexión no se ha establecido correctamente:

Para identificar el problema exacto de configuración, establezca el nivel de registro del server de Zabbix en 4, reproduzca el error en el frontend y compruebe el registro del server de Zabbix para encontrar el mensaje de error correspondiente.

Los siguientes casos describen errores comunes y sus posibles causas.

La dirección IP del frontend no está permitida

El registro del server de Zabbix contiene un error similar a:

54283:20260819:105926.400 frontend connection from "127.0.0.1" is not allowed by FrontendAllowedIP

La conexión se interrumpe después del protocolo de enlace TCP porque la dirección IP del frontend no está autorizada.

Añada la dirección IP del frontend al parámetro FrontendAllowedIP en zabbix_server.conf y reinicie el server de Zabbix.

No se permiten conexiones sin cifrar

El registro del Zabbix server contiene un error similar al siguiente:

56884:20260819:111154.285 frontend connection of type "unencrypted" is not allowed by TLSFrontendAccept

El Zabbix server está configurado para aceptar únicamente conexiones TLS, por ejemplo, con TLSFrontendAccept=cert, pero el frontend intenta conectarse sin cifrado.

Habilite el cifrado del frontend y configure los archivos TLS necesarios en zabbix.conf.php, tal como se describe en el paso 4 de Configuración.

El frontend intenta usar TLS mientras el server espera una conexión sin cifrar

El registro del server de Zabbix contiene un error similar a:

61091:20260819:115916.019 End of zbx_tls_accept():FAIL error:'TLS handshake set result code to 1: file ../ssl/record/rec_layer_s3.c line 317 func ssl3_read_n: error:0A000126:SSL routines::unexpected eof while reading: TLS write fatal alert "decode error"'

El mensaje de error exacto depende de la versión de OpenSSL.

El server de Zabbix está configurado para aceptar únicamente conexiones sin cifrar, por ejemplo, con TLSFrontendAccept=unencrypted, mientras que el frontend intenta establecer una conexión TLS.

Configure el server de Zabbix para aceptar conexiones TLS estableciendo TLSFrontendAccept=cert y definiendo TLSCertFile y TLSKeyFile en zabbix_server.conf. Como alternativa, desactive el cifrado del frontend en zabbix.conf.php.

El certificado del frontend no es de confianza

El registro del Zabbix server contiene un error similar a:

62248:20260819:124203.812 End of zbx_tls_accept():FAIL error:'self-signed certificate: TLS handshake set result code to 1: file ../ssl/statem/statem_srvr.c line 3522 func tls_process_client_certificate: error:0A000086:SSL routines::certificate verify failed: TLS write fatal alert "unknown CA"'

El frontend presentó un certificado, pero el Zabbix server no confía en la Autoridad certificadora (CA) que lo firmó.

El mismo problema también puede aparecer en la información del sistema del frontend como:

fread(): SSL operation failed with code 1. OpenSSL Error messages:

error:0A000418:SSL routines::tlsv1 alert unknown ca [zabbix.php:17 → require_once() → ZBase->run() → ZBase->processRequest() → CController->run() → Widgets\SystemInfo\Actions\WidgetView->doAction() → CSystemInfoHelper::getData() → CSystemInfoHelper::getServerStatus() → CZabbixServer->getStatus() → CZabbixServer->request() → fread() → CConfigFile->{closure:/user/share/conf/zabbix.conf.php:89}() in conf/zabbix.conf.php:95]

El frontend también puede mostrar «Incorrect response received from Zabbix server "localhost"».

Verifique que el certificado del frontend esté firmado por la CA especificada mediante TLSCAFile en zabbix_server.conf.

El archivo de clave TLS no se puede leer

El frontend puede mostrar «Archivo de clave TLS: no se puede leer».

También puede mostrar «No se puede conectar al server de Zabbix debido a la configuración de TLS. Algunas funciones no están disponibles».

El usuario del servidor web no tiene permisos suficientes para leer uno o más archivos de certificado, clave o CA configurados en zabbix.conf.php. Esto puede ocurrir cuando los archivos de certificado se almacenan en un directorio restringido, como /root/ o el directorio de inicio de un usuario.

Mueva los archivos de certificado a un directorio accesible para el servidor web y establezca los permisos adecuados, tal como se describe en el paso 2 de Configuración.

Los archivos TLS no son válidos o están dañados

El frontend puede mostrar «No se puede conectar al Zabbix server debido a la configuración de TLS. Algunas funciones no están disponibles».

Esto puede ocurrir cuando los archivos de certificado o de clave configurados existen y se pueden leer, pero su contenido está vacío, dañado o no es válido por algún otro motivo. En este caso, el frontend no establece una conexión con el Zabbix server y no aparece ningún intento de conexión correspondiente en el registro del Zabbix server.

Verifique que los archivos de certificado y de clave contengan datos válidos y con el formato correcto, y que la clave privada corresponda al certificado.