Configurer un pare-feu local sous Debian 11 avec UFW
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment configurer un pare-feu local de façon très simple sur un serveur Debian 11 par l'intermédiaire de UFW.
Si vous avez un serveur sous Debian 11 et que vous recherchez une façon simple de configurer un pare-feu local pour gérer les flux entrants et sortants, faites comme moi, utilisez le paquet "ufw". Même le nom qui se cache derrière "ufw" nous indique que ça va être facile : Uncomplicated Firewall, soit le pare-feu simple ou le pare-feu non compliqué si vous préférez.
Accessible en ligne de commande, Ufw est une interface pour IPtables qui va permettre de gérer le framework Netfilter avec des commandes très simples, comme nous le verrons au travers de ce tutoriel où je vais vous indiquer l'essentiel des commandes. Les commandes IPtables, ce n'est pas toujours simple, mais la gestion avec ufw est relativement simple : vous verrez par vous-même dans la suite de ce tutoriel.
II. Installer Ufw sur Debian 11
Commençons par la base : l'installation d'ufw sur le serveur Debian :
sudo apt-get update
sudo apt-get install ufw
J'imagine que vous réalisez cette installation à partir d'une connexion SSH. Veillez à avoir un accès console sur le serveur au cas où les choses dégénèrent : une mauvaise règle et vous pourriez vous couper l'accès à votre serveur !
Nous devons activer ufw pour qu'il soit actif, car pour le moment il ne sert pas à grand chose. Si on l'active maintenant, la connexion SSH active restera active, mais si elle coupe, nous ne pourrons plus nous connecter en SSH, car le flux n'est pas ouvert. Nous allons effectuer la configuration de base avant d'activer le pare-feu.
Par défaut, nous allons refuser toutes les connexions entrantes (incoming) :
sudo ufw default deny incoming
À l'inverse, on autorisera toutes les connexions sortantes (outgoing - vous pouvez modifier ce comportement, bien entendu).
sudo ufw default allow outgoing
Ensuite, nous allons autoriser le SSH :
sudo ufw allow ssh
Cette commande fonctionne, mais sera utile uniquement si vous utilisez le SSH avec le port par défaut (22), ce qui normalement n'est pas le cas. Pour autoriser un port personnalisé et correspondant à votre accès SSH, utilisez plutôt cette syntaxe (exemple avec le port 2222) :
sudo ufw allow 2222/tcp
Désormais, nous pouvons activer le pare-feu puisque la règle pour le SSH est en place. Disons que nous avons notre anti-lockout. 😉
sudo ufw enable
Validez avec "y" puis Entrée. On peut voir que le pare-feu est actif et activé automatiquement au démarrage.
Le pare-feu étant lancé, nous pouvons lister les règles existantes :
sudo ufw status numbered
Une autre commande possible, avec un affichage un peu différent :
sudo ufw status
Voilà pour l'installation. Voyons maintenant d'autres commandes utiles.
III. Pare-feu ufw : commandes utiles
Pour que vous puissiez bien prendre en main ufw, je vais vous donner quelques exemples de commandes utiles. Ensuite, à vous d'adapter selon vos besoins.
A. Autoriser une adresse IP ou un sous-réseau
Nous venons de créer une règle pour autoriser le port associé au service SSH de notre machine. Comment faire pour autoriser un port, mais uniquement selon une adresse IP source particulière ou un sous-réseau ?
Autoriser uniquement le sous-réseau 10.10.10.0/24 à se connecter sur le port 2222 :
sudo ufw allow from 10.10.10.0/24 to any port 2222
Autoriser uniquement la machine 10.10.10.1 à se connecter sur le port 2222 :
sudo ufw allow from 10.10.10.1 to any port 2222
Afin de spécifier TCP ou UDP, il faut ajouter la directive "proto", par exemple :
sudo ufw allow proto tcp from 10.10.10.0/24 to any port 22
B. Autoriser une plage de ports
Pour autoriser une plage de ports au sein d'une règle, il suffit de spécifier la plage sous la forme "<port de début>:<port de fin>". Par exemple, du port "8080" au port "8081" en TCP :
ufw allow 8080:8081/tcp
C. Supprimer une règle ufw
Pour supprimer une règle, il faut être vigilant. Je vais vous expliquer pourquoi. Tout d'abord, il faut lister les règles :
sudo ufw status numbered
Ensuite, pour supprimer la règle il faut préciser son ID (premier chiffre au début de chaque ligne). Par exemple, pour supprimer la ligne 2 :
sudo ufw delete 2
Si vous souhaitez supprimer une autre règle, vous devez lister de nouveau les règles pour récupérer le numéro de lignes ! Tout simplement parce que le numéro de ligne (ou ID) change ! Si l'on supprime la règle 2, et bien la règle avec l'ID 3 devient la règle avec l'ID 2. Du coup, si l'on se base sur la sortie précédente, on risque de se tromper de règle !
D. Bloquer une adresse IP
Si pour une raison ou pour une autre vous avez besoin de bloquer une adresse IP, utilisez la syntaxe suivante :
sudo ufw deny from 192.168.100.10
E. Bloquer un port en sortie
Par défaut, nous autorisons tout le trafic en sortie, mais cela ne veut pas dire que l'on ne peut pas bloquer certains ports. Par exemple pour empêcher notre serveur d'envoyer des e-mails via le port 25 (SMTP), on peut bloquer ce port en sortie :
sudo ufw deny out 25
F. Les applications ufw
UFW est livré avec un ensemble de filtres applicatif que vous pouvez lister avec la commande suivante :
sudo ufw app list
Ces filtres sont associés à des fichiers de configuration définit dans le dossier suivante :
/etc/ufw/applications.d/
Ce fichier contient quelques informations comme les ports associés à l'application. Par exemple, pour Samba on obtient le fichier suivant :
[Samba] title=LanManager-like file and printer server for Unix description=The Samba software suite is a collection of programs that implements the SMB/CIFS protocol for unix systems, allowing you to serve> ports=137,138/udp|139,445/tcp
Si l'on active une règle sur l'application "Samba", cela va automatiquement englober les ports suivants : 137,138/udp et 139,445/tcp. Pour activer une règle sur une application, on l'appelle par son nom :
sudo ufw allow Samba
IV. Conclusion
Nous venons de voir comment mettre en place un pare-feu local sous Debian 11, de manière simple avec Ufw. Pour terminer, sachez que nos règles personnalisées sont ajoutées au fichier suivant : /etc/ufw/user.rules.
Le fichier "/etc/ufw/before.rules" contient les règles évaluées avant les commandes Ufw que l'on a définies et le fichier "/etc/ufw/after.rules" contient les règles évaluées après nos règles. Par exemple, pour bloquer le ping il faut passer en "DROP" au lieu de "ACCEPT" les 4 lignes ICMP du fichier "before.rules" pour modifier le comportement par défaut.
Enfin, pour les adeptes de l'interface graphique sous Linux, sachez que le paquet "gufw" est un utilitaire qui permet de gérer les règles de pare-feu en mode graphique.
Si la gestion du pare-feu sous Debian est un sujet qui vous intéresse, je vous recommande de lire notre cours complet sur Nftables.
Bonjour,
Une règle qui me sert bien pour ipv6 :
sudo ufw allow in from any to 2b11:e0b:7e:4960::1:2 proto tcp port http
Bonsoir Vincent, merci pour ce complément d’info, c’est cool 🙂
Bonjour
Je me pose la question suivante: ce n’est pas un peu curieux de continuer à configurer iptables alors que nftables est désormais conseillé (et utilisé par défaut) ?
Y aurait-il des raisons qui m’échappent?
Bonjour,
iptables et un « outil » au même titre que nftables. Les deux servent à configurer le framework Netfilter intégré au noyau Linux. Sur Debian buster par exemple, les commandes iptables sont toujours utilisables, mais c’est bien nftables qui est à la manœuvre, les commandes « iptables » étant devenu des alias.
Par exemple sur mon Debian 11, après avoir configuré ufw, si je tape la commande « nft list table filter », je retrouve bien mes configs ufw.
bonsoir, sur mon debian 11.3.0: la commande ufw enable ou meme ufw allow ne fonctionne pas
Bonsoir,
As-tu regardé si le paquet était bien installé ?