17. Chiffrement
Vue d'ensemble
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.
Limitations
- Les clés privées sont stockées en texte brut dans des fichiers lisibles par les composants Zabbix lors du démarrage.
- Les clés pré-partagées sont saisies dans l'interface Zabbix et stockées dans la base de données Zabbix en texte brut.
- Le chiffrement intégré ne protège pas les communications:
<!-- -->
* 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.
Compiler Zabbix avec le support du chiffrement
Pour prendre en charge le chiffrement, Zabbix doit être compilé et lié à l'une des trois bibliothèques cryptographiques suivantes:
- mbed TLS (anciennement PolarSSL)(version 1.3.9 et 1.3.x supérieure). mbed TLS 2.x n'est pas actuellement pris en charge, ce n'est pas un remplacement immédiat pour la branche 1.3, Zabbix ne pourra pas être compilé avec mbed TLS 2.x.
- GnuTLS (à partir de la version 3.1.18)
- OpenSSL (à partir de la version 1.0.1)
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.
Gestion du chiffrement de la connexion
Les connexions dans Zabbix peuvent utiliser:
- aucun chiffrement (par défaut)
- le chiffrement basé sur un certificat RSA
- le chiffrement basé sur PSK
Deux paramètres importants permettent de spécifier le chiffrement des connexions entre les composants Zabbix:
TLSConnectTLSAccept
TLSConnect spécifie le chiffrement à utiliser pour les connexions
sortantes et peut prendre [une des trois]{.underline} 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]{.underline}
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.
zabbix_get et zabbix_sender avec chiffrement
Voir les man-pages zabbix_get et zabbix_sender pour une utilisation par chiffrement.
Méthodes de 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 |




