Installer
Préparer nftables et son service systemd sans modifier la machine depuis le portfolio.
Configuration nftables deny-by-default pour poste Arch Linux: filtrage entrant, ICMP limité, DHCP, forward bloqué et validations réseau.
Préparer nftables et son service systemd sans modifier la machine depuis le portfolio.
Appliquer une table inet filter avec input drop, forward drop et output accept.
Valider règles actives, connectivité sortante, loopback, DNS, ICMP et scan externe.
Sauvegarder, documenter les exceptions et isoler les cas Docker/libvirt/fail2ban.
Un poste desktop derrière NAT reste exposé aux services locaux, scans LAN, paquets invalides et erreurs de configuration. Le firewall doit réduire la surface sans casser DNS, DHCP, loopback, ICMP utile ou les cas libvirt explicitement autorisés.
La configuration est montrée comme structure, sans ports ou exceptions privées.
table inet filter
chain input
policy drop
accept loopback
drop invalid
accept established,related
accept limited icmp
accept dhcp client
chain forward
policy drop
chain output
policy accept
Le firewall est accepté seulement si les usages normaux restent fonctionnels.
contrôler le ruleset actif
tester la résolution DNS
tester la sortie HTTPS
tester le loopback
tester l'ICMP limité
scanner depuis un autre hôte LAN
relire les compteurs
La page évite de vendre nftables comme protection universelle.
protège trafic entrant non sollicité
protège scans simples et paquets malformés
ne protège pas contenu applicatif
ne protège pas processus local compromis
ne fournit pas IDS / IPS à lui seul
desktop par défaut output accepté
Les commandes ci-dessous sont volontairement anonymisées: chemins, noms de machines, interfaces, dépôts, périphériques et actions destructrices sont remplacés par des placeholders.
nft --version
nft -c -f <NFTABLES_CONFIG>
nft list ruleset
nft list table inet filter
nft -s list ruleset
systemctl status nftables.service --no-pager
nftables est installé
la syntaxe est valide avant application
la table inet filter est présente
la chaîne input applique une policy drop
la chaîne forward applique une policy drop
l'état du service est connu
ping -c 4 <KNOWN_DOMAIN>
getent hosts <KNOWN_DOMAIN>
curl -I <KNOWN_HTTPS_URL>
ping -c 2 127.0.0.1
nmap -Pn <HOST_IP_FROM_OTHER_MACHINE>
le diagnostic ICMP fonctionne dans la limite prévue
la résolution DNS fonctionne
la sortie HTTPS fonctionne
le loopback fonctionne
le scan externe ne révèle pas de ports ouverts inattendus
nft list chain inet filter input
nft list chain inet filter forward
journalctl -u nftables.service -n 50 --no-pager
journalctl -k | rg '<FIREWALL_LOG_PREFIX>'
nft -s list ruleset
la règle DHCP est présente quand nécessaire
la règle ICMP est présente quand le diagnostic ping est attendu
la règle established,related autorise les réponses
le logging reste temporaire et retiré après debug
les compteurs aident à identifier la règle correspondante
La page montre le ruleset minimal anonymisé et explique chaque règle.
Les tests couvrent nft list ruleset, connectivité, scan depuis une autre machine et compteurs.
Les cas DHCP, ping, réseau cassé et logs debug sont traités sans publier de configuration privée.
Supplément de documentation privée anonymisé
Guide public pour mettre en place un firewall local sécurisé avec nftables. Les IP, ports, chemins et règles spécifiques au poste sont remplacés par des placeholders.
nftables est le framework de filtrage réseau moderne du noyau Linux. Il remplace iptables avec une syntaxe unifiée, une configuration atomique et une gestion IPv4/IPv6 dans une même table inet.
| Aspect | iptables | nftables |
|---|---|---|
| Syntaxe | Fragmentée | Unifiée |
| IPv4/IPv6 | Outils séparés | Famille inet |
| État | Legacy | Actuel |
| Configuration | Ligne par ligne | Atomique |
Configuration pensée pour un poste Arch Linux personnel derrière NAT, non exposé WAN. Pour un serveur public, les règles doivent être adaptées.
Un forward en policy drop bloque virbr0 sans exceptions dédiées. Le supplément Libvirt NAT avec nftables reste la page de référence pour ce cas.
pacman -S nftables
nft --version
nft list tables
systemctl enable nftables.service
systemctl start nftables.service
systemctl status nftables.service
#!/usr/bin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter;
policy drop;
iif lo accept
ct state invalid drop
ct state established,related accept
meta l4proto { icmp, ipv6-icmp } limit rate 10/second accept
udp sport 67 udp dport 68 accept
# Optionnel libvirt:
# iif "<LIBVIRT_BRIDGE>" udp sport 68 udp dport 67 accept
}
chain forward {
type filter hook forward priority filter;
policy drop;
# Optionnel libvirt:
# iif "<LIBVIRT_BRIDGE>" accept
# oif "<LIBVIRT_BRIDGE>" ct state established,related accept
}
chain output {
type filter hook output priority filter;
policy accept;
}
}
nft -c -f <NFTABLES_CONFIG>
nft -f <NFTABLES_CONFIG>
systemctl restart nftables.service
systemctl status nftables.service
flush ruleset: remplace les règles existantes pour éviter les accumulations incohérentes.table inet filter: une table commune IPv4/IPv6.policy drop en input: deny-by-default.iif lo accept: conserve le trafic localhost indispensable.ct state invalid drop: rejette les paquets malformés ou incohérents.ct state established,related accept: autorise les réponses aux connexions sortantes.icmp limité: garde les diagnostics sans accepter un flood.DHCP: permet l'obtention automatique d'une adresse IP.forward drop: l'hôte ne devient pas routeur général.output accept: compromis desktop, durcissable ensuite.nft list ruleset
nft list table inet filter
nft list chain inet filter input
nft -s list ruleset
ping -c 4 <KNOWN_DOMAIN>
getent hosts <KNOWN_DOMAIN>
curl -I <KNOWN_HTTPS_URL>
ping -c 2 127.0.0.1
nmap -Pn <HOST_IP_FROM_OTHER_MACHINE>
Résultat attendu depuis une autre machine: aucun port ouvert inattendu.
Cette configuration ne remplace pas un IDS/IPS, ne filtre pas le contenu applicatif et ne bloque pas une application locale compromise qui initie une connexion sortante.
Exemples à adapter explicitement avant usage réel:
# Logging temporaire
log prefix "<FIREWALL_LOG_PREFIX>: " level info flags all
# SSH local uniquement
ip saddr <LAN_CIDR> tcp dport <SSH_PORT> accept
# OUTPUT filtré
chain output {
type filter hook output priority filter;
policy drop;
oif lo accept
ct state established,related accept
udp dport 53 accept
tcp dport { 80, 443 } accept
udp dport 123 accept
}
# Bloquer une source
ip saddr <BLOCKED_CIDR> drop
# Rate limiting
tcp dport <SERVICE_PORT> ct state new limit rate <RATE> accept
nft -c -f <NFTABLES_CONFIG>
nft list ruleset
nft -s list ruleset
systemctl restart nftables.service
systemctl reload nftables.service
systemctl is-enabled nftables.service
nft flush ruleset et l'arrêt du service désactivent la protection. Elles ne sont pas des opérations normales de maintenance.
nft list chain inet filter input
nft list chain inet filter forward
journalctl -u nftables.service -n 50 --no-pager
journalctl -k | rg '<FIREWALL_LOG_PREFIX>'
nft -s list ruleset
established,related, DNS et output.udp sport 67 udp dport 68 accept.cp <NFTABLES_CONFIG> <NFTABLES_CONFIG_BACKUP>
nft list ruleset > <NFTABLES_RULESET_EXPORT>
inspect <PACMAN_HOOK_FOR_BACKUP>