17 Cifrado
Descripción general
Zabbix admite comunicaciones cifradas entre componentes de Zabbix mediante el protocolo Transport Layer Security (TLS) v.1.2 y 1.3 (según la biblioteca de cifrado). Se admite el cifrado basado en certificados y en claves precompartidas.
El cifrado se puede configurar para conexiones:
- Entre el servidor Zabbix, el proxy Zabbix, el agente Zabbix, el servicio web Zabbix, las utilidades zabbix_sender y zabbix_get
- A la base de datos Zabbix desde la interfaz de Zabbix y el servidor/proxy
El cifrado es opcional y se puede configurar para componentes individuales:
- Algunos servidores proxy y agentes se pueden configurar para utilizar cifrado basado en certificados con el servidor, mientras que otros pueden utilizar cifrado basado en claves precompartidas y otros continúan con comunicaciones no cifradas (como antes)
- El servidor (proxy) puede utilizar diferentes configuraciones de cifrado para diferentes hosts
Los programas demonio Zabbix utilizan un puerto de escucha para conexiones entrantes cifradas y no cifradas. Agregar un cifrado no requiere abrir nuevos puertos en los firewalls.
Limitaciones
-
Las claves privadas se almacenan en texto sin formato en archivos legibles por los componentes de Zabbix durante el inicio
-
Las claves precompartidas se ingresan en la interfaz de Zabbix y se almacenan en la base de datos de Zabbix en texto sin formato
-
El cifrado integrado no protege las comunicaciones:
-
Entre el servidor web que ejecuta la interfaz de Zabbix y el navegador web del usuario
-
Entre la interfaz de Zabbix y el servidor Zabbix
-
Actualmente, cada conexión cifrada se abre con un protocolo de enlace TLS completo, no se implementan el almacenamiento en caché de sesiones ni los tickets
-
Agregar cifrado aumenta el tiempo para las verificaciones de elementos y las acciones, según la latencia de la red:
-
Por ejemplo, si el retraso del paquete es de 100 ms, entonces abrir una conexión TCP y enviar una solicitud no cifrada toma alrededor de 200 ms.
Con el cifrado, se agregan aproximadamente 1000 ms para establecer la conexión TLS;
- Es posible que sea necesario aumentar los tiempos de espera; de lo contrario, algunos elementos y acciones que ejecutan scripts remotos en agentes pueden funcionar con conexiones no cifradas, pero fallar con tiempo de espera con conexiones cifradas.
- El descubrimiento de red no admite el cifrado. Las comprobaciones del agente Zabbix realizadas por Network Discovery no estarán cifradas y, si el agente Zabbix está configurado para rechazar conexiones no cifradas, dichas comprobaciones no se realizarán correctamente.
Compilación de Zabbix con compatibilidad con cifrado
Para admitir cifrado, Zabbix debe compilarse y vincularse con una de las bibliotecas de cifrado admitidas:
- GnuTLS: desde la versión 3.1.18
- OpenSSL: versiones 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x. Tenga en cuenta que la versión 3.0.x es compatible desde Zabbix 6.0.4.
- LibreSSL: probado con las versiones 2.7.4, 2.8.2:
- LibreSSL 2.6.x no es compatible
- LibreSSL es compatible como reemplazo compatible de OpenSSL;
las nuevas funciones API específicas de LibreSSL
tls_*()no se utilizan. Los componentes de Zabbix compilados con LibreSSL no podrán utilizar PSK, solo se pueden utilizar certificados.
Puede obtener más información sobre cómo configurar SSL para la interfaz de Zabbix consultando estas mejores prácticas.
La biblioteca se selecciona especificando la opción respectiva en el script "configure":
--with-gnutls[=DIR]--with-openssl[=DIR](también se usa para LibreSSL)
Por ejemplo, para configurar las fuentes para el servidor y el agente con OpenSSL puede usar algo como:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
Se pueden compilar diferentes componentes de Zabbix con diferentes bibliotecas criptográficas (por ejemplo, un servidor con OpenSSL, un agente con GnuTLS).
Si planea utilizar claves precompartidas (PSK), considere utilizar bibliotecas GnuTLS u OpenSSL 1.1.0 (o más nuevas) en componentes Zabbix que utilicen PSK. Las bibliotecas GnuTLS y OpenSSL 1.1.0 soportan conjuntos de cifrados PSK con Perfect Forward Secrecy. Las versiones anteriores de la biblioteca OpenSSL (1.0.1, 1.0.2c) también admiten PSK, pero los conjuntos de cifrados PSK disponibles no proporcionan Perfect Forward Secrecy.
Gestión de cifrado de conexión
Las conexiones en Zabbix pueden utilizar:
- sin cifrado (predeterminado)
- cifrado basado en certificado RSA
- cifrado basado en PSK
Hay dos parámetros importantes que se utilizan para especificar el cifrado entre componentes de Zabbix:
- TLSConnect: especifica qué cifrado utilizar para las conexiones salientes (sin cifrar, PSK o certificado)
- TLSAccept: especifica qué tipos de conexiones están permitidas para las conexiones entrantes (sin cifrar, PSK o certificado). Se pueden especificar uno o más valores.
TLSConnect se utiliza en los archivos de configuración para el proxy de Zabbix (en
modo activo, especifica solo conexiones al servidor) y el agente de Zabbix (para verificaciones activas). En la interfaz de Zabbix, el equivalente de TLSConnect es el campo
Conexiones al host en la pestaña Configuración → Equipos → <algún
equipo> → Cifrado y el campo Conexiones al proxy en la pestaña
Administración → Proxies → <algún proxy> → Cifrado. Si el
tipo de cifrado configurado para la conexión falla, no se probará ningún otro
tipo de cifrado.
TLSAccept se utiliza en los archivos de configuración para el proxy de Zabbix (en
modo pasivo, especifica solo conexiones desde el servidor) y el agente de Zabbix
(para verificaciones pasivas). En la interfaz de Zabbix, el equivalente de TLSAccept es el campo
Conexiones desde el host en la pestaña Configuración → Equipos → <algún
equipo> → Cifrado y el campo Conexiones desde el proxy en la pestaña
Administración → Proxies → <algún proxy> → Cifrado.
Normalmente, se configura solo un tipo de cifrado para los cifrados entrantes. Pero es posible que desee cambiar el tipo de cifrado, por ejemplo, de no cifrado a basado en certificado con un tiempo de inactividad mínimo y posibilidad de reversión. Para lograr esto:
- Establezca
TLSAccept=unencrypted,certen el archivo de configuración del agente y reinicie el agente Zabbix - Pruebe la conexión con zabbix_get al agente usando el certificado. Si funciona, puede reconfigurar el cifrado para ese agente en la interfaz de Zabbix en la pestaña Configuración → Hosts → <algún host> → Cifrado configurando Conexiones al host en "Certificado".
- Cuando se actualiza la caché de configuración del servidor (y la configuración del proxy se actualiza si el host es monitoreado por proxy), las conexiones a ese agente se cifrarán.
- Si todo funciona como se espera, puede configurar
TLSAccept=certen el archivo de configuración del agente y reiniciar el agente Zabbix. Ahora el agente aceptará solo conexiones cifradas basadas en certificados. Las conexiones no cifradas y basadas en PSK serán rechazadas.
De manera similar, funciona en el servidor y el proxy. Si en la interfaz de Zabbix en la configuración del host Conexiones desde el host está configurado en "Certificado", solo se aceptarán conexiones cifradas basadas en certificados del agente (controles activos) y zabbix_sender (elementos de captura).
Lo más probable es que configure las conexiones entrantes y salientes para que utilicen el mismo tipo de cifrado o ningún cifrado en absoluto. Pero técnicamente es posible configurarlo asimétricamente, por ejemplo, cifrado basado en certificado para conexiones entrantes y basado en PSK para conexiones salientes.
La configuración de cifrado para cada equipo se muestra en la interfaz de Zabbix, en Configuración → Equipos en la columna Cifrado del agente. Por ejemplo:
| Ejemplo | Conexiones al host | Conexiones permitidas desde el host | Conexiones rechazadas desde el host |
|---|---|---|---|
![]() |
Sin cifrar | Sin cifrar | Cifrado, cifrado basado en certificado y PSK |
![]() |
Cifrado, basado en certificado | Cifrado, basado en certificado | Sin cifrar y cifrado basado en PSK |
![]() |
Cifrado, basado en PSK | Cifrado, basado en PSK | Sin cifrar y cifrado basado en certificado |
![]() |
Cifrado, basado en PSK | Sin cifrar y cifrado basado en PSK | Cifrado basado en certificado |
![]() |
Encriptado, basado en certificado | Sin encriptar, PSK o cifrado basado en certificado | - |
Las conexiones no están encriptadas de manera predeterminada. El cifrado se debe configurar para cada equipo y proxy de manera individual.
zabbix_get y zabbix_sender con cifrado
Consulte las páginas de manual de zabbix_get y zabbix_sender para usarlos con cifrado.
Conjuntos de cifrado
Los Ciphersuites de forma predeterminada se configuran internamente durante el inicio de Zabbix y, antes de Zabbix 4.0.19, 4.4.7, no son configurables por el usuario.
Desde Zabbix 4.0.19, 4.4.7 también se incluyen conjuntos de cifrado configurados por el usuario compatibles con GnuTLS y OpenSSL. Los usuarios pueden configurar conjuntos de cifrado según sus políticas de seguridad. El uso de esta función es opcional (integrado los conjuntos de cifrado predeterminados todavía funcionan).
Para bibliotecas criptográficas compiladas con la configuración predeterminada Zabbix incorporada Las reglas generalmente dan como resultado los siguientes conjuntos de cifrado (en orden desde mayor a menor prioridad):
| Biblioteca | Suites de cifrado de certificados | Suites de cifrado PSK |
|---|---|---|
| GnuTLS 3.1.18 | TLS_ECDHE_RSA_AES_128_GCM_SHA256 TLS_ECDHE_RSA_AES_128_CBC_SHA256 TLS_ECDHE_RSA_AES_128_CBC_SHA1 TLS_RSA_AES_128_GCM_SHA256 TLS_RSA_AES_128_CBC_SHA256 TLS_RSA_AES_128_CBC_SHA1 |
TLS_ECDHE_PSK_AES_128_CBC_SHA256 TLS_ECDHE_PSK_AES_128_CBC_SHA1 TLS_PSK_AES_128_GCM_SHA256 TLS_PSK_AES_128_CBC_SHA256 TLS_PSK_AES_128_CBC_SHA1 |
| OpenSSL 1.0.2c | ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-SHA256 AES128-SHA |
PSK-AES128-CBC-SHA |
| OpenSSL 1.1.0 | ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA |
ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA |
| OpenSSL 1.1.1d | TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA |
TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA |
Conjuntos de cifrados configurados por el usuario
Los criterios de selección de conjuntos de cifrados integrados se pueden anular con conjuntos de cifrados configurados por el usuario.
Los conjuntos de cifrados configurados por el usuario son una función pensada para usuarios avanzados que comprenden los conjuntos de cifrados TLS, su seguridad y las consecuencias de los errores, y que están familiarizados con la resolución de problemas de TLS.
Los criterios de selección de conjuntos de cifrados integrados se pueden anular utilizando los siguientes parámetros:
| Anular ámbito | Parámetro | Valor | Descripción |
|---|---|---|---|
| Selección de conjuntos de cifrados para certificados | TLSCipherCert13 | OpenSSL 1.1.1 cadenas de cifrado válidos para el protocolo TLS 1.3 (sus valores se pasan a la función OpenSSL SSL_CTX_set_ciphersuites()). |
Criterios de selección de conjuntos de cifrados basados en certificados para TLS 1.3 Solo OpenSSL 1.1.1 o posterior. |
| TLSCipherCert | OpenSSL cadenas de cifrado válidos para TLS 1.2 o GnuTLS cadenas de prioridad válidos. Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. |
Criterios de selección de conjuntos de cifrados basados en certificados para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Selección de conjuntos de cifrados para PSK | TLSCipherPSK13 | OpenSSL 1.1.1 válido cadenas de cifrado para el protocolo TLS 1.3 (sus valores se pasan a la función OpenSSL SSL_CTX_set_ciphersuites()). |
Criterios de selección de conjuntos de cifrados basados en PSK para TLS 1.3 Solo OpenSSL 1.1.1 o posterior. |
| TLSCipherPSK | Cadenas de cifrado OpenSSL válidas [(https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) para TLS 1.2 o cadenas de prioridad GnuTLS válidas [(https://gnutls.org/manual/html_node/Priority-Strings.html). Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. |
Criterios de selección de conjuntos de cifrados basados en PSK para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) | |
| Lista de conjuntos de cifrados combinados para certificado y PSK | TLSCipherAll13 | Cadenas de cifrado OpenSSL 1.1.1 válidas para el protocolo TLS 1.3 (sus valores se pasan a la función OpenSSL SSL_CTX_set_ciphersuites()). |
Criterios de selección de conjuntos de cifrados para TLS 1.3 Solo OpenSSL 1.1.1 o posterior. |
| TLSCipherAll | Cadenas de cifrado OpenSSL válidas para TLS 1.2 o cadenas de prioridad GnuTLS válidas para TLS 1.2. Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. |
Criterios de selección de conjuntos de cifrados para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL) |
Para anular la selección de conjuntos de cifrados en las utilidades zabbix_get y zabbix_sender, utilice los parámetros de la línea de comandos:
--tls-cipher13--tls-cipher
Los nuevos parámetros son opcionales. Si no se especifica un parámetro, se utiliza el valor predeterminado interno. Si se define un parámetro, no puede estar vacío.
Si falla la configuración de un valor TLSCipher* en la biblioteca criptográfica, el servidor, el proxy o el agente no se iniciarán y se registrará un error.
Es importante comprender cuándo se aplica cada parámetro.
Conexiones salientes
El caso más simple son las conexiones salientes:
- Para conexiones salientes con certificado, utilice TLSCipherCert13 o TLSCifreCert
- Para conexiones salientes con PSK - utilice TLSCipherPSK13 o TLSCifradoPSK
- En el caso de las utilidades zabbix_get y zabbix_sender,
se pueden utilizar en la línea de comandos los parámetros
--tls-cipher13o--tls-cipher(el cifrado se especifica inequívocamente con el parámetro--tls-connect)
Conexiones entrantes
Es un poco más complicado con las conexiones entrantes porque las reglas son específicas para los componentes y la configuración.
Para el agente de Zabbix:
| Configuración de la conexión del agente | Configuración del cifrado |
|---|---|
| TLSConnect=cert | TLSCipherCert, TLSCipherCert13 |
| TLSConnect=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert | TLSCipherCert, TLSCipherCert13 |
| TLSAccept=psk | TLSCipherPSK, TLSCipherPSK13 |
| TLSAccept=cert,psk | TLSCipherAll, TLSCipherAll13 |
Para el servidor y el proxy de Zabbix:
| Configuración de la conexión | Configuración del cifrado |
|---|---|
| Conexiones salientes que utilizan PSK | TLSCipherPSK, TLSCipherPSK13 |
| Conexiones entrantes que utilizan certificados | TLSCipherAll, TLSCipherAll13 |
| Conexiones entrantes que utilizan PSK si el servidor no tiene certificado | TLSCipherPSK, TLSCipherPSK13 |
| Conexiones entrantes que utilizan PSK si el servidor tiene certificado | TLSCipherAll, TLSCipherAll13 |
Se puede observar un patrón en las dos tablas anteriores:
- TLSCipherAll y TLSCipherAll13 se pueden especificar solo si se utiliza una lista combinada de conjuntos de cifrados basados en certificados y PSK. Existen dos casos en los que esto ocurre: servidor (proxy) con un certificado configurado (los conjuntos de cifrados PSK siempre se configuran en el servidor, proxy si la biblioteca criptográfica admite PSK), agente configurado para aceptar conexiones entrantes basadas en certificados y PSK
- en otros casos, TLSCipherCert* y/o TLSCipherPSK* son suficientes
Las siguientes tablas muestran los valores predeterminados integrados de TLSCipher*. Pueden ser un buen punto de partida para sus propios valores personalizados.
| Parámetro | GnuTLS 3.6.12 |
|---|---|
| TLSCipherCert | NINGUNO:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVA-TODAS:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509 |
| TLSCipherPSK | NINGUNO:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVA-TODAS:+COMP-NULL:+SIGN-ALL |
| TLSCipherAll | NINGUNO:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVA-TODO:+COMP-NULL:+SIGN-TODO:+CTYPE-X.509 |
| Parámetro | OpenSSL 1.1.1d 1 |
|---|---|
| TLSCipherCert13 | |
| TLSCipherCert | EECDH+aRSA+AES128:RSA+aRSA+AES128 |
| TLSCipherPSK13 | TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 |
| TLSCipherPSK | kECDHEPSK+AES128:kPSK+AES128 |
| TLSCipherAll13 | |
| TLSCipherAll | EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128 |
1 Los valores predeterminados son diferentes para versiones anteriores de OpenSSL (1.0.1, 1.0.2, 1.1.0), para LibreSSL y si OpenSSL se compila sin compatibilidad con PSK.
Ejemplos de conjuntos de cifrados configurados por el usuario
Vea a continuación los siguientes ejemplos de conjuntos de cifrados configurados por el usuario:
- Prueba de cadenas de cifrado y autorización solo de conjuntos de cifrados PFS
- Cambio de AES128 a AES256
Prueba de cadenas de cifrado y autorización solo de conjuntos de cifrados PFS
Para ver qué conjuntos de cifrados se han seleccionado, debe establecer
'DebugLevel=4' en el archivo de configuración o utilizar la opción -vv para
zabbix_sender.
Puede que sea necesario experimentar un poco con los parámetros TLSCipher*
antes de obtener los conjuntos de cifrados deseados. Es inconveniente reiniciar el servidor, proxy o agente de Zabbix
varias veces solo para modificar los parámetros TLSCipher*. Hay opciones más convenientes que son usar zabbix_sender o el comando
openssl. Vamos a mostrar ambos.
1. Uso de zabbix_sender.
Creemos un archivo de configuración de prueba, por ejemplo,
/home/zabbix/test.conf, con la sintaxis de un archivo zabbix_agentd.conf:
Hostname=nonexisting
ServerActive=nonexisting
TLSConnect=cert
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/agent.crt
TLSKeyFile=/home/zabbix/agent.key
TLSPSKIdentity=nonexisting
TLSPSKFile=/home/zabbix/agent.psk
Necesita certificados de agente y CA válidos y PSK para este ejemplo. Ajuste las rutas y los nombres de los archivos de certificado y PSK para su entorno.
Si no está utilizando certificados, sino solo PSK, puede crear un archivo de prueba más simple:
Hostname=nonexisting
ServerActive=nonexisting
TLSConnect=psk
TLSPSKIdentity=nonexisting
TLSPSKFile=/home/zabbix/agentd.psk
Los conjuntos de cifrados seleccionados se pueden ver ejecutando zabbix_sender (ejemplo compilado con OpenSSL 1.1.d):
$ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
Aquí puede ver los conjuntos de cifrado seleccionados de forma predeterminada. Estos valores predeterminados se eligen para garantizar la interoperabilidad con agentes Zabbix que se ejecutan en sistemas con versiones anteriores de OpenSSL (a partir de 1.0.1).
Con sistemas más nuevos, puede optar por reforzar la seguridad al permitir solo unos pocos conjuntos de cifrados, por ejemplo, solo conjuntos de cifrados con PFS (Perfect Forward
Secrecy). Intentemos permitir solo conjuntos de cifrados con PFS utilizando
los parámetros TLSCipher*.
El resultado no será interoperable con sistemas que utilicen OpenSSL 1.0.1 y 1.0.2, si se utiliza PSK. El cifrado basado en certificados debería funcionar.
Agregue dos líneas al archivo de configuración test.conf:
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
y vuelva a realizar la prueba:
$ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
Las listas de "conjuntos de cifrados de certificados" y "conjuntos de cifrados PSK" han cambiado: son más cortas que antes y solo contienen conjuntos de cifrados TLS 1.3 y conjuntos de cifrados ECDHE-* TLS 1.2, como se esperaba.
2. TLSCipherAll y TLSCipherAll13 no se pueden probar con zabbix_sender; no afectan el valor de "conjuntos de cifrados de certificados y PSK" que se muestra en el ejemplo anterior. Para modificar TLSCipherAll y TLSCipherAll13, debe experimentar con el agente, el proxy o el servidor.
Por lo tanto, para permitir solo conjuntos de cifrado PFS, es posible que deba agregar hasta tres parámetros
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128
a zabbix_agentd.conf, zabbix_proxy.conf y zabbix_server_conf si cada uno de ellos tiene un certificado configurado y el agente también tiene PSK.
Si su entorno Zabbix utiliza solo cifrado basado en PSK y no certificados, entonces solo uno:
TLSCipherPSK=kECDHEPSK+AES128
Ahora que comprende cómo funciona, puede probar la selección de conjuntos de cifrados
incluso fuera de Zabbix, con el comando openssl. Probemos
los tres valores de parámetro TLSCipher*:
$ openssl ciphers EECDH+aRSA+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
$ openssl ciphers kECDHEPSK+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
$ openssl ciphers EECDH+aRSA+AES128:kECDHEPSK+AES128 | sed 's/:/ /g'
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
Puede preferir openssl ciphers con la opción -V para una salida más detallada:
$ openssl ciphers -V EECDH+aRSA+AES128:kECDHEPSK+AES128
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
0xC0,0x13 - ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
0xC0,0x37 - ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA256
0xC0,0x35 - ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA1
De manera similar, Puede probar las cadenas de prioridad para GnuTLS:
$ gnutls-cli -l --priority=NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
Cipher suites for NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
TLS_ECDHE_RSA_AES_128_GCM_SHA256 0xc0, 0x2f TLS1.2
TLS_ECDHE_RSA_AES_128_CBC_SHA256 0xc0, 0x27 TLS1.2
Protocols: VERS-TLS1.2
Ciphers: AES-128-GCM, AES-128-CBC
MACs: AEAD, SHA256
Key Exchange Algorithms: ECDHE-RSA
Groups: GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, GROUP-FFDHE8192
PK-signatures: SIGN-RSA-SHA256, SIGN-RSA-PSS-SHA256, SIGN-RSA-PSS-RSAE-SHA256, SIGN-ECDSA-SHA256, SIGN-ECDSA-SECP256R1-SHA256, SIGN-EdDSA-Ed25519, SIGN-RSA-SHA384, SIGN-RSA-PSS-SHA384, SIGN-RSA-PSS-RSAE-SHA384, SIGN-ECDSA-SHA384, SIGN-ECDSA-SECP384R1-SHA384, SIGN-EdDSA-Ed448, SIGN-RSA-SHA512, SIGN-RSA-PSS-SHA512, SIGN-RSA-PSS-RSAE-SHA512, SIGN-ECDSA-SHA512, SIGN-ECDSA-SECP521R1-SHA512, SIGN-RSA-SHA1, SIGN-ECDSA-SHA1
Cambio de AES128 a AES256
Zabbix utiliza AES128 como valor predeterminado integrado para los datos. Supongamos que usted están utilizando certificados y desean cambiar a AES256, en OpenSSL 1.1.1.
Esto se puede lograr agregando los parámetros respectivos en
zabbix_server.conf:
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/server.crt
TLSKeyFile=/home/zabbix/server.key
TLSCipherCert13=TLS_AES_256_GCM_SHA384
TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
TLSCipherPSK13=TLS_CHACHA20_POLY1305_SHA256
TLSCipherPSK=kECDHEPSK+AES256:-SHA1
TLSCipherAll13=TLS_AES_256_GCM_SHA384
TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384
Aunque sólo serán utilizados los conjuntos de cifrado relacionados con certificados
, los parámetros TLSCipherPSK* también se definen para evitar que
sus valores predeterminados incluyan cifrados menos seguros para una
interoperabilidad más amplia. Los conjuntos de cifrado PSK no se pueden desactivar completamente en el
servidor/proxy.
Y en zabbix_agentd.conf:
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/ca.crt
TLSCertFile=/home/zabbix/agent.crt
TLSKeyFile=/home/zabbix/agent.key
TLSCipherCert13=TLS_AES_256_GCM_SHA384
TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384




