Zabbix Documentation 4.2

Sidebar

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:

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
none.png Non chiffrées Non chiffrées Chiffrées par certificat et PSK
cert.png Chiffrées par certificat Chiffrées par certificat Non chiffrées et chiffrées par PSK
psk_psk.png Chiffrées par PSK Chiffrées par PSK Non chiffrées et chiffrées par certificat
psk_none_psk.png Chiffrées par PSK Non chiffrées et chiffrées par PSK Chiffrées par certificat
all.png 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