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 plano 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 plano
  • El cifrado integrado no protege las comunicaciones:
    • Entre el servidor web que ejecuta el frontend de Zabbix y el navegador web del usuario
    • Entre el frontend de Zabbix y el servidor de Zabbix.
  • Actualmente, cada conexión cifrada se abre con un protocolo de enlace TLS completo, no se implementa el almacenamiento en caché de sesiones y se implementan tickets
  • Agregar cifrado aumenta el tiempo para las comprobaciones y acciones de las métricas dependiendo de la latencia de la red:
    • Por ejemplo, si el retraso del paquete es de 100 ms, entonces abrir una conexión TCP y el envío de una solicitud no cifrada tardan unos 200 ms. Con el 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 las acciones que ejecutan scripts remotos en agentes pueden funcionar con conexiones no cifradas, pero fallarán con el tiempo de espera con las cifradas.
  • El cifrado no es compatible con el descubrimiento de red. Los controles del agente Zabbix realizados por el descubrimiento de red no estarán cifrados y si el agente Zabbix está configurado para rechazar conexiones no cifradas, tales comprobaciones. no tendrán éxito.

Compilando Zabbix con soporte de cifrado

Para admitir el cifrado, Zabbix debe compilarse y vincularse con una de las bibliotecas criptográficas compatibles:

  • 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 se admite 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 usar PSK, sólo se pueden utilizar certificados.

Puede obtener más información sobre la configuración de SSL para la interfaz de Zabbix consultando estas mejores prácticas.

La biblioteca se selecciona especificando la opción respectiva en secuencia de comandos "configure":

  • --with-gnutls[=DIR]
  • --with-openssl[=DIR] (also used for 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 librerías criptográficas (por ejemplo, un servidor con OpenSSL, un agente con GnuTLS).

Si planea utilizar claves precompartidas (PSK), considere usar bibliotecas GnuTLS o OpenSSL 1.1.0 (o más reciente) en los componentes de Zabbix que utilizan PSK. Bibliotecas GnuTLS y OpenSSL 1.1.0 admite conjuntos de cifrado PSK con Perfect Forward Secreto. Las versiones anteriores de la libraría OpenSSL (1.0.1, 1.0.2c) también admiten PSK, pero los conjuntos de cifrado PSK disponibles no proporcionan Perfect Forward Secreto.

Gestión de cifrado de la conexión

Las conexiones en Zabbix pueden usar:

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 conexiones entrantes (sin cifrar, PSK o certificado). Se pueden especificar uno o mas valores.

TLSConnect se utiliza en los archivos de configuración para el proxy Zabbix (en modo activo, especifica solo conexiones al servidor) y el agente Zabbix (para controles activos). En la interfaz de Zabbix, el equivalente de TLSConnect es el Campo Conexiones al equipo en Recopilación de datos → Equipos → <algún equipo> → pestaña Cifrado y el campo Conexiones al proxy en Administración → Proxies → <algún proxy> → pestaña Cifrado. Si el el tipo de cifrado configurado para la conexión falla, no se probarán ningún otro tipo de cifrado.

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

Normalmente se configura sólo un tipo de cifrado para los cifrados de las comunicaciones entrantes. Pero es posible que desee cambiar el tipo de cifrado, p. e. de sin cifrar a basado en certificados con un tiempo de inactividad y reversión mínimos. Para lograr esto:

  • Establezca TLSAccept=unencrypted,cert en el archivo de configuración del agente y reinicie el agente Zabbix
  • Probar la conexión con zabbix_get al agente mediante certificado. Si funciona, puede reconfigurar el cifrado para ese agente en Zabbix frontend en Recopilación de datos → Equipos → <algún equipo> → pestaña Cifrado configurando Conexiones al equipo en "Certificado".
  • Cuando se actualiza la caché de configuración del servidor (y la configuración del proxy se actualiza si el equipo es monitoreado por proxy) entonces las conexiones a ese agente se cifrarán
  • Si todo funciona como se esperaba, puede configurar TLSAccept=cert en el archivo de configuración del agente y reiniciar el agente Zabbix. Ahora el agente aceptará únicamente conexiones cifradas basadas en certificados. Se rechazarán las conexiones no cifradas y basadas en PSK.

De manera similar funciona en servidor y proxy. Si en la interfaz de Zabbix en la configuración del equipo Conexiones desde el equipo está configurada en "Certificado", luego sólo se aceptarán conexiones cifradas basadas en certificados desde el agente (verificaciones activas) y zabbix_sender (métricas de captura).

Lo más probable es que configure las conexiones entrantes y salientes para usar el mismo tipo de cifrado o ningún cifrado. Pero técnicamente es posible configurarlo asimétricamente, p.e. 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 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 Cifrado, certificado y cifrado 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, PSK o cifrado basado en certificado -

Las conexiones no están cifradas de forma predeterminada. El cifrado debe configurarse para cada equipo y proxy individualmente.

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.

También se admiten conjuntos de cifrado configurados por el usuario para 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 cifrado configurados por el usuario

Los criterios de selección del conjunto de cifrado incorporado se pueden anular con conjuntos de cifrado configurados por el usuario.

Los conjuntos de cifrado configurados por el usuario son una característica destinada para usuarios avanzados que entienden los conjuntos de cifrado TLS, su seguridad y consecuencias de los errores y quiénes se sienten cómodos con TLS solución de problemas.

Los criterios de selección del conjunto de cifrado incorporado se pueden anular utilizando el siguientes parámetros:

Anular alcance Parámetro Valor Descripción
Selección de conjunto de cifrado para certificados TLSCipherCert13 OpenSSL 1.1.1 [cadenas de cifrado] válidas (https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) para el protocolo TLS 1.3 (sus valores se pasan a la función OpenSSL SSL_CTX_set_ciphersuites()). Criterios de selección de conjunto de cifrado basado en certificados para TLS 1.3

Solo OpenSSL 1.1.1 o posterior.
TLSCipherCert OpenSSL válido cadenas de cifrado para TLS 1.2 o GnuTLS válido cadenas de prioridad. Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selección de conjunto de cifrado basados en certificados para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)
Selección de conjunto de cifrado para PSK TLSCipherPSK13 OpenSSL 1.1.1 [cadenas de cifrado] válidas (https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) para el protocolo TLS 1.3 (sus valores se pasan a la función OpenSSL SSL_CTX_set_ciphersuites()). Criterios de selección de conjunto de cifrado basado en PSK para TLS 1.3

Solo OpenSSL 1.1.1 o posterior.
TLSCipherPSK OpenSSL válido cadenas de cifrado para TLS 1.2 o GnuTLS válido cadenas de prioridad. Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selección de conjunto de cifrado basado en PSK para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)
Lista de conjuntos de cifrado combinados para certificado y PSK TLSCipherAll13 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 Ciphersuite para TLS 1.3

Solo OpenSSL 1.1.1 o posterior.
TLSCipherAll OpenSSL válido cadenas de cifrado para TLS 1.2 o GnuTLS válido cadenas de prioridad. Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selección de Ciphersuite para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)

Para anular la selección del conjunto de cifrado en zabbix_get y Utilidades zabbix_sender: utilice la parámetros de línea de comando:

  • --tls-cipher13 ---tls-cipher

Los nuevos parámetros son opcionales. Si no se especifica un parámetro, el Se utiliza el valor predeterminado interno. Si se define un parámetro, no se puede vacío.

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

Es importante comprender cuándo es aplicable 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 componentes y configuración.

Para el agente 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 Zabbix:

Configuración de conexión Configuración de cifrado
Conexiones salientes mediante PSK TLSCipherPSK, TLSCipherPSK13
Conexiones entrantes mediante 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 ver algún patrón en las dos tablas anteriores:

  • TLSCipherAll y TLSCipherAll13 solo se pueden especificar si se utiliza una lista de conjuntos de cifrado basados en la combinación de certificados y PSK. Hay dos casos en los que se produce: servidor (proxy) con un certificado configurado (los conjuntos de cifrado PSK siempre están configurados en el servidor, proxy si la biblioteca criptográfica admite PSK), agente configurado para aceptar ambas 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*. 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 las versiones anteriores de OpenSSL (1.0.1, 1.0.2, 1.1.0), para LibreSSL y si OpenSSL está compilado sin soporte PSK.

Ejemplos de conjuntos de cifrado configurados por el usuario

Vea a continuación los siguientes ejemplos de conjuntos de cifrado configurados por el usuario:

Probar cadenas de cifrado y permitir solo conjuntos de cifrado PFS

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

Podría ser necesario experimentar con los parámetros TLSCipher* antes de obtener los conjuntos de cifrado deseados. Es inconveniente reiniciar el servidor, proxy o agente Zabbix varias veces solo para modificar los parámetros TLSCipher*. Las opciones más convenientes son usar zabbix_sender o el comando openssl. Mostremos ambos.

1. Usando zabbix_sender.

Hagamos 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 PSK y certificados para su entorno.

Si no está utilizando certificados, sino sólo PSK, puede hacer un archivo de prueba más sencillo:

  Hostname=nonexisting
         ServerActive=nonexisting
         
         TLSConnect=psk
         TLSPSKIdentity=nonexisting
         TLSPSKFile=/home/zabbix/agentd.psk

Los conjuntos de cifrado 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í verá los conjuntos de cifrado seleccionados de forma predeterminada. Estos valores predeterminados se eligen para garantizar la interoperabilidad con los agentes Zabbix que se ejecutan en sistemas con versiones antiguas de OpenSSL (desde 1.0.1).

Con los sistemas más nuevos, puede optar por reforzar la seguridad permitiendo solo unos pocos conjuntos de cifrado, p.e. sólo conjuntos de cifrado con PFS (Perfect Forward Secreto). Intentemos permitir solo conjuntos de cifrado con PFS usando los parámetros TLSCipher*.

Si se usa PSK, el resultado no será interoperable con los sistemas que usen OpenSSL 1.0.1 y 1.0.2. El cifrado basado en certificado debería funcionar.

Agregue dos líneas al archivo de configuración test.conf:

  TLSCipherCert=EECDH+aRSA+AES128
         TLSCipherPSK=kECDHEPSK+AES128

y pruebe otra vez:

  $ 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 cifrado de certificados" y "conjuntos de cifrado PSK" han cambiado - son más cortas que antes y solo contienen conjuntos de cifrado TLS 1.3 y conjuntos de cifrado TLS 1.2 ECDHE-* como se esperaba.

2. TLSCipherAll y TLSCipherAll13 no se pueden probar con zabbix_sender; no afectan a los "certificados y conjuntos de cifrado PSK" valor mostrado en el ejemplo anterior. Para modificar TLSCipherAll y TLSCipherAll13 necesita experimentar con el agente, proxy o 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 sólo cifrado basado en PSK y no en certificados, entonces solo uno:

  TLSCipherPSK=kECDHEPSK+AES128

Ahora que comprende cómo funciona, puede probar el conjunto de cifrado. seleccionado incluso fuera de Zabbix, con el comando openssl. Vamos a probar 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
         

Es posible que prefiera ejecutar openssl ciphers con la opción -V para obtener una información 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, puedes 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 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 se utilizarán los conjuntos de cifrado relacionados con certificados , los parámetros TLSCipherPSK* también se definen para evitar sus valores predeterminados que incluyen 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