Un pare-feu applicatif: nftables

Rédigé par Alexandre le 06/08/2020

#auto-hébergement #debian #loisir

Le réseau local, qu'il soit public, d'entreprise ou domestique, ne doit pas être considéré comme sûr. En effet, même si le pare-feu réseau (votre box) est bien configuré, un petit malin connecté au même réseau local peut très bien tenter de s'introduire sur une autre machine du même réseau.

Un pare-feu applicatif, comme il en existe sur tous les systèmes d'exploitation, permet d'autoriser ou d'interdire des connexions entrantes ou sortantes vers et depuis la machine sur laquelle il est installé.

Dans cet article, je vais documenter mon utilisation du pare-feu applicatif par défaut sur Debian Buster, nftables.

Prérequis

Vérifier la présence de nftables :

apt policy nftables

La commande précédente peut retourner quelque chose comme ceci :

nftables:
  Installé : 0.9.0-2
  Candidat : 0.9.0-2
 Table de version :
     0.9.3-2~bpo10+1 100
        100 http://deb.debian.org/debian buster-backports/main amd64 Packages
 *** 0.9.0-2 500
        500 http://deb.debian.org/debian buster/main amd64 Packages
        100 /var/lib/dpkg/status

La présence du numéro de version après Installé : indique la présence de nftables. Dans le cas où il serait indiqué (aucun), il faut alors procéder à l'installation de nftables.

Configuration

Debian fournit généreusement des fichiers de configuration tout prêt qu'il suffit d'utiliser :

sudo cp /usr/share/doc/nftables/examples/workstation.nft /etc/nftables.conf

Ce fichier contient une configuration bloquant tout ce qui est entrant sauf pour l'interface de boucle locale (loopback). Afin d'ouvrir des ports en entrée, il suffit d'ajouter la ligne qui va bien au dessus de celle-ci :

                # count and drop any other traffic
                counter drop

Un exemple en ouvrant le port d'écoute de Synthing pour toutes les IP :

[...]
                ## Custom  
                # Syncthing from any
                tcp dport 22000 accept
                
                # count and drop any other traffic
                counter drop
        }
}

La ligne ajoutée est très basique, nftables est capable de bien plus, je vous renvoie donc sur la documentation officielle.

Activation

Démarrer le service :

sudo systemctl start nftables

Dans le cas où on perd la main sur le serveur à ce moment là, deux solutions :

  • console physique ou virtuelle : regarder ce qui ne va pas (sudo systemctl status nftables) et arrêter le service (sudo systemctl stop nftables) pour récupérer la main
  • sans aucun accès : redémarrer le serveur via la console du loueur ou appuyer sur le bouton physique de redémarrage puis rechercher dans les journaux ce qui ne va pas

NB : dans le cas d'un serveur où l'on se connecte en SSH, il faut bien entendu ouvrir le port SSH

Une fois que la configuration est modifiée, retenter l'activation, et lorsque la configuration convient, activer nftables au démarrage de la machine :

sudo systemctl enable nftables

Conclusion

Cette documentation est très courte mais le sujet vaste. Je me suis contenté d'un seul exemple pour éviter de partir dans des choses compliqués dont le cas concret n'est pas évident à cerner.