firewalld est un gestionnaire de pare-feu dynamique, largement utilisé sur les distributions Red Hat (RHEL, Rocky, Alma, Fedora), mais également disponible sur Debian. Contrairement à une gestion directe de nftables ou iptables, firewalld apporte une couche d’abstraction basée sur des zones, des services et des règles persistantes, ce qui facilite l’administration quotidienne.
Dans cet article, nous allons voir :
- Installer firewalld sur Debian 13
- Comprendre les notions de base (zones, runtime vs permanent)
- Ouvrir un port TCP et UDP (exemple : DNS sur le port 53)
- Restreindre l’accès à une adresse IP source
- Rendre les règles persistantes après redémarrage
Tous les exemples sont réalisés avec des privilèges administrateur (root ou sudo).
1. Installation de firewalld sur Debian 13
Par défaut, Debian utilise nftables. Firewalld peut fonctionner par-dessus nftables sans problème.
Installation du paquet
bob@debian:~$ sudo apt update
bob@debian:~$ sudo apt install firewalld
Activation et démarrage du service
bob@debian:~$ sudo systemctl enable firewalld
bob@debian:~$ sudo systemctl start firewalld
Vérification de l'état :
bob@debian:~$ sudo systemctl status firewalld
firewalld est déjà la version la plus récente (2.3.1-1).
Sommaire :
Mise à niveau de : 0. Installation de : 0Supprimé : 0. Non mis à jour : 0
bob@debian:~$ sudo systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-01-30 00:16:45 CET; 1min 21s ago
2. Concepts clés de firewalld
Avant d’aller plus loin, quelques notions importantes :
Zones
Une zone représente un niveau de confiance appliqué à une interface réseau ou à une source IP. Exemples courants :
public: zone par défaut, peu permissiveinternal: réseau internetrusted: tout est autorisé
Runtime vs Permanent
- Runtime : règles actives immédiatement mais perdues au redémarrage
- Permanent : règles conservées après redémarrage
👉 Bonne pratique : toujours utiliser l’option --permanent, puis recharger la configuration.
3. Vérifier la zone active
Afficher les zones actives et les interfaces associées :
bob@debian:~$ firewall-cmd --get-active-zones
public (default)
Afficher la zone par défaut :
bob@debian:~$ firewall-cmd --get-default-zone
public
Dans la suite de l’article, nous utiliserons la zone public.
Afficher toutes les zones
bob@debian:~$ firewall-cmd --list-all-zones
4. Ouvrir le port 53 en TCP et UDP (DNS)
Le DNS utilise le port 53 en UDP et en TCP. Nous allons ouvrir ces ports de manière persistante.
Ouvrir le port 53/UDP
bob@debian:~$ sudo firewall-cmd --permanent --zone=public --add-port=53/udp
success
Ouvrir le port 53/TCP
bob@debian:~$ sudo firewall-cmd --permanent --zone=public --add-port=53/tcp
success
Appliquer les règles
bob@debian:~$ sudo firewall-cmd --reload
success
bob@debian:~$
Vérification
ob@debian:~$ sudo firewall-cmd --zone=public --list-all
public (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 53/udp 53/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
5. Restreindre l’accès à une adresse IP source
Dans de nombreux cas, il est nécessaire de limiter l’accès à un service à une adresse IP source spécifique.
Exemple : autoriser uniquement l’adresse 192.0.2.10 à accéder au DNS sur le port 53.
Suppression des règles trop permissives (si besoin)
Si le port est déjà ouvert à tous :
firewall-cmd --permanent--zone=public --remove-port=53/udp
firewall-cmd --permanent--zone=public --remove-port=53/tcp
Ajout d’une règle riche (rich rule)
Les rich rules permettent un filtrage fin (source, destination, port, protocole, action).
Autoriser le DNS UDP depuis une IP source
bob@debian:~$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.10" port port="80" protocol="tcp" accept'
success
bob@debian:~$
Supprimer une règle riche
bob@debian:~$ firewall-cmd --permanent--zone=public --remove-rich-rule='rule family="ipv4" source address="192.0.2.10" port port="53" protocol="tcp" accept'
Recharger la configuration
firewall-cmd --reload
6. Vérifier les règles configurées
Lister les rich rules de la zone :
bob@debian:~$ sudo firewall-cmd --list-rich-rules
rule family="ipv4" source address="192.0.2.10" port port="80" protocol="tcp" accept
bob@debian:~$
Lister la configuration complète de la zone :
bob@debian:~$ sudo firewall-cmd --list-all
public (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 53/udp 53/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.0.2.10" port port="80" protocol="tcp" accept
7. Persistance des règles après redémarrage
Toutes les règles ajoutées avec l’option --permanent sont stockées dans :
/etc/firewalld/
Après un redémarrage du système ou du service firewalld, elles sont automatiquement réappliquées.
Pour tester :
reboot
Puis vérifier à nouveau les règles avec firewall-cmd --list-all.
Utiliser les services firewalld
Firewalld propose une notion très pratique : les services. Un service est un ensemble prédéfini de ports et de protocoles associés à une application courante (SSH, HTTP, DNS, etc.). Cela permet d’éviter d’ouvrir manuellement des ports.
Lister les services disponibles
bob@debian:~$ firewall-cmd --get-services
0-AD RH-Satellite-6 RH-Satellite-6-capsule afp alvr amanda-client amanda-k5-client amqp amqps anno-1602 anno-1800 apcupsd aseqnet audit
Parmi les services courants, on trouve : ssh, http, https, dns, ntp, etc.
Afficher le détail d’un service:
bob@debian:~$ sudo firewall-cmd --info-service=https
https
ports: 443/tcp
protocols:
source-ports:
modules:
destination:
includes:
helpers:
bob@debian:~$
Exemple : autoriser le service DNS
Plutôt que d’ouvrir explicitement le port 443, on peut autoriser le service https.
bob@debian:~$ sudo firewall-cmd --permanent --zone=public --add-service=https
success
bob@debian:~$ firewall-cmd --reload
Cela ouvre automatiquement :
- le port 443/TCP
Vérifier les services autorisés
bob@debian:~$ sudo firewall-cmd --list-services
dhcpv6-client https ssh
bob@debian:~$
Conclusion
Firewalld est une solution puissante et flexible pour gérer un pare-feu sous Debian 13, tout en restant plus lisible et maintenable que des règles nftables écrites à la main.
Grâce aux zones et aux rich rules, il est possible de :
- Ouvrir des ports TCP/UDP simplement
- Restreindre l’accès à des adresses IP spécifiques
- Garantir la persistance des règles après redémarrage
Pour des environnements serveurs ou des infrastructures mixtes, firewalld constitue une excellente alternative moderne.
Laisser un commentaire