Découvrir firewalld sous Debian 13

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 permissive
  • internal : réseau interne
  • trusted : 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.

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *