En clair
Un pare-feu est le gardien à l'entrée d'un immeuble : par défaut il ne laisse entrer personne, et vous lui donnez une liste précise (« le facteur peut entrer par la porte 443 », « les voisins du réseau local peuvent sonner à la porte 445 »). nftables, ufw et firewalld sont trois gardiens différents qui comprennent la même liste écrite dans trois langues. L'outil écrit cette liste pour vous dans la langue de votre distribution.
Lequel choisir ?
| Outil | Distributions | Principe |
|---|---|---|
| nftables | Toutes ; outil par défaut de Debian | Un fichier /etc/nftables.conf lu au démarrage. Le plus précis, le plus lisible une fois habitué. |
| ufw | Ubuntu, Debian (à installer) | Des commandes courtes qui écrivent des règles nftables pour vous. Idéal pour un serveur simple. |
| firewalld | Fedora, RHEL, AlmaLinux, Rocky, openSUSE | Des zones et des services nommés, modifiés à chaud avec firewall-cmd. |
N'en utilisez qu'un seul à la fois : deux gestionnaires actifs se marchent dessus et le résultat devient imprévisible.
Appliquer sans se couper l'accès
- Ouvrez deux sessions SSH : l'une sert à appliquer, l'autre reste ouverte en secours.
- Vérifiez que la règle SSH figure bien dans ce que vous allez appliquer, avec le bon port.
- Appliquez, puis ouvrez une troisième connexion depuis votre poste. Si elle aboutit, tout va bien ; sinon, corrigez depuis la session de secours.
- Sur un VPS, repérez avant de commencer la console web de l'hébergeur : elle donne accès à la machine même quand le réseau est fermé.
Docker contourne ufw et firewalld
Quand un conteneur publie un port (ports: "8080:80"), Docker ajoute ses propres règles qui sont examinées avant celles d'ufw et de firewalld. Le port est donc joignable même si le pare-feu ne l'ouvre pas. Deux parades simples : publier le port sur une adresse précise ("192.168.1.10:8080:80") ou sur 127.0.0.1 derrière un proxy inverse, ou ne rien publier du tout et passer par un réseau Docker interne. Le générateur docker-compose applique déjà ce principe.
Vérifier ce qui est réellement ouvert
Depuis le serveur, listez les ports en écoute ; depuis une autre machine, vérifiez ce qui répond vraiment :
sudo ss -tulpn # ports en écoute et programmes associés
sudo nft list ruleset # toutes les règles actives (nftables, ufw, firewalld, Docker)
nmap -Pn 192.168.1.10 # depuis un autre poste : ports joignables
Un port en écoute mais absent du résultat de nmap est bien filtré. Un port visible dans nmap mais que vous n'avez pas ouvert vient souvent d'un conteneur Docker.
Pour aller plus loin : Sécuriser l'accès SSH complète le pare-feu par l'authentification par clé, et Comprendre les pare-feu explique les notions d'état, de politique par défaut et de filtrage.