Morpheus
Sécurité réseau / Firewall local

Firewall nftables

Configuration nftables deny-by-default pour poste Arch Linux: filtrage entrant, ICMP limité, DHCP, forward bloqué et validations réseau.

nftables deny-by-default ICMP DHCP libvirt
Firewall nftables local anonymisé
Vue publique: input deny-by-default, forward bloqué, output accepté, exceptions minimales et supplément libvirt séparé.
01

Installer

Préparer nftables et son service systemd sans modifier la machine depuis le portfolio.

02

Filtrer

Appliquer une table inet filter avec input drop, forward drop et output accept.

03

Tester

Valider règles actives, connectivité sortante, loopback, DNS, ICMP et scan externe.

04

Maintenir

Sauvegarder, documenter les exceptions et isoler les cas Docker/libvirt/fail2ban.

Contexte

Le problème réel.

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.

Objectifs

Ce que la solution devait garantir.

  • Réduire la surface d'attaque réseau d'un poste personnel.
  • Conserver l'usage quotidien sans friction.
  • Rendre la configuration lisible et vérifiable.
  • Séparer le firewall général du supplément Libvirt NAT.
Architecture publique

Structure documentée, détails exploitables retirés.

Exemples anonymisés

Ce qui peut être montré sans exposer le système réel.

Ruleset minimal public

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

Validation réseau

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

Limites explicites

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é
Runbook public

Commandes et états attendus issus de la documentation privée.

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.

Documentation privée: Firewall nftables

Validation nftables

Commandes anonymisées

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

État attendu

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
Documentation privée: Firewall nftables

Tests de connectivité

Commandes anonymisées

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>

État attendu

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
Documentation privée: Firewall nftables

Dépannage

Commandes anonymisées

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

État attendu

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
Travail réalisé

Décisions techniques publiables.

Configuration de base

La page montre le ruleset minimal anonymisé et explique chaque règle.

Validation

Les tests couvrent nft list ruleset, connectivité, scan depuis une autre machine et compteurs.

Dépannage

Les cas DHCP, ping, réseau cassé et logs debug sont traités sans publier de configuration privée.

Validation

Preuves et contrôles retenus.

Preuves visuelles

Contrôles observables et portée de la preuve.

Résultats publics

Ce que le chantier démontre.

Anonymisation

Ce qui reste privé.

  • Pas de fichier /etc/nftables.conf privé complet.
  • Pas d'IP LAN réelle, ports personnels ou règles spécifiques au poste.
  • Pas de commandes de flush présentées comme action normale.
  • Les exemples avancés utilisent des plages et placeholders documentaires.
Sources privées

Documentation d'origine.

  • Guide Firewall nftables.
  • Guide Libvirt NAT avec nftables.
  • Documentation hardening système.
  • Notes dépannage réseau local.

Supplément de documentation privée anonymisé

Firewall nftables sur Arch Linux

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.

Qu'est-ce que nftables ?

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.

Aspectiptablesnftables
SyntaxeFragmentéeUnifiée
IPv4/IPv6Outils séparésFamille inet
ÉtatLegacyActuel
ConfigurationLigne par ligneAtomique

Objectif de cette configuration

  • Filtrer les connexions entrantes.
  • Réduire la surface d'attaque réseau.
  • Protéger contre scans et floods simples.
  • Conserver un usage desktop sans friction.
  • Prévoir une compatibilité optionnelle avec libvirt NAT.

Contexte

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.

Hôte KVM/libvirt

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.

Installation

pacman -S nftables
nft --version
nft list tables
systemctl enable nftables.service
systemctl start nftables.service
systemctl status nftables.service

Configuration sécurisée complète

#!/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

Explications détaillées

  • 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.

Vérification

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.

Sécurité

  • INPUT: drop par défaut, allow-by-exception.
  • FORWARD: drop, pas de routage général.
  • OUTPUT: accept pour le profil desktop.

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.

Configuration avancée

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

Gestion et maintenance

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
Commandes dangereuses

nft flush ruleset et l'arrêt du service désactivent la protection. Elles ne sont pas des opérations normales de maintenance.

Dépannage

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
  • Réseau cassé: vérifier established,related, DNS et output.
  • DHCP cassé: vérifier udp sport 67 udp dport 68 accept.
  • Ping cassé: vérifier la règle ICMP/ICMPv6 limitée.
  • Logs trop bruyants: retirer le logging debug après diagnostic.

Intégration avec d'autres outils

  • fail2ban peut utiliser nftables comme backend.
  • Docker gère ses propres règles; documenter les interactions avant durcissement.
  • Flatpak fonctionne normalement avec output ouvert.
  • Libvirt NAT nécessite les exceptions virbr0 de la page dédiée.

Sauvegardes

cp <NFTABLES_CONFIG> <NFTABLES_CONFIG_BACKUP>
nft list ruleset > <NFTABLES_RULESET_EXPORT>
inspect <PACMAN_HOOK_FOR_BACKUP>

Ressources

  • nftables Wiki.
  • Arch Wiki nftables.
  • nftables Quick Reference.
  • Documentation kernel networking.