Base de connaissances

Une base nftables sensée

Un ensemble de règles avec rejet par défaut qui autorise ce dont une instance a réellement besoin, limite le débit SSH et ne vous verrouille pas dehors pendant que vous l'écrivez encore.

Un pare-feu, pas deux

Debian 13 fournit nftables avec un /etc/nftables.conf et un service qui le charge. AlmaLinux 10 fournit firewalld au-dessus de nftables, et son service lit ce que /etc/sysconfig/nftables.conf inclut. Choisissez-en un. Exécuter firewalld en parallèle d'un ensemble de règles écrit à la main produit un ensemble de règles que ni l'un ni l'autre n'a écrit.

systemctl disable --now firewalld     # AlmaLinux, if going manual
systemctl enable --now nftables

L'ensemble de règles

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
  set ssh_flood {
    type ipv4_addr
    flags dynamic, timeout
    timeout 1h
  }

  chain input {
    type filter hook input priority filter; policy drop;

    ct state established,related accept
    ct state invalid drop
    iif lo accept

    ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept
    ip6 nexthdr ipv6-icmp accept

    tcp dport 22 ct state new add @ssh_flood { ip saddr limit rate over 6/minute } drop
    tcp dport 22 accept
    tcp dport { 80, 443 } accept
    udp dport 443 accept

    counter comment "dropped by policy"
  }

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

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

Les parties que les gens se trompent :

  • ICMPv6 est accepté en bloc exprès. La découverte de voisinage et packet-too-big vivent là, et les filtrer à la main casse IPv6 d'une manière qui se présente comme un bug d'application pendant une journée et demie.
  • L'ensemble ssh_flood ajoute toute adresse dépassant six nouvelles connexions par minute à une liste de temporisation d'une heure. Pas d'analyseur de journaux, pas de cron, pas de second démon.
  • Pour IPv6, dupliquez l'ensemble avec type ipv6_addr et la règle avec ip6 saddr. Les ensembles sont mono-famille.
  • udp dport 443 est là pour QUIC. Supprimez-le si vous ne le servez pas.

Chargez-le sans vous verrouiller dehors

systemd-run --on-active=120 nft flush ruleset
nft -f /etc/nftables.conf

La première commande planifie une unité transitoire qui efface l'ensemble de règles en deux minutes et imprime son nom. Ouvrez une nouvelle session. Si ça marche, arrêtez la minuterie :

systemctl stop run-u1234.timer

Si ça ne marche pas, attendez, et la machine vous laisse rentrer toute seule. Un ensemble de règles vide signifie aucun filtrage, alors terminez le travail plutôt que de le laisser là pendant la nuit.

Vérifiez ce qu'il fait réellement

nft list ruleset
nft -a list chain inet filter input
nft list set inet filter ssh_flood

-a affiche les poignées, ce qui permet de retirer une seule règle sans réécrire le fichier :

nft delete rule inet filter input handle 12

Les compteurs répondent à la question que personne ne pose : une règle à zéro après une semaine est soit fausse, soit inutile, et les deux valent la peine d'être connus.

Trace

Quand un paquet refuse de se comporter comme l'ensemble de règles le dit :

nft add rule inet filter input tcp dport 8443 meta nftrace set 1
nft monitor trace

Supprimez la règle de trace après. Elle est bon marché plutôt que gratuite.

Ce qu'un pare-feu hôte n'est pas pour

Il filtre la politique, pas les inondations. Les attaques volumétriques sont arrêtées à la périphérie bien avant d'atteindre votre port, et une règle sur l'instance ne ferait que dépenser votre CPU sur des paquets déjà traités. Détails sur protection DDoS.

Persistez-le

nft list ruleset > /etc/nftables.conf
systemctl restart nftables

Remettez le shebang et la ligne flush ruleset en haut du fichier exporté. Sans eux, le prochain chargement ajoute à l'ensemble de règles en cours au lieu de le remplacer, et chaque règle que vous avez apparaît deux fois.

Prêt quand vous l'êtes

Choisissez une ville. Choisissez une taille. Payez en crypto.

Aucun formulaire sur votre identité, pas d'attente d'approbation humaine, pas d'appel téléphonique pour vérifier quoi que ce soit. La facture est réglée et les identifiants arrivent dans votre boîte mail.