Générateur de règles nftables
Générer des règles nftables à partir d’un CSV
Rule Definitions
nftables Configuration
Enter rules to generate nftables configuration
Le générateur de règles nftables crée des règles de pare-feu Linux modernes à partir d'une entrée CSV structurée en utilisant la syntaxe nftables. Saisissez vos règles sous forme de lignes CSV avec les colonnes famille de table, chaîne, source, destination, protocole, port et action, et obtenez soit des commandes nft individuelles soit un fichier de jeu de règles complet chargeable de manière atomique -- l'approche recommandée pour les distributions Linux actuelles, notamment Debian 10+, RHEL 8+ et Ubuntu 20.04+.
Comprendre nftables
Si vous configurez un firewall sur une distribution Linux moderne, nftables est l'outil que vous devriez utiliser. Il a remplacé iptables comme framework de filtrage de paquets par défaut à partir du noyau Linux 3.13, et toutes les distributions majeures livrent désormais nftables comme backend par défaut. Debian, Ubuntu, RHEL, Fedora et Arch Linux utilisent tous nftables en coulisses, même lorsque vous exécutez des commandes iptables (la couche de compatibilité iptables-nft les traduit automatiquement).
L'avantage le plus important de nftables par rapport à iptables est le chargement atomique du jeu de règles. Avec iptables, chaque règle est une commande séparée qui modifie l'état du noyau en direct -- si votre script échoue à mi-parcours, vous vous retrouvez avec un jeu de règles partiel qui peut avoir des failles de sécurité. nftables vous permet d'écrire l'intégralité de votre configuration dans un seul fichier et de la charger en une seule opération avec nft -f. Si une règle comporte une erreur de syntaxe, le chargement entier échoue et rien ne change. Ce comportement atomique élimine le problème du "firewall à moitié chargé" qui a causé de véritables incidents de sécurité avec iptables.
La seconde amélioration majeure est une syntaxe plus propre pour les schémas courants. Dans iptables, la correspondance sur plusieurs ports nécessite l'extension maladroite -m multiport --dports 80,443,8080. Dans nftables, vous écrivez tcp dport { 80, 443, 8080 } -- un simple ensemble qui se lit comme une expression naturelle. La famille inet vous permet d'écrire une seule règle qui s'applique à la fois à IPv4 et IPv6 au lieu de maintenir des configurations iptables et ip6tables séparées. Les ensembles nommés vous permettent de définir un groupe d'adresses une fois et de le référencer dans plusieurs règles. Ces fonctionnalités réduisent la complexité de la configuration et rendent les règles de firewall plus faciles à lire lors des audits.
Comment générer des règles nftables à partir d'un CSV
- Préparez vos données de règles au format CSV avec les colonnes : famille de table, chaîne, source, destination, protocole, port(s) et action.
- Collez ou importez le CSV dans le générateur.
- Choisissez le format de sortie : commandes
nftindividuelles ou fichier de jeu de règles complet. - Le générateur produit la syntaxe nftables en exploitant les fonctionnalités comme les ensembles, les maps et la famille
inet. - Copiez la sortie et chargez-la avec
nft -f ruleset.nftpour une application atomique.
Format d'entrée CSV et règles générées
Entrée CSV
family,chain,source,destination,protocol,port,action
inet,input,203.0.113.0/24,,tcp,22,drop
inet,input,10.0.0.0/8,,tcp,443,accept
inet,input,,,tcp,80,accept
inet,output,,198.51.100.10,tcp,3306,accept
inet,forward,192.168.1.0/24,10.0.0.0/8,tcp,8080,accept
Fichier de jeu de règles généré
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ip saddr 203.0.113.0/24 tcp dport 22 drop
ip saddr 10.0.0.0/8 tcp dport 443 accept
tcp dport 80 accept
}
chain output {
type filter hook output priority 0; policy accept;
ip daddr 198.51.100.10 tcp dport 3306 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
ip saddr 192.168.1.0/24 ip daddr 10.0.0.0/8 tcp dport 8080 accept
}
}
Commandes individuelles générées
nft add table inet filter
nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'
nft add rule inet filter input ip saddr 203.0.113.0/24 tcp dport 22 drop
nft add rule inet filter input ip saddr 10.0.0.0/8 tcp dport 443 accept
nft add rule inet filter input tcp dport 80 accept
Fonctionnalités nftables utilisées par le générateur
| Fonctionnalité | Syntaxe nftables | Equivalent iptables |
|---|---|---|
| Ports multiples | tcp dport { 80, 443, 8080 } | -m multiport --dports 80,443,8080 |
| Plage de ports | tcp dport 8000-8080 | --dport 8000:8080 |
| Sources multiples | ip saddr { 10.0.0.0/8, 172.16.0.0/12 } | Deux règles séparées |
| Dual-stack (inet) | table inet filter | Règles iptables et ip6tables séparées |
| Ensembles nommés | set blocklist { type ipv4_addr; } | Pas d'équivalent |
| Journalisation | log prefix "SSH: " drop | Règles -j LOG et -j DROP séparées |
Quand utiliser le générateur de règles nftables
- Nouveaux déploiements de serveurs -- Les distributions modernes livrent nftables par défaut ; commencez directement avec la syntaxe nftables.
- Migration depuis iptables -- Convertissez les règles iptables existantes vers nftables lors de la mise à niveau vers Debian 10+, RHEL 8+ ou Ubuntu 20.04+.
- Chargement atomique du jeu de règles -- Contrairement à iptables (règle par règle), nftables peut charger un jeu de règles entier de manière atomique avec
nft -f, éliminant les failles pendant les changements de configuration. - Infrastructure as Code -- Générez des jeux de règles nftables à partir de données CSV/tableur pour des configurations de firewall versionnées et reproductibles.
- Simplification du dual-stack -- Utilisez la famille
inetpour écrire une seule règle qui s'applique à la fois à IPv4 et IPv6 au lieu de maintenir des jeux de règles séparés.
Différences entre nftables et iptables
Familles de tables
nftables organise les règles par famille, qui détermine quel trafic la table traite :
inet-- Gère à la fois IPv4 et IPv6 (choix le plus courant)ip-- IPv4 uniquementip6-- IPv6 uniquementarp-- Protocole ARPbridge-- Filtrage au niveau bridge
Ensembles et maps
nftables supporte les ensembles anonymes en ligne et les ensembles nommés réutilisables :
# Ensemble anonyme -- plusieurs valeurs dans une seule règle
tcp dport { 22, 80, 443 } accept
# Ensemble nommé -- réutilisable dans plusieurs règles
set trusted_nets {
type ipv4_addr
flags interval
elements = { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 }
}
ip saddr @trusted_nets accept
Chargement atomique
Le générateur peut produire un fichier de jeu de règles complet qui remplace l'intégralité de la configuration en une seule opération :
nft -f /etc/nftables.conf # Charger le jeu de règles atomiquement
nft list ruleset # Vérifier les règles actives
Conseils pratiques pour la configuration nftables
Si vous migrez depuis iptables, résistez à la tentation de simplement traduire les règles une par une. nftables dispose de fonctionnalités qui vous permettent d'exprimer la même politique avec beaucoup moins de règles. Profitez-en pour consolider : fusionnez les règles spécifiques à un port en règles basées sur des ensembles, combinez les règles IPv4 et IPv6 en utilisant la famille inet, et remplacez les chaînes LOG-puis-DROP par des instructions uniques log prefix "..." drop. Une migration est le moment idéal pour auditer et simplifier votre politique de firewall, pas simplement la translittérer.
Pour les serveurs de production, stockez toujours votre configuration nftables dans /etc/nftables.conf et activez le service systemd nftables avec systemctl enable nftables. Cela garantit que vos règles sont chargées au démarrage. Contrairement à iptables où vous avez besoin d'un mécanisme de persistance séparé (iptables-persistent sur Debian, iptables-services sur RHEL), la persistance nftables est intégrée au fichier d'unité de service standard. Après avoir effectué des modifications, exécutez nft -c -f /etc/nftables.conf pour vérifier la syntaxe sans l'appliquer, puis rechargez avec systemctl restart nftables.
Lors du débogage de règles nftables, la commande nft list ruleset est votre meilleur allié. Elle affiche la configuration active complète exactement comme le noyau la voit, y compris les compteurs de règles qui vous indiquent combien de paquets chaque règle a traités. Si un compteur de règle reste à zéro, soit aucun trafic correspondant n'est arrivé, soit une règle plus haut dans la chaîne intercepte le trafic en premier. Utilisez nft monitor pour la journalisation en temps réel des correspondances de règles, ce qui est inestimable lorsque vous cherchez à comprendre pourquoi un trafic spécifique est bloqué.
Questions fréquentes
Puis-je exécuter iptables et nftables en même temps ?
Techniquement, les deux utilisent le même framework netfilter du noyau, mais les exécuter simultanément provoque des conflits. La couche de compatibilité iptables-nft traduit les commandes iptables en nftables en interne, mais mélanger des règles nftables natives avec des commandes iptables n'est pas recommandé.
Comment persister les règles nftables après un redémarrage ?
Sauvegardez votre jeu de règles dans /etc/nftables.conf et activez le service systemd nftables : systemctl enable nftables. Le service charge le fichier de jeu de règles au démarrage.
Qu'est-ce que la famille inet et dois-je toujours l'utiliser ?
La famille inet traite à la fois le trafic IPv4 et IPv6 dans une seule table, éliminant le besoin de règles dupliquées. Utilisez inet pour la plupart des configurations. Utilisez ip ou ip6 uniquement lorsque vous avez besoin d'un comportement spécifique à une famille d'adresses.
Comment migrer d'iptables vers nftables ?
Utilisez la commande iptables-save pour exporter vos règles actuelles, puis passez-les dans iptables-restore-translate (partie du paquet iptables-nft) pour obtenir un équivalent nftables. Examinez attentivement la sortie -- la traduction automatique produit un nftables fonctionnel mais non idiomatique. Utilisez ce générateur pour construire des règles nftables propres à partir de zéro lorsque c'est possible.
Quelle est la différence de performance entre iptables et nftables ? nftables utilise une machine virtuelle optimisée dans le noyau pour l'évaluation des règles, ce qui est généralement plus rapide qu'iptables pour les jeux de règles complexes. L'amélioration est surtout notable avec de grands jeux de règles (des centaines de règles) et la correspondance basée sur des ensembles. Pour les configurations simples avec une douzaine de règles, la différence est négligeable.
Puis-je utiliser nftables sur des noyaux plus anciens ? nftables nécessite le noyau Linux 3.13 ou ultérieur. Les fonctionnalités de base fonctionnent à partir de 3.13, mais les fonctionnalités avancées comme les maps et les ensembles concaténés nécessitent 4.1+. Toutes les distributions LTS actuelles incluent des noyaux suffisamment récents.
Outils associés
- iptables Rule Generator - Générer des règles iptables à partir d'un CSV pour les systèmes Linux existants
- Rule Conflict Finder - Trouver les règles de firewall dupliquées, masquées ou chevauchantes
- Allowlist Builder - Construire une allowlist CIDR minimale à partir d'une liste d'IP
- Blocklist Builder - Construire une blocklist CIDR minimale à partir d'une liste d'IP
- Azure NSG Rule Generator - Générer des règles Azure NSG à partir d'un CSV