Mettre en place un pare-feu nftables sur un Raspberry Pi
Ce guide présente une configuration nftables claire et efficace pour sécuriser un Raspberry Pi accessible depuis le réseau ou Internet. Vous y définissez des règles simples pour filtrer les connexions entrantes, autoriser les services utiles et poser une base saine pour un serveur auto-hébergé.
Comprendre le rôle de nftables
nftables est le pare-feu moderne du système Netfilter sous Linux. Il sert à décider quel trafic réseau est autorisé, refusé ou filtré selon des règles que vous définissez vous-même. Sur un Raspberry Pi, il constitue une base simple pour limiter l’exposition des services réellement nécessaires, comme SSH, HTTP ou HTTPS.
L’idée est de partir d’une politique restrictive, puis d’ouvrir uniquement ce qui est utile. Cette approche réduit la surface d’attaque du serveur et évite qu’un service inutile reste accessible par erreur. Avec une table inet, vous pouvez gérer IPv4 et IPv6 dans une même configuration, ce qui simplifie l’administration.
Préparer le système
Sur Raspberry Pi OS (Debian 13 trixie), le paquet nftables est généralement déjà installé, Le service reste toutefois inactif tant qu’aucune configuration n’a été mise en place. Le point de départ consiste donc à vérifier son état, puis à préparer un fichier /etc/nftables.conf propre et persistant.
Vérifier l'état du service
# Vérifier si nftables est installé et disponible
systemctl status nftables
Le retour montre que le service est bien présent, mais inactif. Cela est normal à ce stade, puisque la configuration n’a pas encore été définie.
# Ouvrir le fichier principal de configuration
sudo nano /etc/nftables.conf
Vous pouvez commencer avec une base minimale :
#!/usr/sbin/nft -f
flush ruleset
Enregistrez le fichier, puis quittez avec Ctrl+O, Entrée, puis Ctrl+X.
La directive flush ruleset est importante. Elle vide l’ensemble des règles déjà chargées avant d’appliquer la nouvelle configuration. Cela évite les conflits et les empilements involontaires lors des tests ou des rechargements.
Conserver une copie
Avant d’aller plus loin, pensez à sauvegarder le fichier /etc/nftables.conf. En cas d’erreur, vous pourrez ainsi revenir rapidement à une version stable de la configuration.
Une fois ce fichier de base en place, vous pouvez définir les règles de filtrage.
Définir une politique de filtrage simple
Le principe le plus sûr consiste à bloquer le trafic entrant par défaut, puis à n’autoriser que les flux réellement utiles. Cette approche réduit la surface d’exposition du Raspberry Pi et permet de garder une configuration lisible. Dans le cas d’un serveur auto-hébergé, les besoins sont souvent limités à quelques services bien identifiés, comme SSH pour l’administration et HTTP ou HTTPS pour les accès web.
La configuration repose ici sur trois chaînes principales :
inputpour le trafic destiné au Raspberry Pi ;forwardpour le trafic routé d’une interface à une autre ;outputpour le trafic émis par le Raspberry Pi lui-même.
Dans un usage classique, la chaîne input est la plus importante, elle contrôle les connexions entrantes vers le Raspberry Pi. Elle est donc définie avec une politique drop, ce qui permet de n’autoriser explicitement que le trafic local, les connexions déjà établies, SSH et les ports web.
La chaîne forward reste également bloquée, puisqu’un serveur classique n’a pas vocation à router du trafic entre plusieurs interfaces.
Enfin, la chaîne output est laissée en accept pour conserver un fonctionnement simple, notamment pour les mises à jour et les résolutions DNS.
Complétez ensuite le fichier /etc/nftables.conf avec une configuration minimale :
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
# Bloquer tout le trafic entrant
type filter hook input priority 0; policy drop;
# Autoriser le trafic local
iif "lo" accept
# Autoriser les connexions déjà établies ou liées
ct state established,related accept
# Autoriser SSH pour l'administration distante
tcp dport 22 accept
# Autoriser les services web
tcp dport { 80, 443 } accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Cette base est volontairement simple. Elle fournit un socle propre et facile à comprendre, que vous pourrez faire évoluer ensuite selon les services réellement exposés.
Activer et tester la configuration
Une fois le fichier /etc/nftables.conf rédigé, commencez par vérifier sa syntaxe. Cette commande contrôle le fichier sans appliquer les règles.
# Vérifier la syntaxe du fichier sans appliquer les règles
sudo nft -c -f /etc/nftables.conf
Si la configuration est correcte, la commande se termine sans afficher d’erreur. Dans le cas contraire, nftables indique la ligne à corriger avant de poursuivre.
Vous pouvez ensuite charger immédiatement la configuration :
# Charger les règles définies dans le fichier
sudo nft -f /etc/nftables.conf
Vérifiez ensuite que le jeu de règles actif correspond bien à votre configuration :
# Afficher les règles actuellement chargées
sudo nft list ruleset
Prenez le temps de tester les accès essentiels depuis une autre machine du réseau. Si vous administrez le Raspberry Pi à distance, commencez par vérifier SSH. Contrôlez ensuite les accès HTTP et HTTPS si le serveur héberge déjà Apache ou un autre service web.
Une fois ces vérifications terminées, activez le service pour que les règles définies dans /etc/nftables.conf soient chargées automatiquement à chaque démarrage.
# Activer nftables au démarrage
sudo systemctl enable nftables
Vous pouvez ensuite lancer le service immédiatement :
# Démarrer le service nftables
sudo systemctl start nftables
Enfin, vérifiez son état :
# Vérifier l'état du service
systemctl status nftables
Une fois les règles chargées, nftables.service peut apparaître en active (exited). C’est normal : le service applique la configuration puis s’arrête, tandis que les règles restent actives dans le noyau.
Après un redémarrage, contrôlez à nouveau le jeu de règles avec sudo nft list ruleset. Si les règles sont bien présentes, la configuration est désormais persistante.
Vous disposez maintenant d’une configuration nftables simple, lisible et adaptée à un Raspberry Pi exposé sur le réseau. Elle laisse passer uniquement les services nécessaires tout en posant une base propre pour la suite de la sécurisation du système.