Cette section contient les bonnes pratiques à respecter pour configurer Zabbix de manière sécurisée.
Les pratiques contenues ici ne sont pas nécessaires au fonctionnement de Zabbix. Elles sont recommandées pour une meilleure sécurité du système.
Le principe du moindre privilège doit être utilisé à tout moment dans Zabbix. Ce principe signifie que les comptes d'utilisateurs (dans l'interface Zabbix) ou les utilisateurs de processus (pour le serveur/proxy ou l'agent Zabbix) n'ont que les privilèges essentiels pour exécuter les fonctions prévues. En d'autres termes, les comptes d'utilisateurs doivent à tout moment fonctionner avec le moins de privilèges possible.
Donner des autorisations supplémentaires à l'utilisateur 'zabbix' lui permettra d'accéder aux fichiers de configuration et d'exécuter des opérations susceptibles de compromettre la sécurité globale de l'infrastructure.
Lors de la mise en œuvre du principe du moindre privilège pour les comptes d'utilisateurs, les types d'utilisateurs frontend Zabbix doivent être pris en compte. Il est important de comprendre que même si un type d'utilisateur "Admin" a moins de privilèges qu'un type d'utilisateur "Super Admin", il dispose d'autorisations administratives qui permettent de gérer la configuration et d'exécuter des scripts personnalisés.
Certaines informations sont disponibles même pour les utilisateurs non privilégiés. Par exemple, alors que Administration → Scripts n'est pas disponible pour les non-super administrateurs, les scripts eux-mêmes peuvent être récupérés à l'aide de l'API Zabbix. Limiter les autorisations de script et ne pas ajouter d'informations sensibles (comme les informations d'identification d'accès, etc.) doit être utilisé pour éviter l'exposition d'informations sensibles disponibles dans les scripts globaux.
Dans la configuration par défaut, les processus du serveur Zabbix et de l'agent Zabbix partagent un utilisateur 'zabbix'. Si vous souhaitez vous assurer que l'agent ne peut pas accéder aux détails sensibles dans la configuration du serveur (par exemple, les informations de connexion à la base de données), l'agent doit être exécuté en tant qu'utilisateur différent :
UTF-8 est le seul encodage pris en charge par Zabbix. Il est connu pour fonctionner sans aucune faille de sécurité. Les utilisateurs doivent être conscients qu'il existe des problèmes de sécurité si vous utilisez certains des autres encodages.
Lorsque vous utilisez des programmes d'installation Windows, il est recommandé d'utiliser les chemins par défaut fournis par le programme d'installation car l'utilisation de chemins personnalisés sans les autorisations appropriées pourrait compromettre la sécurité de l'installation.
Sur RHEL/Centos, installez le package mod_ssl :
Créer un répertoire pour les clés SSL :
Créer un certificat SSL :
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/private/apache-selfsigned.key -out /etc/httpd/ssl/apache-selfsigned.crt
Remplir les invites de commande de manière appropriée. La ligne la plus importante est celle qui demande le nom commun. Vous devez saisir le nom de domaine que vous souhaitez associer à votre serveur. Vous pouvez saisir l'adresse IP publique à la place si vous n'avez pas de nom de domaine. Nous utiliserons example.com dans cet article.
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:
Editer la configuration SSL d'Apache :
/etc/httpd/conf.d/ssl.conf
DocumentRoot "/usr/share/zabbix"
ServerName example.com:443
SSLCertificateFile /etc/httpd/ssl/apache-selfsigned.crt
SSLCertificateKeyFile /etc/httpd/ssl/private/apache-selfsigned.key
Redémarrer le service Apache pour appliquer les modifications :
Ajouter un hôte virtuel à la configuration Apache et définissez une redirection permanente pour la racine du document vers l'URL SSL Zabbix. Ne pas oublier de remplacer example.com par le nom réel du serveur.
/etc/httpd/conf/httpd.conf
#Ajouter les lignes
<VirtualHost *:*>
ServerName example.com
Redirect permanent / https://example.com
</VirtualHost>
Redémarrer le service Apache pour appliquer les modifications :
Pour protéger l'interface Zabbix contre les attaques de rétrogradation de protocole, nous vous recommandons d'activer la politique HSTS sur le serveur Web.
Par exemple, pour activer la politique HSTS pour votre frontend Zabbix dans la configuration Apache :
ajoutez la directive suivante à la configuration de votre hôte virtuel :
Redémarrer le service Apache pour appliquer les modifications :
To protect Zabbix frontend against Cross Site Scripting (XSS), data injection, and similar attacks, we recommend enabling Content Security Policy on the web server. To do so, configure the web server to return the HTTP header.
The following CSP header configuration is only for the default Zabbix frontend installation and for cases when all content originates from the site's domain (excluding subdomains). A different CSP header configuration may be required if you are, for example, configuring the URL widget to display content from the site's subdomains or external domains, switching from OpenStreetMap to another map engine, or adding external CSS or widgets.
To enable CSP for your Zabbix frontend in Apache configuration, follow these steps:
1. Locate your virtual host's configuration file:
/etc/httpd/conf/httpd.conf
on RHEL-based systems/etc/apache2/sites-available/000-default.conf
on Debian/Ubuntu2. Add the following directive to your virtual host's configuration file:
<VirtualHost *:*>
Header set Content-Security-Policy: "default-src 'self' *.openstreetmap.org; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self' data: *.openstreetmap.org; style-src 'self' 'unsafe-inline'; base-uri 'self'; form-action 'self';"
</VirtualHost>
3. Restart the Apache service to apply the changes:
# On RHEL-based systems:
systemctl restart httpd.service
# On Debian/Ubuntu
systemctl restart apache2.service
Il est recommandé de désactiver toutes les signatures de serveur Web dans le cadre du processus de renforcement du serveur Web. Le serveur Web expose la signature logicielle par défaut :
La signature peut être désactivée en ajoutant deux lignes au fichier de configuration d'Apache (utilisé comme exemple) :
La signature PHP (en-tête HTTP X-Powered-By) peut être désactivée en modifiant le fichier de configuration php.ini (la signature est désactivée par défaut) :
Le redémarrage du serveur Web est nécessaire pour que les modifications du fichier de configuration soient appliquées.
Un niveau de sécurité supplémentaire peut être atteint en utilisant le mod_security (package libapache2-mod-security2) avec Apache. mod_security permet de supprimer la signature du serveur au lieu de supprimer uniquement la version de la signature du serveur. La signature peut être modifiée à n'importe quelle valeur en changeant "SecServerSignature" après l'installation de mod_security.
Veuillez vous référer à la documentation de votre serveur Web pour trouver de l'aide sur la façon de supprimer/modifier les signatures logicielles.
Il est recommandé de désactiver les pages d'erreur par défaut pour éviter l'exposition d'informations. Le serveur Web utilise par défaut les pages d'erreur intégrées :
Les pages d'erreur par défaut doivent être remplacées/supprimées dans le cadre du processus de renforcement du serveur Web. La directive "ErrorDocument" peut être utilisée pour définir une page/un texte d'erreur personnalisé pour le serveur Web Apache (utilisé comme exemple).
Veuillez vous référer à la documentation de votre serveur Web pour trouver de l'aide sur la façon de remplacer/supprimer les pages d'erreur par défaut.
Il est recommandé de supprimer la page de test du serveur Web pour éviter l'exposition d'informations. Par défaut, la racine du serveur Web contient une page de test appelée index.html (Apache2 sur Ubuntu est utilisé comme exemple) :
La page de test doit être supprimée ou rendue indisponible dans le cadre du processus de renforcement du serveur Web.
Par défaut, Zabbix est configuré avec l'en-tête de réponse HTTP X-Frame-Options défini sur SAMEORIGIN
, ce qui signifie que le contenu ne peut être chargé que dans un cadre (frame html) qui a la même origine que la page elle-même.
Les éléments du frontend de Zabbix qui extraient le contenu d'URL externes (à savoir, le widget de tableau de bord URL) affichent le contenu récupéré dans un sandbox avec toutes les restrictions de sandbox activées.
Ces paramètres améliorent la sécurité de l'interface Zabbix et offrent une protection contre les attaques XSS et de détournement de clic. Les super-administrateurs peuvent modifier les paramètres iframe sandboxing et X-Frame-Options HTTP response header selon les besoins. Veuillez peser soigneusement les risques et les avantages avant de modifier les paramètres par défaut. Il n'est pas recommandé de désactiver complètement le sandboxing ou X-Frame-Options.
L'agent Zabbix Windows compilé avec OpenSSL essaiera d'atteindre le fichier de configuration SSL dans c:\openssl-64bit. Le répertoire "openssl-64bit" sur le disque C: peut être créé par des utilisateurs non privilégiés.
Ainsi, pour renforcer la sécurité, il est nécessaire de créer ce répertoire manuellement et de révoquer l'accès en écriture aux utilisateurs non administrateurs.
Veuillez noter que les noms de répertoire seront différents sur les versions 32 bits et 64 bits de Windows.
Pour augmenter la complexité des attaques par force brute de mot de passe, il est suggéré de limiter l'accès au fichier ui/data/top_passwords.txt
en modifiant la configuration du serveur Web. Ce fichier contient une liste des mots de passe les plus courants et spécifiques au contexte, et est utilisé pour empêcher les utilisateurs de définir de tels mots de passe si le paramètre Avoid easy-to-guess passwords est activé dans la politique de mot de passe.
Par exemple, sur NGINX, l'accès aux fichiers peut être limité en utilisant la directive "location" :
Sur Apache - en utilisant le fichier .htaccess
: