Zabbix prend en charge les communications chiffrées entre le serveur Zabbix, le proxy Zabbix, les agents Zabbix, les utilitaires zabbix_sender et zabbix_get utilisant le protocole TLS (Transport Layer Security) v.1.2. Le chiffrement est pris en charge à partir de Zabbix 3.0. Le chiffrement basé sur des certificats et sur des clés pré-partagées est pris en charge.
Le chiffrement est facultatif et configurable pour chaque composant individuellement (par exemple, certains proxys et agents peuvent être configurés pour utiliser le chiffrement basé sur des certificats avec le serveur, tandis que d'autres peuvent utiliser le chiffrement par clé pré-partagée).
Le serveur (proxy) peut utiliser différentes configurations de chiffrement pour différents hôtes.
Les démons Zabbix utilisent un seul port d'écoute pour les connexions entrantes chiffrées et non chiffrées. L'ajout d'un chiffrement ne nécessite pas l'ouverture de nouveaux ports sur les pare-feux.
* entre le serveur Web exécutant l'interface Zabbix et le navigateur Web de l'utilisateur,
* entre le serveur Web exécutant l'interface Zabbix et le serveur,
* entre le serveur Zabbix (proxy) et la base de données Zabbix.
* Actuellement, chaque connexion chiffrée s'ouvre par négociation TLS complète, aucune mise en cache de session et aucun ticket ne sont implémentés.
* L'ajout du chiffrement augmente la durée des contrôles et des actions, en fonction de la latence du réseau. Par exemple, si le délai de transmission est de 100 ms, l'ouverture d'une connexion TCP et l'envoi d'une requête non chiffrée prennent environ 200 ms.\\ Avec le chiffrement, 1000ms environ sont ajoutés pour établir une connexion TLS.\\ Il peut être nécessaire d'augmenter les délais d'attente. A défaut, certains éléments et actions exécutant des scripts distants sur des agents fonctionneront en connexion non chiffrée, après échec dû à l'expiration du chiffrement.
* Le chiffrement n'est pas pris en charge pour la [[fr:manual/discovery/network_discovery|découverte réseau]]. Les vérifications des agents Zabbix effectuées par découverte réseau ne seront pas chiffrées et si l'agent Zabbix est configuré pour rejeter les connexions non chiffrées, ces vérifications échoueront.
Pour prendre en charge le chiffrement, Zabbix doit être compilé et lié à l'une des trois bibliothèques cryptographiques suivantes:
La bibliothèque est sélectionnée en spécifiant une des options suivantes au script "configure":
--with-mbedtls[=DIR]
--with-gnutls[=DIR]
--with-openssl[=DIR]
Par exemple, pour configurer les sources pour le serveur et l'agent avec OpenSSL, vous pouvez utiliser le script "configure" comme suit:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
Différents composants Zabbix peuvent être compilés avec différentes bibliothèques cryptographiques (par exemple, un serveur avec OpenSSL, un agent avec GnuTLS).
Si vous prévoyez d'utiliser des clés pré-partagées (PSK), envisagez d'utiliser les bibliothèques GnuTLS ou mbed TLS pour les composants Zabbix utilisant PSK. Les bibliothèques GnuTLS et mbed TLS prennent en charge les suites de chiffrement PSK avec Confidentialité persistante. La bibliothèque OpenSSL (versions 1.0.1 et 1.0.2c) prend en charge les PSK, mais les suites de chiffrement PSK disponibles ne fournissent pas confidentialité persistante.
Les connexions dans Zabbix peuvent utiliser:
Deux paramètres importants permettent de spécifier le chiffrement des connexions entre les composants Zabbix:
TLSConnect
TLSAccept
TLSConnect
spécifie le chiffrement à utiliser pour les connexions sortantes et peut prendre une des trois valeurs (unencrypted
, PSK
, certificate
). TLSConnect
est utilisé dans les fichiers de configuration pour le proxy Zabbix (en mode actif, spécifie uniquement les connexions au serveur) et l'agent Zabbix (pour les vérifications actives). Dans l'interface Zabbix, les équivalents de TLSConnect
sont le champ Connexion à l'hôte de l'onglet Configuration→Hôtes→<un hôte>→Chiffrement et le champ Connexion au proxy de l'onglet Administration→Proxys→<un proxy>→Chiffrement. Si le type de chiffrement configuré pour la connexion échoue, aucun autre type de chiffrement ne sera essayé.
TLSAccept
indique quels types de connexions sont autorisés pour les connexions entrantes. Les types de connexion sont les suivants: unencrypted
, PSK
, certificate
. Une ou plusieurs valeurs peuvent être spécifiées. TLSAccept
est utilisé dans les fichiers de configuration du proxy Zabbix (en mode passif, spécifie uniquement les connexions du serveur) et du démon agentd Zabbix (pour les vérifications passives). Dans l'interface Zabbix, les équivalents de TLSAccept
sont le champ Connexion de l'hôte de l'onglet Configuration→Hôtes→<un hôte>→Chiffrement et le champ Connexions du proxy de l'onglet Administration→Proxys→<un proxy>→Chiffrement.
Normalement, vous ne configurez qu'un seul type de chiffrement pour les chiffrements entrants. Mais vous pourriez vouloir changer de type de chiffrement, par exemple du non chiffré au certificat avec un temps d'arrêt minimum et une possibilité de retour en arrière.
Pour y parvenir, vous pouvez définir TLSAccept=unencrypted,cert
dans le fichier de configuration du démon agentd, puis redémarrer l'agent Zabbix.
Ensuite, vous pourrez tester la connexion avec la commande zabbix_get
à destination de l'agent utilisant un certificat. Si cela fonctionne, vous pourrez reconfigurer le chiffrement pour cet agent dans l'onglet Configuration→Hôtes→<un hôte>→Chiffrement de l'interface Zabbix en définissant Connexion à l'hôte à "Certificat".
Lorsque le cache de configuration du serveur est mis à jour (et la configuration du proxy est mise à jour si l'hôte supervisé par proxy) les connexions à cet agent seront alors chiffrées.
Si tout fonctionne comme prévu, vous pourrez définir TLSAccept=cert
dans le fichier de configuration de l'agent et redémarrer l'agent Zabbix.
Dés lors, l'agent n'acceptera que les connexions chiffrées basées sur des certificats. Les connexions non chiffrées et basées sur PSK seront rejetées.
Tout cela fonctionne de la même manière sur le serveur et le proxy. Si dans le champ Connexion de l'hôte de l'onglet Configuration→Hôtes→<un hôte>→Chiffrement de l'interface Zabbix est défini à "Certificat", alors seules les connexions chiffrées basées sur des certificats seront acceptées depuis l'agent (surveillances actives) et du zabbix_sender
(éléments trappeur).
Vous configurerez très probablement les connexions entrantes et sortantes pour utiliser le même type de chiffrement ou aucun chiffrement. Mais techniquement, il est possible de passer à une configuration asymétrique, par exemple un chiffrement par certificat pour les connexions entrantes et basées sur PSK pour les connexions sortantes.
Pour une vue d'ensemble, la configuration de chiffrement pour chaque hôte est affichée dans l'interface Zabbix Configuration→ Hôtes sur le côté droit, dans la colonne Chiffrement sur l'agent. Exemples d'affichage de configuration:
Exemple | Connexions A l'hôte | Connexions autorisées DE l'hôte | Connexions rejetées DE l'hôte |
---|---|---|---|
Non chiffrées | Non chiffrées | Chiffrées par certificat et PSK | |
Chiffrées par certificat | Chiffrées par certificat | Non chiffrées et chiffrées par PSK | |
Chiffrées par PSK | Chiffrées par PSK | Non chiffrées et chiffrées par certificat | |
Chiffrées par PSK | Non chiffrées et chiffrées par PSK | Chiffrées par certificat | |
Chiffrées par certificat | Non chiffrées, chiffrées par certificat et chiffrées par PSK | - |
Par défaut, les connexions sont non chiffrées. Le chiffrement doit être configuré pour chaque hôte et chaque proxy individuellement.
Voir les man-pages zabbix_get et zabbix_sender pour une utilisation par chiffrement.
Les méthodes de chiffrement sont configurés en interne lors du démarrage de Zabbix et dépendent de la bibliothèque cryptographique, actuellement ils ne sont pas configurables par l'utilisateur.
Configurations de chiffrements par type de bibliothèque, de la priorité la plus élevée à la plus basse:
Bibliothèque | Méthodes de chiffrement par certificat | Méthodes de chiffrement PSK |
---|---|---|
mbed TLS (PolarSSL) 1.3.9 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256 TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA TLS-RSA-WITH-AES-128-GCM-SHA256 TLS-RSA-WITH-AES-128-CBC-SHA256 TLS-RSA-WITH-AES-128-CBC-SHA |
TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA TLS-PSK-WITH-AES-128-GCM-SHA256 TLS-PSK-WITH-AES-128-CBC-SHA256 TLS-PSK-WITH-AES-128-CBC-SHA |
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 |
Méthodes de chiffrement utilisant des certificats:
Serveur TLS | |||
Client TLS | mbed TLS (PolarSSL) | GnuTLS | OpenSSL 1.0.2 |
mbed TLS (PolarSSL) | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 |
GnuTLS | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 |
OpenSSL 1.0.2 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 |
Méthodes de chiffrement utilisant PSK:
Serveur TLS | |||
Client TLS | mbed TLS (PolarSSL) | GnuTLS | OpenSSL 1.0.2 |
mbed TLS (PolarSSL) | TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 | TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 | TLS-PSK-WITH-AES-128-CBC-SHA |
GnuTLS | TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 | TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 | TLS-PSK-WITH-AES-128-CBC-SHA |
OpenSSL 1.0.2 | TLS-PSK-WITH-AES-128-CBC-SHA | TLS-PSK-WITH-AES-128-CBC-SHA | TLS-PSK-WITH-AES-128-CBC-SHA |