Configurer le pare-feu nftables sur Clear Linux

Introduction

Ntfables est bien entendu présent sur Clear mais est moins facilement manipulable tel quel que sur d'autres distributions.
Je suppose donc que beaucoup utilisent la surcouche firewalld.

Voici donc une procédure de configuration directe pour nftables (sans surcouche) à adapter en fonction de vos besoins. Il suffit de remplacer le nom des interfaces par les vôtres, et de commenter/décommenter ce qui est nécessaire en fonction des différents cas présentés ici - par défaut ici : tout ouvert en stateful depuis la machine (vers internet) et tout fermé dans le sens entrant)


Installation de network-basic

D'abord installer network-basic si ce n'est pas déjà le cas :

sudo swupd bundle-add network-basic

Créer le fichier de configuration

Créer un fichier de configuration (/etc/nftables.conf) avec le contenu suivant :

#!/usr/sbin/nft -f

table inet filter {

    chain input {
        type filter hook input priority 0; policy drop;
        
        ct state established,related accept
        
        iifname 'lo' accept
        
        iifname { 'bridge0', 'enp0s31f6', 'wlp147s0' } ct state established,related accept
        
        #---- Autoriser le flux entrant SSH ----#
        # tcp dport 22 accept
        
        #---- Autoriser les flux entrants pour SSH, SMTP, HTTP, HTTPS, FTP ----#
        # tcp dport { 22, 25, 80, 443, 21 } accept
        
        #---- Autoriser le flux entrant HTTPS ----#
        # tcp dport 443 accept
        
        #---- Autoriser le flux entrant ICMP ----#
        # icmp type echo-request accept
        # icmp type echo-reply accept
        
        #---- Limiter les requêtes SSH entrantes ----#
        # ip saddr { 192.168.1.100, 192.168.1.101 } tcp dport 22 limit rate 5/minute accept
        
        #---- Autoriser le trafic entrant en IPv6 ----#
        # ip6 saddr { 2001:db8::/32 } accept
        
        #---- Rejeter plutôt que jeter le trafic entrant sur le port Telnet ----#
        # tcp dport 23 reject
    }
    
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    
    chain output {
        type filter hook output priority 0; policy accept;
    }

}

Explications


Créer un service systemd

Créer un service pour le contrôle via systemd
(et oui, il n'y a pas de service systemd pour nftables actuellement, il faut donc le créer) :

Créer le fichier /etc/systemd/system/nftables.service avec le contenu suivant :

[Unit]
Description=Start and load the nftables firewall rules
After=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/nft -f /etc/nftables.conf
ExecReload=/usr/sbin/nft flush ruleset; /usr/sbin/nft -f /etc/nftables.conf
ExecStop=/usr/sbin/nft flush ruleset

[Install]
WantedBy=multi-user.target

Activer et démarrer le service

Activer et démarrer le service fraîchement créé :

sudo systemctl daemon-reload ; sudo systemctl enable nftables ; sudo systemctl start nftables

Vérifier le statut du service

sudo systemctl status nftables

Commandes utiles

Afficher les règles actives

sudo nft list ruleset

Pour éventuellement recharger la configuration après modification

sudo nft flush ruleset && sudo nft -f /etc/nftables.conf

⬆️ Retour en haut de la page