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 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 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 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
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 usen 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:
- sin cifrado (por defecto)
- Cifrado basado en certificados RSA
- Cifrado basado en PSK
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 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 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 host en Recopilación de datos → Hosts → <algún host> → pestaña Cifrado y el campo Conexiones al proxy en Administración → Proxies → <algún proxy> → pestaña Cifrado. Si falla el tipo de cifrado configurado para la conexión, 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 host en Recopilación de datos → Hosts → <algún host> → pestaña Cifrado y el campo Conexiones desde el proxy en Administración → Proxies → <algún proxy> → pestaña 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,certen 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 → Hosts → <algún host> → Cifrado configurando Conexiones al host en "Certificado".
- Cuando la caché de configuración del servidor se actualice (y la configuración del proxy se actualice si el host es monitoreado por un proxy), entonces las conexiones a ese agente estarán cifradas
- Si todo funciona como se espera, puede establecer
TLSAccept=certen 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 host Conexiones desde el host está configurado en "Certificado", entonces solo se aceptarán conexiones cifradas basadas en certificados desde el agente (comprobaciones activas) y zabbix_sender (ítems trapper).
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 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 host se muestra en el frontend de Zabbix, en Recopilación de datos → Hosts 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 basado en 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 |
![]() |
Cifrado, basado en certificado | Sin cifrar, cifrado basado en PSK o basado en certificado | - |
Las conexiones no están cifradas por defecto. El cifrado debe configurarse para cada host 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](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 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](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 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](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 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-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 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




