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:

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:

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,cert en 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=cert en 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
none_none.png Sin cifrar Sin cifrar Cifrado, cifrado basado en certificado y PSK
cert_cert.png Cifrado, basado en certificado Cifrado, basado en certificado Sin cifrar y cifrado basado en PSK
psk_psk.png Cifrado, basado en PSK Cifrado, basado en PSK Sin cifrar y cifrado basado en certificado
psk_none_psk.png Cifrado, basado en PSK Sin cifrar y cifrado basado en PSK Cifrado basado en certificado
cert_all.png 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-cipher13 o --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

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