Aide-mémoire3 min de lecture · Mis à jour le 29 sept. 2026
nftables — aide-mémoire du filtrage
Structure tables/chaînes/règles, jeux nommés, politique de refus par défaut et journalisation pour traduire une matrice de flux.
- #hardening
- #tcp-ip
- #least-privilege
Structure
table inet filtre {
set admins { type ipv4_addr; elements = { 10.0.9.10, 10.0.9.11 } }
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
ct state invalid drop
iif lo accept
ip saddr @admins tcp dport 22 accept # F10 bastion → SSH
ip saddr 10.0.2.0/28 tcp dport 8080 accept # F02 WEB → API
icmp type echo-request limit rate 5/second accept
log prefix "nft-drop-in: " level info limit rate 10/minute
}
chain output { type filter hook output priority 0; policy accept; }
}
Chargement atomique : nft -f /etc/nftables.conf (tout ou rien).
Commandes courantes
nft list ruleset
nft -a list chain inet filtre input # avec les handles
nft add element inet filtre admins { 10.0.9.12 }
nft delete rule inet filtre input handle 12
nft -c -f /etc/nftables.conf # vérifier sans appliquer
De la matrice aux règles
| Matrice | Règle |
|---|---|
| F03 API → DB TCP/5432 | ip saddr 10.0.3.20 tcp dport 5432 accept (sur la DB) |
| F04 serveurs → NTP UDP/123 | en sortie si politique output restrictive |
Commentez chaque règle avec l'ID de flux : comment "F03".
Diagnostiquer un refus
journalctl -k | grep nft-drop
nft monitor trace # après: nft add rule inet filtre input meta nftrace set 1
conntrack -L | grep 5432
Bonnes pratiques
policy drop+ct state established,related accepten tête.- Jeux nommés pour les groupes (mise à jour sans réécrire les règles).
- Journaliser les refus avec limitation de débit.
- Configuration versionnée et déployée par automatisation, jamais modifiée à la main en production.