Installation Zabbix 7.2 — Guide complet

Résumé

Installation de Zabbix Server 7.2 sur Ubuntu 24.04 avec base MariaDB distante (10.10.20.40), accès HTTPS via certificat FSEC-CA, et authentification LDAPS vers Active Directory (fsec.lan).

1. Prérequis

Composant Détail
VM Ubuntu 24.04 LTS — 10.10.20.31
Base de données MariaDB distante — 10.10.20.40
Domaine AD fsec.lan (DC01 = 10.10.20.10)
PKI FSEC-CA (AD CS sur DC01)
DNS zabbix.fsec.lan → 10.10.20.31

2. Installation des paquets Zabbix

bash
# Ajouter le dépôt Zabbix 7.2
wget https://repo.zabbix.com/zabbix/7.2/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.2+ubuntu24.04_all.deb
dpkg -i zabbix-release_latest_7.2+ubuntu24.04_all.deb
apt update

# Installer Zabbix Server, Frontend et Agent
apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent2

3. Préparer la base MariaDB (sur 10.10.20.40)

sql
-- Se connecter à MariaDB
mysql -u root -p

-- Créer la base et l'utilisateur
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'10.10.20.31' IDENTIFIED BY 'MotDePasseZabbix';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'10.10.20.31';
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;
bash
# Depuis la VM Zabbix : importer le schéma initial
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p -h 10.10.20.40 zabbix

4. Configurer Zabbix Server

bash
nano /etc/zabbix/zabbix_server.conf

Lignes importantes à modifier :

ini
DBHost=10.10.20.40
DBName=zabbix
DBUser=zabbix
DBPassword=MotDePasseZabbix
DBPort=3306

⚠️ Point important Zabbix 7.2 : dans le wizard web, il faut mettre le port 3306 explicitement et ne pas cocher TLS pour la connexion MariaDB.

bash
systemctl enable --now zabbix-server zabbix-agent2 apache2

5. Wizard web (première configuration)

Accéder à http://10.10.20.31/zabbix :

  1. Langue → French
  2. Vérification des prérequis → tout doit être ✔
  3. Base de données : Host 10.10.20.40, Port 3306, DB zabbix, User zabbix, TLS décoché
  4. Server name → FSEC-Zabbix
  5. Timezone → Europe/Paris
  6. Login par défaut : Admin / zabbixchanger immédiatement le mot de passe

6. Certificat HTTPS (FSEC-CA)

Pourquoi ?

On veut que l’accès à Zabbix soit en HTTPS avec un certificat signé par notre autorité de certification interne (FSEC-CA sur DC01). C’est cohérent avec le reste du lab (pfSense est aussi en HTTPS sur port 8443).

Étape 6.1 — Générer la clé privée et la CSR sur Zabbix

bash
# Créer le dossier pour les certificats
mkdir -p /etc/ssl/zabbix

# Générer la clé privée (2048 bits)
# C'est la clé secrète du serveur, elle ne doit JAMAIS quitter cette machine
openssl genrsa -out /etc/ssl/zabbix/zabbix.key 2048

C’est quoi une clé privée ?

C’est comme la clé de ta maison. Elle permet de déchiffrer ce qui a été chiffré avec la clé publique correspondante. Elle reste sur le serveur, on ne la transmet jamais.

bash
# Créer le fichier d'extensions avec SAN (Subject Alternative Name)
nano /etc/ssl/zabbix/zabbix.ext

Contenu du fichier zabbix.ext :

ini
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = zabbix.fsec.lan
IP.1 = 10.10.20.31

Pourquoi le SAN ?

Les navigateurs modernes (Chrome, Edge, Firefox) ne se contentent plus du CN (Common Name) dans le certificat. Ils exigent un champ SAN qui liste explicitement les noms DNS et IPs autorisés. Sans SAN → erreur NET::ERR_CERT_COMMON_NAME_INVALID.

bash
# Générer la CSR (Certificate Signing Request)
openssl req -new 
  -key /etc/ssl/zabbix/zabbix.key 
  -out /etc/ssl/zabbix/zabbix.csr 
  -subj "/CN=zabbix.fsec.lan/O=FSEC/C=FR" 
  -config /etc/ssl/zabbix/zabbix.ext

# Afficher la CSR pour la copier
cat /etc/ssl/zabbix/zabbix.csr

C’est quoi une CSR ?

C’est une demande de signature. Elle contient la clé publique + les informations d’identité (CN, Organisation, etc.). On l’envoie à l’autorité de certification (FSEC-CA) pour qu’elle la signe et génère le certificat final.

Étape 6.2 — Signer la CSR avec AD CS (sur DC01)

powershell
# Activer le support SAN dans AD CS (une seule fois)
certutil -setreg policyEditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
Restart-Service certsvc

# Créer le fichier CSR sur DC01
notepad C:Tempzabbix.csr
# → Coller le contenu copié depuis la VM Zabbix

# Signer avec FSEC-CA en incluant le SAN
certreq -submit -attrib "CertificateTemplate:WebServer`nsan:dns=zabbix.fsec.lan&ipaddress=10.10.20.31" C:Tempzabbix.csr C:Tempzabbix.crt
# → Sélectionner FSEC-CA si une fenêtre s'ouvre

# Afficher le certificat pour le copier
type C:Tempzabbix.crt

C’est quoi AD CS ?

Active Directory Certificate Services — c’est notre propre autorité de certification (CA) interne. Elle peut signer des certificats pour tous les serveurs du domaine. Les machines du domaine font confiance à FSEC-CA automatiquement (via GPO).

Étape 6.3 — Installer le certificat sur Zabbix

bash
# Coller le contenu du certificat signé
nano /etc/ssl/zabbix/zabbix.crt
# → Coller depuis DC01

# Vérifier que les 3 fichiers sont présents
ls -la /etc/ssl/zabbix/
# zabbix.key  (clé privée)
# zabbix.csr  (demande de signature — plus nécessaire mais on la garde)
# zabbix.crt  (certificat signé par FSEC-CA)
# zabbix.ext  (fichier de config SAN)

Étape 6.4 — Configurer Apache pour HTTPS

bash
# Activer les modules SSL et rewrite
a2enmod ssl rewrite

# Créer le VirtualHost HTTPS
nano /etc/apache2/sites-available/zabbix-ssl.conf

Contenu :

apache
<VirtualHost *:443>
    ServerName zabbix.fsec.lan
    DocumentRoot /usr/share/zabbix/ui

    SSLEngine on
    SSLCertificateFile    /etc/ssl/zabbix/zabbix.crt
    SSLCertificateKeyFile /etc/ssl/zabbix/zabbix.key

    Include /etc/apache2/conf-available/zabbix.conf
</VirtualHost>

<VirtualHost *:80>
    ServerName zabbix.fsec.lan
    Redirect permanent / https://zabbix.fsec.lan/
</VirtualHost>

⚠️ Piège Zabbix 7.2 : le DocumentRoot est /usr/share/zabbix/ui (avec /ui), pas /usr/share/zabbix. Si tu te trompes → page blanche ou erreur 403.

bash
# Activer le site SSL et désactiver le site par défaut
a2ensite zabbix-ssl.conf
a2dissite 000-default.conf

# Redémarrer Apache
systemctl restart apache2

Étape 6.5 — Créer l’enregistrement DNS

Sur DC01 en PowerShell :

powershell
Add-DnsServerResourceRecordA -Name "zabbix" -ZoneName "fsec.lan" -IPv4Address "10.10.20.31"

# Vérifier
Resolve-DnsName zabbix.fsec.lan

Résultat attendu

https://zabbix.fsec.lan → page de login Zabbix avec cadenas vert (si la FSEC-CA est dans le magasin de confiance du navigateur).

7. Authentification LDAPS vers AD

Pourquoi LDAPS et pas LDAP ?

Windows Server 2025 refuse les connexions LDAP simples (port 389) — il exige soit LDAPS (port 636) soit du LDAP avec signing. C’est une sécurité renforcée par défaut dans WS2025. On a eu exactement le même problème avec GLPI (CP1).

Étape 7.1 — Créer le compte de service dans AD

powershell
# Sur DC01
New-ADUser -Name "svc-zabbix" `
  -SamAccountName "svc-zabbix" `
  -UserPrincipalName "svc-zabbix@fsec.lan" `
  -Path "OU=_Services,OU=_UTILISATEURS,DC=fsec,DC=lan" `
  -AccountPassword (ConvertTo-SecureString "MotDePasse!" -AsPlainText -Force) `
  -PasswordNeverExpires $true `
  -Enabled $true

Étape 7.2 — Configurer TLS sur Zabbix

bash
# Tester la connexion LDAPS depuis Zabbix
ldapsearch -x -H ldaps://10.10.20.10:636 
  -D "CN=svc-zabbix,OU=_Services,OU=_UTILISATEURS,DC=fsec,DC=lan" 
  -w "MotDePasse!" 
  -b "DC=fsec,DC=lan" "(sAMAccountName=svc-zabbix)"

Si erreur Can't contact LDAP server :

bash
# Désactiver la vérification du certificat TLS
echo "TLS_REQCERT never" >> /etc/ldap/ldap.conf

Pourquoi TLS_REQCERT never ?

Le client LDAP (Zabbix) vérifie normalement le certificat du serveur AD. Comme notre certificat FSEC-CA n’est pas dans le magasin de confiance du système Linux, il refuse la connexion. TLS_REQCERT never désactive cette vérification. En production, on importerait plutôt le certificat CA.

Pour que Zabbix web (Apache/PHP) prenne aussi en compte ce paramètre :

bash
echo "LDAPTLS_REQCERT=never" >> /etc/apache2/envvars
systemctl restart apache2

Étape 7.3 — Configurer LDAP dans l’interface Zabbix

Utilisateurs → Authentification → LDAP → Ajouter

Paramètre Valeur
Nom FSEC-AD
Hôte ldaps://10.10.20.10
Port 636
Base DN DC=fsec,DC=lan
Search attribute sAMAccountName
Bind DN CN=svc-zabbix,OU=_Services,OU=_UTILISATEURS,DC=fsec,DC=lan
Bind password mot de passe du compte

Tester avec un compte AD (pas Admin qui est un compte local Zabbix).

8. Résumé du flux des certificats

code
┌─────────────────────┐
│  VM Zabbix           │
│  1. Génère clé privée│ ← reste sur le serveur
│  2. Génère CSR       │ ← contient clé publique + infos identité
│  3. Envoie CSR ──────┼──────┐
│                      │      │
│  5. Reçoit le .crt   │      ▼
│     (certificat signé)│  ┌──────────────┐
│  6. Configure Apache │  │  DC01 (FSEC-CA)│
│     avec .crt + .key │  │  4. Signe la CSR│
└─────────────────────┘  │     → génère .crt│
                          └──────────────────┘

En résumé :

  1. clé privée (.key) = secret du serveur, ne sort jamais
  2. CSR (.csr) = demande de signature envoyée à la CA
  3. certificat (.crt) = identité du serveur validée par la CA
  4. SAN = liste des noms/IPs autorisés dans le certificat (obligatoire pour les navigateurs modernes)
  5. FSEC-CA = notre autorité de certification qui signe tout dans le domaine

Erreurs rencontrées et solutions

Erreur Cause Solution
Page blanche HTTPS DocumentRoot incorrect (/usr/share/zabbix au lieu de /usr/share/zabbix/ui) Corriger dans le VirtualHost Apache
NET::ERR_CERT_COMMON_NAME_INVALID Pas de SAN dans le certificat Regénérer la CSR avec un fichier .ext contenant les SAN
sed appliqué plusieurs fois Le chemin /usr/share/zabbix a été remplacé en /usr/share/zabbix/ui/ui/ui Restaurer depuis le backup, appliquer sed une seule fois
LDAP Strong authentication required WS2025 refuse LDAP simple (port 389) Utiliser LDAPS (port 636)
LDAPS Can't contact LDAP server Certificat CA non reconnu par Linux TLS_REQCERT never dans /etc/ldap/ldap.conf
Zabbix web LDAP échoue Apache/PHP ne lit pas /etc/ldap/ldap.conf Ajouter LDAPTLS_REQCERT=never dans /etc/apache2/envvars