Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

17 Cifrado

Visión general

Zabbix admite comunicaciones cifradas entre los componentes de Zabbix utilizando el protocolo Transport Layer Security (TLS) v.1.2 y 1.3 (dependiendo de 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, y las utilidades zabbix_sender y zabbix_get
  • A la base de datos de Zabbix desde el frontend de Zabbix y el servidor/proxy
  • Entre el frontend de Zabbix y el servidor Zabbix

El cifrado es opcional y configurable para componentes individuales:

  • Algunos proxies y agentes pueden configurarse para usar cifrado basado en certificados con el servidor, mientras que otros pueden usar cifrado basado en claves precompartidas, y otros pueden continuar con comunicaciones sin cifrar (como antes).
  • El servidor (proxy) puede usar diferentes configuraciones de cifrado para diferentes equipos.

Los programas demonio de Zabbix utilizan un único puerto de escucha para conexiones entrantes cifradas y no cifradas. Agregar un cifrado no requiere abrir nuevos puertos en los cortafuegos.

Limitaciones

  • Las claves privadas se almacenan en texto plano en archivos legibles por los componentes de Zabbix durante el inicio.
  • Las claves precompartidas se introducen en el frontend de Zabbix y se almacenan en la base de datos de Zabbix en texto plano.
  • El cifrado integrado no protege las comunicaciones entre el servidor web que ejecuta el frontend de Zabbix y el navegador web del usuario.
  • Actualmente, cada conexión cifrada se abre con un apretón de manos TLS completo, no se implementa almacenamiento en caché de sesión ni tickets.
  • Añadir cifrado aumenta el tiempo para las comprobaciones de métricas y acciones, dependiendo de la latencia de la red:
    • Por ejemplo, si el retardo de paquetes es de 100 ms, entonces abrir una conexión TCP y enviar una solicitud sin cifrar toma alrededor de 200 ms. Con cifrado, se añaden unos 1000 ms para establecer la conexión TLS.
    • Es posible que sea necesario aumentar los tiempos de espera, de lo contrario, algunas métricas y acciones que ejecutan scripts remotos en los agentes pueden funcionar con conexiones sin cifrar, pero fallar por tiempo de espera con cifrado.
  • El cifrado no es compatible con el descubrimiento de red. Las comprobaciones de agentes de Zabbix realizadas por descubrimiento de red no estarán cifradas y, si el agente de Zabbix está configurado para rechazar conexiones sin cifrar, dichas comprobaciones no tendrán éxito.

Compilando Zabbix con soporte de cifrado

Para soportar cifrado, Zabbix debe ser compilado y enlazado con una de las bibliotecas criptográficas soportadas:

  • 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
  • LibreSSL - probado con las versiones 2.7.4, 2.8.2:
    • LibreSSL 2.6.x no es compatible
    • LibreSSL es compatible como reemplazo de OpenSSL; no se utilizan las nuevas funciones de la API tls_*() específicas de LibreSSL. Los componentes de Zabbix compilados con LibreSSL no podrán usar PSK, solo se pueden usar certificados.

Puede obtener más información sobre cómo configurar SSL para el frontend de Zabbix consultando estas mejores prácticas.

La biblioteca se selecciona especificando la opción respectiva al script "configure":

  • --with-gnutls[=DIR]
  • --with-openssl[=DIR] (también se utiliza 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

Diferentes componentes de Zabbix pueden ser compilados con diferentes bibliotecas criptográficas (por ejemplo, un servidor con OpenSSL, un agente con GnuTLS).

Si planea usar claves precompartidas (PSK), considere usar las bibliotecas GnuTLS o OpenSSL 1.1.0 (o más recientes) en los componentes de Zabbix que utilicen PSK. Las bibliotecas GnuTLS y OpenSSL 1.1.0 soportan suites de cifrado PSK con Perfect Forward Secrecy. Las versiones anteriores de la biblioteca OpenSSL (1.0.1, 1.0.2c) también soportan PSK, pero las suites de cifrado PSK disponibles no proporcionan Perfect Forward Secrecy.

Gestión del cifrado de conexiones

Las conexiones en Zabbix pueden usar:

Hay dos parámetros importantes que se utilizan para especificar el cifrado entre los componentes de Zabbix:

  • TLSConnect: especifica qué cifrado usar para las conexiones salientes (sin cifrar, PSK o certificado)
  • TLSAccept: especifica qué tipos de conexiones se permiten 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 las conexiones al servidor) y el agente de Zabbix (para comprobaciones activas). En el frontend de Zabbix, el equivalente de TLSConnect es el campo Conexiones al equipo en la pestaña Recopilación de datos → Equipos → <algún equipo> → Cifrado y el campo Conexiones al proxy en Administración → Proxies → <algún proxy> → Cifrado. Si el tipo de cifrado configurado para la conexión falla, no se intentarán otros tipos de cifrado.

TLSAccept se utiliza en los archivos de configuración para el proxy de Zabbix (en modo pasivo, especifica solo las conexiones desde el servidor) y el agente de Zabbix (para comprobaciones pasivas). En el frontend de Zabbix, el equivalente de TLSAccept es el campo Conexiones desde el equipo en la pestaña Recopilación de datos → Equipos → <algún equipo> → Cifrado y el campo Conexiones desde el proxy en Administración → Proxies → <algún proxy> → Cifrado.

Normalmente, solo se configura un tipo de cifrado para las conexiones entrantes. Pero puede que desee cambiar el tipo de cifrado, por ejemplo, de sin cifrar a basado en certificados con el mínimo tiempo de inactividad y posibilidad de reversión. Para lograr esto:

  • Establezca TLSAccept=unencrypted,cert en el archivo de configuración del agente y reinicie el agente de Zabbix
  • Pruebe la conexión con zabbix_get al agente usando certificado. Si funciona, puede reconfigurar el cifrado para ese agente en el frontend de Zabbix en la pestaña Recopilación de datos → Equipos → <algún equipo> → Cifrado estableciendo Conexiones al equipo en "Certificado".
  • Cuando la caché de configuración del servidor se actualice (y la configuración del proxy se actualice si el equipo es monitorizado por proxy), entonces las conexiones a ese agente estarán cifradas
  • Si todo funciona como se espera, puede establecer TLSAccept=cert en el archivo de configuración del agente y reiniciar el agente de Zabbix. Ahora el agente solo aceptará conexiones cifradas basadas en certificados. Las conexiones sin cifrar y basadas en PSK serán rechazadas.

De manera similar, funciona en el servidor y el proxy. Si en el frontend de Zabbix en la configuración del equipo Conexiones desde el equipo se establece en "Certificado", entonces solo se aceptarán conexiones cifradas basadas en certificados desde el agente (comprobaciones activas) y zabbix_sender (métricas trapper).

Lo más probable es que configure las conexiones entrantes y salientes para usar el mismo tipo de cifrado o sin cifrado. Pero técnicamente es posible configurarlo de forma asimétrica, por ejemplo, cifrado basado en certificados para las conexiones entrantes y basado en PSK para las salientes.

La configuración de cifrado para cada equipo se muestra en el frontend de Zabbix, en Recopilación de datos → Equipos en la columna Cifrado del agente. Por ejemplo:

Ejemplo Conexiones al equipo Conexiones permitidas desde el equipo Conexiones rechazadas desde el equipo
none_none.png Sin cifrar Sin cifrar Cifradas, cifrado basado en certificado y basado en 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 Cifrado, basado en certificado Sin cifrar, cifrado basado en PSK o certificado -

Las conexiones no están cifradas por defecto. El cifrado debe configurarse para cada equipo y proxy individualmente.

zabbix_get y zabbix_sender con cifrado

Consulte las páginas del manual de zabbix_get y zabbix_sender para usarlos con cifrado.

Ciphersuites

Las ciphersuites por defecto se configuran internamente durante el inicio de Zabbix.

También se admiten ciphersuites configuradas por el usuario para GnuTLS y OpenSSL. Los usuarios pueden configurar ciphersuites de acuerdo con sus políticas de seguridad. El uso de esta función es opcional (las ciphersuites predeterminadas integradas siguen funcionando).

Para las bibliotecas criptográficas compiladas con la configuración predeterminada, las reglas integradas de Zabbix normalmente resultan en las siguientes ciphersuites (en orden de mayor a menor prioridad):

Biblioteca Ciphersuites de certificado Ciphersuites 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

Cifras TLS configuradas por el usuario

Los criterios de selección de cifras integrados pueden ser sobrescritos con cifras TLS configuradas por el usuario.

Las cifras TLS configuradas por el usuario son una característica destinada a usuarios avanzados que entienden las cifras TLS, su seguridad y las consecuencias de los errores, y que se sienten cómodos con la resolución de problemas de TLS.

Los criterios de selección de cifras integrados pueden ser sobrescritos utilizando los siguientes parámetros:

Ámbito de sobrescritura Parámetro Valor Descripción
Selección de cifras para certificados TLSCipherCert13 Cadenas de cifras válidas de OpenSSL 1.1.1 para el protocolo TLS 1.3 (sus valores se pasan a la función de OpenSSL SSL_CTX_set_ciphersuites()). Criterios de selección de cifras basados en certificados para TLS 1.3

Sólo OpenSSL 1.1.1 o superior.
TLSCipherCert Cadenas de cifras válidas de OpenSSL para TLS 1.2 o cadenas de prioridad válidas de GnuTLS. Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selección de cifras basados en certificados para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)
Selección de cifras para PSK TLSCipherPSK13 Cadenas de cifras válidas de OpenSSL 1.1.1 para el protocolo TLS 1.3 (sus valores se pasan a la función de OpenSSL SSL_CTX_set_ciphersuites()). Criterios de selección de cifras basados en PSK para TLS 1.3

Sólo OpenSSL 1.1.1 o superior.
TLSCipherPSK Cadenas de cifras válidas de OpenSSL para TLS 1.2 o cadenas de prioridad válidas de GnuTLS. Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selección de cifras basados en PSK para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)
Lista combinada de cifras para certificado y PSK TLSCipherAll13 Cadenas de cifras válidas de OpenSSL 1.1.1 para el protocolo TLS 1.3 (sus valores se pasan a la función de OpenSSL SSL_CTX_set_ciphersuites()). Criterios de selección de cifras para TLS 1.3

Sólo OpenSSL 1.1.1 o superior.
TLSCipherAll Cadenas de cifras válidas de OpenSSL para TLS 1.2 o cadenas de prioridad válidas de GnuTLS. Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selección de cifras para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)

Para sobrescribir la selección de cifras en las utilidades zabbix_get y zabbix_sender, utilice los parámetros de 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 interno por defecto. Si se define un parámetro, no puede estar vacío.

Si la configuración de un valor TLSCipher* en la biblioteca criptográfica falla, el servidor, proxy o agente no se iniciará y se registrará un error.

Es importante entender cuándo es aplicable cada parámetro.

Conexiones salientes

El caso más simple son las conexiones salientes:

  • Para conexiones salientes con certificado - use TLSCipherCert13 o TLSCipherCert
  • Para conexiones salientes con PSK - use TLSCipherPSK13 o TLSCipherPSK
  • En el caso de las utilidades zabbix_get y zabbix_sender, se pueden usar los parámetros de línea de comandos --tls-cipher13 o --tls-cipher (el cifrado se especifica de manera inequívoca con un 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 conexión del agente Configuración de 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 proxy de Zabbix:

Configuración de conexión Configuración de cifrado
Conexiones salientes usando PSK TLSCipherPSK, TLSCipherPSK13
Conexiones entrantes usando certificados TLSCipherAll, TLSCipherAll13
Conexiones entrantes usando PSK si el servidor no tiene certificado TLSCipherPSK, TLSCipherPSK13
Conexiones entrantes usando PSK si el servidor tiene certificado TLSCipherAll, TLSCipherAll13

Se puede observar un patrón en las dos tablas anteriores:

  • TLSCipherAll y TLSCipherAll13 solo pueden especificarse si se utiliza una lista combinada de suites de cifrado basadas en certificado y PSK. Hay dos casos en los que esto ocurre: servidor (proxy) con un certificado configurado (las suites de cifrado PSK siempre se configuran en el servidor, proxy si la biblioteca de cifrado admite PSK), agente configurado para aceptar conexiones entrantes basadas tanto en certificado como en PSK
  • en otros casos, TLSCipherCert* y/o TLSCipherPSK* son suficientes

Las siguientes tablas muestran los valores predeterminados integrados de TLSCipher*. Podrían ser un buen punto de partida para sus propios valores personalizados.

Parámetro GnuTLS 3.6.12
TLSCipherCert NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
TLSCipherPSK NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL
TLSCipherAll NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+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 soporte para PSK.

Ejemplos de suites de cifrado configuradas por el usuario

Vea a continuación los siguientes ejemplos de suites de cifrado configuradas por el usuario:

Probar cadenas de cifrado y permitir solo suites de cifrado PFS

Para ver qué suites de cifrado se han seleccionado, debe establecer 'DebugLevel=4' en el archivo de configuración, o usar la opción -vv para zabbix_sender.

Puede ser necesario experimentar con los parámetros TLSCipher* antes de obtener las suites de cifrado deseadas. Es incómodo reiniciar el servidor, proxy o agente de Zabbix varias veces solo para ajustar los parámetros TLSCipher*. Opciones más convenientes son usar zabbix_sender o el comando openssl. Mostraremos ambos.

1. Usando zabbix_sender.

Vamos a crear 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 CA y de agente válidos y PSK para este ejemplo. Ajuste las rutas y nombres de los archivos de certificados y PSK para su entorno.

Si no está usando 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

Las suites de cifrado seleccionadas 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 las suites de cifrado seleccionadas por defecto. Estos valores por defecto se eligen para garantizar la interoperabilidad con agentes Zabbix que se ejecutan en sistemas con versiones antiguas de OpenSSL (desde 1.0.1).

Con sistemas más nuevos puede optar por reforzar la seguridad permitiendo solo unas pocas suites de cifrado, por ejemplo, solo suites de cifrado con PFS (Perfect Forward Secrecy). Probemos permitir solo suites de cifrado con PFS usando los parámetros TLSCipher*.

El resultado no será interoperable con sistemas que usen OpenSSL 1.0.1 y 1.0.2, si se usa 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 pruebe de nuevo:

  $ 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 "certificate ciphersuites" y "PSK ciphersuites" han cambiado: son más cortas que antes, conteniendo solo suites de cifrado TLS 1.3 y TLS 1.2 ECDHE-* como se esperaba.

2. TLSCipherAll y TLSCipherAll13 no se pueden probar con zabbix_sender; no afectan al valor de "certificate and PSK ciphersuites" mostrado en el ejemplo anterior. Para ajustar TLSCipherAll y TLSCipherAll13 debe experimentar con el agente, proxy o servidor.

Por lo tanto, para permitir solo suites de cifrado PFS puede que necesite 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 entiende cómo funciona, puede probar la selección de la suite de cifrado incluso fuera de Zabbix, con el comando openssl. Probemos los tres valores de parámetros 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 incorporado para los datos. Supongamos que está utilizando certificados y desea 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 solo se utilizarán los conjuntos de cifrado relacionados con certificados, también se definen los parámetros TLSCipherPSK* para evitar sus valores predeterminados que incluyen cifrados menos seguros para una mayor interoperabilidad. Los conjuntos de cifrado PSK no se pueden deshabilitar completamente en 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