← retour aux snippets

nftables: firewall minimal deny-all puis allow

Mettre en place un filtrage par défaut drop et autoriser explicitement les ports nécessaires.

bash security #nftables#firewall#linux

objectif

Déployer un pare-feu simple et sûr avec nftables: politique par défaut drop, règles d’entrée explicites.

code minimal

# sauvegarder la config actuelle
sudo nft list ruleset > /root/nft-backup-$(date +%F).nft

# charger un ruleset minimal (ipv4/ipv6, ssh, http/https)
sudo tee /etc/nftables.conf >/dev/null <<'EOF'
flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0;
    ct state established,related accept
    iifname "lo" accept
    ip protocol icmp accept
    ip6 nexthdr ipv6-icmp accept
    tcp dport { 22, 80, 443 } accept
    counter drop
  }

  chain forward {
    type filter hook forward priority 0; policy drop;
  }

  chain output {
    type filter hook output priority 0; policy accept;
  }
}
EOF

sudo systemctl enable --now nftables
sudo nft -f /etc/nftables.conf

utilisation

# ajouter un port (ex: 5432) de façon idempotente
sudo nft add rule inet filter input tcp dport 5432 accept || true

# lister la table
sudo nft list table inet filter

# tester la politique avec nmap depuis une autre machine
nmap -Pn --top-ports 100 --open VOTRE_IP

variante(s) utile(s)

# limiter le SSH par adresse source
sudo nft add rule inet filter input tcp dport 22 ip saddr 198.51.100.0/24 accept

# bloquer scans bruyants (SYN flood simple)
sudo nft add rule inet filter input tcp flags syn tcp option maxseg size 0 drop

notes

  • testez via une session distincte avant d’appliquer pour éviter de vous verrouiller.
  • persistez dans /etc/nftables.conf et activez le service systemd nftables.
  • utilisez inet pour couvrir IPv4/IPv6 avec un seul ruleset.