15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
01.11.2024

Comment configurer un pare-feu avec Firewalld sur Linux (Guide complet)

Sécuriser votre serveur Linux contre les accès non autorisés et le trafic malveillant n’est pas facultatif — c’est une responsabilité fondamentale pour tout administrateur système. Que vous exécutiez un projet personnel, une application métier ou un serveur web de production, un pare-feu correctement configuré est votre première et plus critique ligne de défense. Firewalld est l’un des outils de gestion de pare-feu les plus puissants et flexibles disponibles sur Linux, offrant une gestion dynamique des règles, un contrôle du trafic basé sur les zones et un support de règles enrichies — tout sans nécessiter un redémarrage complet du service lors de l’application des modifications.

Ce guide complet vous guide à travers tout ce que vous devez savoir : installer Firewalld, comprendre les zones, gérer les services et les ports, écrire des règles enrichies et surveiller votre pare-feu en temps réel. Si vous hébergez sur un VPS ou un Serveur Dédié d’AlexHost, ce guide vous aidera à verrouiller votre environnement et à maintenir une posture de sécurité forte et adaptative.

Qu’est-ce que Firewalld et pourquoi devriez-vous l’utiliser ?

Firewalld est un démon de gestion de pare-feu dynamique disponible sur la plupart des principales distributions Linux, notamment CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux, et de plus en plus sur Debian et Ubuntu également. Contrairement à l’approche iptables plus ancienne — où chaque modification de règle nécessitait de vider et de recharger l’ensemble des règles — Firewalld applique les modifications dynamiquement à l’exécution sans interrompre les connexions actives.

Avantages clés de Firewalld

  • Architecture basée sur les zones — attribuez différents niveaux de confiance à différentes interfaces réseau ou plages d’adresses IP
  • Mises à jour dynamiques des règles — appliquez les modifications sans redémarrer le pare-feu ou abandonner les connexions existantes
  • Abstraction des services — gérez le trafic par nom de service (par exemple, http, ssh) plutôt que par numéros de port bruts
  • Règles enrichies — écrivez des règles complexes et conditionnelles ciblant des adresses IP, protocoles et actions spécifiques
  • Intégration D-Bus — permet à d’autres applications et services d’interagir avec le pare-feu par programmation
  • Support IPv4 et IPv6 — gérez les deux familles de protocoles à partir d’une seule interface

Prérequis

Avant de continuer, assurez-vous d’avoir :

  • Un serveur Linux exécutant CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian ou Ubuntu
  • Un accès root ou sudo au serveur
  • Une compréhension de base des commandes du terminal Linux
  • Une session SSH active (gardez-la ouverte tout au long — vous modifierez les règles du pare-feu)

> Avertissement critique : Assurez-vous toujours que SSH (port 22 par défaut) est explicitement autorisé dans vos règles de pare-feu avant d’activer Firewalld. Se verrouiller soi-même d’un serveur distant est une erreur courante et évitable.

Étape 1 : Installation de Firewalld

Firewalld est inclus dans les dépôts par défaut de la plupart des principales distributions Linux. Utilisez le gestionnaire de paquets approprié pour votre système.

Sur CentOS / RHEL / Rocky Linux / AlmaLinux

sudo yum install firewalld -y

Ou, sur les versions plus récentes utilisant DNF :

sudo dnf install firewalld -y

Sur Fedora

sudo dnf install firewalld -y

Sur Debian / Ubuntu

Bien que Firewalld soit le plus couramment associé aux systèmes basés sur RHEL, il est entièrement pris en charge sur les distributions basées sur Debian :

sudo apt update
sudo apt install firewalld -y

> Remarque pour les utilisateurs Ubuntu/Debian : Si ufw est actuellement actif sur votre système, désactivez-le avant d’activer Firewalld pour éviter les conflits :

> “`bash

> sudo ufw disable

> “`

Étape 2 : Démarrage et activation de Firewalld

Après l’installation, démarrez le service Firewalld et configurez-le pour se lancer automatiquement au démarrage du système :

sudo systemctl start firewalld
sudo systemctl enable firewalld

Vérifiez que le service fonctionne correctement :

sudo systemctl status firewalld

Vous devriez voir une sortie similaire à :

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since ...

Si le statut affiche active (running), Firewalld est opérationnel et prêt à être configuré.

Étape 3 : Comprendre les zones Firewalld

Le modèle basé sur les zones est la pierre angulaire de l’architecture de Firewalld. Une zone définit un niveau de confiance pour une connexion réseau ou une interface. Chaque zone contient son propre ensemble de règles qui déterminent quel trafic est autorisé ou refusé.

Zones Firewalld intégrées

ZoneNiveau de confianceCas d’utilisation typique
dropLe plus basToutes les connexions entrantes sont abandonnées sans réponse
blockTrès basLes connexions entrantes sont rejetées avec un message ICMP
publicBasZone par défaut pour les réseaux publics non fiables
externalBasPour les interfaces externes avec masquage NAT
dmzMoyenServeurs accessibles de l’extérieur mais isolés en interne
workMoyen-HautRéseaux de travail avec confiance modérée
homeHautRéseaux domestiques où les autres hôtes sont fiables
internalHautRéseaux internes, similaires à la maison
trustedLe plus hautToutes les connexions sont acceptées

Vérifier la zone par défaut actuelle

sudo firewall-cmd --get-default-zone

Lister toutes les zones disponibles

sudo firewall-cmd --get-zones

Afficher les zones actuellement actives et leurs interfaces

sudo firewall-cmd --get-active-zones

Exemple de sortie :

public
  interfaces: eth0

Étape 4 : Modification de la zone par défaut

Exemple 1 — Définition de la zone par défaut sur public (Recommandé pour VPS/Serveurs Dédiés)

Pour la plupart des serveurs accessibles sur Internet, public est la zone par défaut appropriée. Elle applique un niveau de confiance conservateur et n’autorise que le trafic explicitement autorisé :

sudo firewall-cmd --set-default-zone=public

Vérifiez la modification :

sudo firewall-cmd --get-default-zone

Sortie attendue :

public

Exemple 2 — Définition de la zone par défaut sur home

Si votre serveur fonctionne sur un réseau privé fiable (comme un laboratoire personnel ou un environnement de développement interne), la zone home permet une communication plus permissive entre les hôtes fiables :

sudo firewall-cmd --set-default-zone=home

Vérifiez :

sudo firewall-cmd --get-default-zone

Sortie attendue :

home

Exemple 3 — Définition de la zone par défaut sur work

Pour les serveurs sur un réseau d’entreprise ou de travail où une confiance modérée est appropriée :

sudo firewall-cmd --set-default-zone=work

Vérifiez :

sudo firewall-cmd --get-default-zone

Sortie attendue :

work

Étape 5 : Gestion des services avec Firewalld

Firewalld inclut une bibliothèque de définitions de services prédéfinis qui mappent les noms de services à leurs ports et protocoles correspondants. Cela rend beaucoup plus facile la gestion des règles par intention plutôt que par numéros de port bruts.

Lister tous les services prédéfinis

sudo firewall-cmd --get-services

Autoriser un service dans une zone

Pour autoriser le trafic HTTP (port 80/TCP) dans la zone public de manière permanente :

sudo firewall-cmd --zone=public --add-service=http --permanent

Pour autoriser le trafic HTTPS (port 443/TCP) :

sudo firewall-cmd --zone=public --add-service=https --permanent

Pour autoriser SSH (port 22/TCP) — assurez-vous toujours que cela est autorisé avant de faire d’autres modifications :

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Appliquer les modifications en rechargeant Firewalld

Le drapeau --permanent écrit la règle dans la configuration persistante mais ne l’applique pas immédiatement au pare-feu en cours d’exécution. Rechargez toujours après avoir apporté des modifications permanentes :

sudo firewall-cmd --reload

Vérifier les services dans une zone

sudo firewall-cmd --zone=public --list-services

Exemple de sortie :

dhcpv6-client http https ssh

Supprimer un service d’une zone

Pour supprimer HTTPS de la zone public :

sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reload

Étape 6 : Gestion directe des ports

Dans les cas où un service n’a pas de définition Firewalld prédéfinie, vous pouvez ouvrir ou fermer des ports spécifiques directement.

Ouvrir un port spécifique

Pour ouvrir le port 8080 sur TCP dans la zone public :

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Pour ouvrir un port UDP (par exemple, le port 53 pour DNS) :

sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload

Pour ouvrir une plage de ports (par exemple, 6000–6100 TCP) :

sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reload

Fermer un port spécifique

Pour fermer le port 8080 :

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Lister tous les ports ouverts dans une zone

sudo firewall-cmd --zone=public --list-ports

Étape 7 : Configuration avancée avec des règles enrichies

Les règles enrichies vous donnent un contrôle granulaire et conditionnel du trafic — bien au-delà de ce que les simples règles de service ou de port permettent. Elles prennent en charge le filtrage par adresse IP source, adresse IP de destination, protocole, port et action (accepter, rejeter, abandonner, enregistrer).

Syntaxe des règles enrichies

rule [family="<ipv4|ipv6>"]
     [source address="<IP/CIDR>"]
     [destination address="<IP/CIDR>"]
     [service name="<service>"] | [port port="<port>" protocol="<tcp|udp>"]
     [log [prefix="<prefix>"] [level="<level>"] [limit value="<rate>"]]
     [accept|reject|drop]

Exemple 1 — Autoriser SSH uniquement à partir d’une adresse IP spécifique

C’est l’une des configurations de sécurité les plus importantes pour tout serveur distant. Si vous gérez votre serveur à partir d’une adresse IP fixe, limitez l’accès SSH à cette adresse IP exclusivement :

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept' --permanent
sudo firewall-cmd --reload

Exemple 2 — Bloquer tout le trafic en provenance d’une adresse IP spécifique

Pour bloquer complètement une adresse IP qui génère du trafic malveillant :

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Exemple 3 — Autoriser HTTP à partir d’un sous-réseau spécifique

Pour autoriser le trafic HTTP uniquement à partir d’un sous-réseau interne fiable (par exemple, 192.168.1.0/24) :

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent
sudo firewall-cmd --reload

Exemple 4 — Limiter le débit des connexions SSH pour prévenir les attaques par force brute

Enregistrez et limitez les tentatives de connexion SSH pour réduire l’exposition aux attaques par force brute :

sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH-ATTEMPT" level="notice" limit value="3/m" accept' --permanent
sudo firewall-cmd --reload

Exemple 5 — Autoriser un port spécifique à partir d’une adresse IP spécifique

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload

Lister toutes les règles enrichies dans une zone

sudo firewall-cmd --zone=public --list-rich-rules

Supprimer une règle enrichie

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Étape 8 : Surveillance et audit de votre pare-feu

L’examen régulier de votre configuration de pare-feu est essentiel pour maintenir une posture de sécurité forte. Firewalld fournit plusieurs commandes pour inspecter l’état actuel de vos règles.

Afficher la configuration complète pour la zone par défaut

sudo firewall-cmd --list-all

Exemple de sortie :

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
    rule family="ipv4" source address="203.0.113.50" service name="ssh" accept

Afficher la configuration pour toutes les zones

sudo firewall-cmd --list-all-zones

Afficher la configuration pour une zone spécifique

sudo firewall-cmd --zone=dmz --list-all

Vérifier si un service spécifique est autorisé

sudo firewall-cmd --zone=public --query-service=http

Vérifier si un port spécifique est ouvert

sudo firewall-cmd --zone=public --query-port=8080/tcp

Étape 9 : Règles d’exécution par rapport aux règles permanentes — Comprendre la différence

Firewalld fonctionne avec deux couches de configuration distinctes :

CoucheDrapeauPersistanceCas d’utilisation
Exécution*(aucun drapeau)*Perdu lors du rechargement/redémarrageTest des règles temporairement
Permanent--permanentSurvit au rechargement et au redémarrageConfigurations de production

Flux de travail des meilleures pratiques

  1. Testez d’abord la règle à l’exécution (sans --permanent) pour vérifier qu’elle fonctionne comme prévu
  2. Ajoutez la règle de manière permanente une fois confirmée
  3. Rechargez Firewalld pour synchroniser les configurations d’exécution et permanentes
# Step 1: Test at runtime
sudo firewall-cmd --zone=public --add-service=http

# Step 2: Verify it works as expected, then make it permanent
sudo firewall-cmd --zone=public --add-service=http --permanent

# Step 3: Reload to sync
sudo firewall-cmd --reload

Alternativement, appliquez une règle permanente et rechargez immédiatement dans un flux de travail :

sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reload

Étape 10 : Attribution des interfaces réseau aux zones

Si votre serveur a plusieurs interfaces réseau (courant sur les Serveurs Dédiés avec des cartes réseau publiques et privées), vous pouvez attribuer chaque interface à une zone différente avec différents niveaux de confiance.

Attribuer une interface à une zone

sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reload

Modifier la zone d’une interface

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reload

Supprimer une interface d’une zone

sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reload

Étape 11 : Activation du masquage IP et de la redirection de port

Pour les serveurs agissant comme passerelles ou exécutant NAT (Network Address Translation), Firewalld prend en charge le masquage et la redirection de port en natif.

Activer le masquage (NAT)

sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reload

Rediriger un port (par exemple, rediriger le port externe 80 vers le port interne 8080)

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reload

Rediriger le trafic vers un hôte différent

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
sudo firewall-cmd --reload

Configurations de sécurité pratiques pour les serveurs AlexHost

Si vous exécutez un serveur web, un serveur de base de données ou un serveur d’application sur l’infrastructure AlexHost, voici les configurations Firewalld de base recommandées :

Configuration de base du serveur web

# Allow SSH (restrict to your IP in production)
sudo firewall-cmd --zone=public --add-service=ssh --permanent

# Allow HTTP and HTTPS
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# Reload to apply
sudo firewall-cmd --reload

# Verify
sudo firewall-cmd --list-all

> Conseil professionnel : Associez votre configuration de pare-feu à un Certificat SSL valide pour assurer que tout le trafic web est chiffré de bout en bout. AlexHost propose des certificats SSL pour tous les environnements d’hébergement.

Configuration de base du serveur de base de données (MySQL/MariaDB)

# Allow MySQL only from a specific application server IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent

# Block direct MySQL access from the public internet
sudo firewall-cmd --zone=public --remove-service=mysql --permanent 2>/dev/null

sudo firewall-cmd --reload

Configuration de base du serveur cPanel/WHM

Si vous utilisez un VPS avec cPanel, vous devrez ouvrir les ports requis par cPanel et WHM :

# Web traffic
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# cPanel/WHM ports
sudo firewall-cmd --zone=public --add-port=2082/tcp --permanent   # cPanel HTTP
sudo firewall-cmd --zone=public --add-port=2083/tcp --permanent   # cPanel HTTPS
sudo firewall-cmd --zone=public --add-port=2086/tcp --permanent   # WHM HTTP
sudo firewall-cmd --zone=public --add-port=2087/tcp --permanent   # WHM HTTPS
sudo firewall-cmd --zone=public --add-port=2095/tcp --permanent   # Webmail HTTP
sudo firewall-cmd --zone=public --add-port=2096/tcp --permanent   # Webmail HTTPS

# Mail ports
sudo firewall-cmd --zone=public --add-service=smtp --permanent
sudo firewall-cmd --zone=public --add-service=imaps --permanent
sudo firewall-cmd --zone=public --add-service=pop3s --permanent

sudo firewall-cmd --reload

Dépannage des problèmes courants de Firewalld

Problème 1 : Firewalld ne démarre pas

Vérifiez les conflits avec d’autres outils de pare-feu :

sudo systemctl status iptables
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl start firewalld

Problème 2 : Les règles ne persistent pas après le redémarrage

Assurez-vous d’avoir utilisé le drapeau --permanent et rechargé :

sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload

La commande --runtime-to-permanent enregistre toutes les règles d’exécution actuelles dans la configuration permanente.

Problème 3 : Verrouillé hors de SSH

Si vous avez accidentellement bloqué l’accès SSH, vous devrez accéder au serveur via la console (disponible via

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer