13 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.
Compilación de Zabbix con soporte de cifrado
Para admitir el cifrado, Zabbix debe compilarse y enlazarse 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 es compatible como reemplazo de OpenSSL;
no se utilizan las nuevas funciones de API específicas de LibreSSL
tls_*(). Los componentes de Zabbix compilados con LibreSSL no podrán usar PSK; solo se pueden usar certificados.
Puede obtener más información sobre la configuración de SSL para el frontend de Zabbix consultando estas prácticas recomendadas.
La biblioteca se selecciona especificando la opción correspondiente en el script "configure":
--with-gnutls[=DIR]--with-openssl[=DIR](también se usa para LibreSSL)
Por ejemplo, para configurar los fuentes para server y agent con OpenSSL puede usar algo como:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
Distintos componentes de Zabbix pueden compilarse con diferentes bibliotecas criptográficas (por ejemplo, un server con OpenSSL y un agent con GnuTLS).
Si planea usar claves precompartidas (PSK), considere usar 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 admiten conjuntos de cifrado 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 cifrado PSK disponibles no proporcionan Perfect Forward Secrecy.
Gestión del cifrado de conexiones
Las conexiones en Zabbix pueden usar:
- sin cifrado (predeterminado)
- cifrado basado en certificado RSA
- cifrado basado en PSK
Hay dos parámetros importantes que se usan 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 puede especificar uno o más valores.
TLSConnect se usa en los archivos de configuración de Zabbix proxy (en modo activo, especifica solo conexiones al server) y Zabbix agent (para comprobaciones activas). En Zabbix frontend, el equivalente de TLSConnect es el campo Connections to host en la pestaña Data collection > Hosts > <some host> > Encryption y el campo Connections to proxy en la pestaña Administration > Proxies> <some proxy> > Encryption. Si falla el tipo de cifrado configurado para la conexión, no se probará ningún otro tipo de cifrado.
TLSAccept se usa en los archivos de configuración de Zabbix proxy (en modo pasivo, especifica solo conexiones desde el server) y Zabbix agent (para comprobaciones pasivas). En Zabbix frontend, el equivalente de TLSAccept es el campo Connections from host en la pestaña Data collection > Hosts > <some host> > Encryption y el campo Connections from proxy en la pestaña Administration > Proxies > <some proxy> > Encryption.
Normalmente se configura solo un tipo de cifrado para las conexiones entrantes. Pero es posible que desee cambiar el tipo de cifrado, por ejemplo, de sin cifrar a basado en certificado con un tiempo de inactividad mínimo y posibilidad de reversión. Para lograrlo:
- Establezca
TLSAccept=unencrypted,certen el archivo de configuración del agent y reinicie Zabbix agent - Pruebe la conexión con zabbix_get al agent usando certificado. Si funciona, puede reconfigurar el cifrado para ese agent en Zabbix frontend, en la pestaña Data collection > Hosts > <some host> > Encryption, estableciendo Connections to host en "Certificate".
- Cuando se actualice la caché de configuración del server (y la configuración del proxy si el host está monitorizado por proxy), las conexiones a ese agent estarán cifradas
- Si todo funciona como se espera, puede establecer
TLSAccept=certen el archivo de configuración del agent y reiniciar Zabbix agent. Ahora el agent aceptará solo conexiones cifradas basadas en certificado. Se rechazarán las conexiones sin cifrar y las basadas en PSK.
De forma similar funciona en server y proxy. Si en Zabbix frontend, en la configuración del host, Connections from host está establecido en "Certificate", entonces solo se aceptarán conexiones cifradas basadas en certificado desde el agent (comprobaciones activas) y zabbix_sender (items trapper).
Lo más probable es que configure las conexiones entrantes y salientes para usar el mismo tipo de cifrado o ningún cifrado en absoluto. Pero técnicamente es posible configurarlo de forma asimétrica, por ejemplo, cifrado basado en certificado para las conexiones entrantes y basado en PSK para las salientes.
La configuración de cifrado de cada host se muestra en Zabbix frontend, en Data collection > Hosts, en la columna Agent encryption. Por ejemplo:
| Example | Connections to host | Allowed connections from host | Rejected connections from host |
|---|---|---|---|
![]() |
Sin cifrar | Sin cifrar | Cifradas, cifradas basadas en certificado y PSK |
![]() |
Cifradas, basadas en certificado | Cifradas, basadas en certificado | Sin cifrar y cifradas basadas en PSK |
![]() |
Cifradas, basadas en PSK | Cifradas, basadas en PSK | Sin cifrar y cifradas basadas en certificado |
![]() |
Cifradas, basadas en PSK | Sin cifrar y cifradas basadas en PSK | Cifradas, basadas en certificado |
![]() |
Cifradas, basadas en certificado | Sin cifrar, PSK o cifradas basadas en certificado | - |
Las conexiones no están cifradas de forma predeterminada. El cifrado debe configurarse para cada host y proxy de forma individual.
zabbix_get y zabbix_sender con cifrado
Consulte las páginas del manual de zabbix_get y zabbix_sender para usarlos con cifrado.
Conjuntos de cifrado
De forma predeterminada, los conjuntos de cifrado 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 los conjuntos de cifrado de acuerdo con sus políticas de seguridad. El uso de esta función es opcional (los conjuntos de cifrado predeterminados integrados siguen funcionando).
Para las bibliotecas criptográficas compiladas con la configuración predeterminada, las reglas integradas de Zabbix normalmente dan como resultado los siguientes conjuntos de cifrado (en orden de mayor a menor prioridad):
| Biblioteca | Conjuntos de cifrado de certificado | Conjuntos 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 |
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-cipher13o--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 Zabbix agent:
| Configuración de conexión del agent | 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 Zabbix server y proxy:
| 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 server no tiene certificado | TLSCipherPSK, TLSCipherPSK13 |
| Conexiones entrantes usando PSK si el server tiene certificado | TLSCipherAll, TLSCipherAll13 |
Se puede observar cierto patrón en las dos tablas anteriores:
- TLSCipherAll y TLSCipherAll13 solo pueden especificarse si se utiliza una lista combinada de conjuntos de cifrado basados en certificados y PSK. Hay dos casos en los que esto ocurre: server (proxy) con un certificado configurado (los conjuntos de cifrado PSK siempre se configuran en server, proxy si la biblioteca criptográfica admite PSK), agent configurado para aceptar tanto conexiones entrantes basadas en certificados como en 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 | 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 compatibilidad con 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:
Prueba de 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 que sea necesario hacer algunas pruebas con los parámetros
TLSCipher* antes de obtener las suites de cifrado deseadas. Resulta
incómodo reiniciar Zabbix server, proxy o agent varias veces solo para
ajustar los parámetros TLSCipher*. Opciones más cómodas son usar
zabbix_sender o el comando openssl. Veamos ambas.
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
Para este ejemplo necesita certificados válidos de CA y de agent, así como PSK. Ajuste las rutas y los nombres de los archivos de certificado y PSK para su entorno.
Si no está usando certificados, sino solo PSK, puede crear un archivo de prueba más sencillo:
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 de forma predeterminada. Estos valores predeterminados se eligen para garantizar la interoperabilidad con agentes de Zabbix que se ejecutan en sistemas con versiones antiguas de OpenSSL (desde 1.0.1).
En sistemas más nuevos puede optar por reforzar la seguridad permitiendo solo
unas pocas suites de cifrado, por ejemplo, solo las suites con PFS (Perfect
Forward Secrecy). Probemos a 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.
Añada dos líneas al archivo de configuración test.conf:
TLSCipherCert=EECDH+aRSA+AES128
TLSCipherPSK=kECDHEPSK+AES128
y vuelva a probar:
$ 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 "certificate ciphersuites" y "PSK ciphersuites" han cambiado: son más cortas que antes y contienen solo suites de cifrado TLS 1.3 y suites TLS 1.2 ECDHE-* como se esperaba.
2. TLSCipherAll y TLSCipherAll13 no se pueden probar con zabbix_sender; no afectan al valor "certificate and PSK ciphersuites" mostrado en el ejemplo anterior. Para ajustar TLSCipherAll y TLSCipherAll13 debe experimentar con el agent, proxy o server.
Por tanto, para permitir solo suites de cifrado PFS puede que necesite añadir 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 agent también tiene PSK.
Si su entorno de Zabbix usa 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 suites de
cifrado incluso fuera de Zabbix, con el comando openssl. Probemos los tres
valores de los 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 forma 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




