NFTABLES db-ip bloquer un pays

NFTABLES db-ip bloquer un pays

Il peut être utile de réduire la surface d’attaque de son serveur en n’autorisant qu’un ou plusieurs pays à se connecter à son site. Personnellement j’administre un autre site qui a pour cible un public exclusivement français. Le serveur en question est sur Debian 10 et utilise nftables comme parefeu. J’ai longuement cherché sur le net une solution relativement simple et rapide à mettre en place, nftables étant relativement récent, la plupart des sites parlent d’iptables, des bases d’IP maxmind au format mmdb à convertir……….
Je vais donc vous montrer comment configurer Nftables avec la base de geoip DB-IP qui propose dans la version free une mise à jour mensuelle.

configuration bdd geoip

Nous allons tout d’abord cloner ce repo github

git clone https://github.com/JMGuisadoG/nftables-geoip

on se rend dans le repertoire et on execute le script

./nft_geoip.py --file-location location.csv --download

Le script a généré plusieurs fichiers au format nft ainsi que la base d’IP au format csv

configuration nftables

Nous allons créer un dossier nftables dans etc pour stocker les fichiers qui vont nous servir.

sudo mkdir /etc/nftables
sudo mv geoip-ipv4.nft /etc/nftables
sudo mv geoip-def-all.nft /etc/nftables

Comme indiqué sur le github : « It is not possible to use the country definitions inside an interactive nft shell« . On ne peut donc pas tester directement avec la commande nft, il faut donc modifier son fichier de conf nftables qui se trouve dans /etc/nftables.conf

table inet filter {

        include "/etc/nftables/geoip-def-all.nft"
        include "/etc/nftables/geoip-ipv4.nft"
        include "/etc/nftables/geoip-ipv6.nft"

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

        chain input {
                type filter hook input priority filter; policy accept;
                meta mark set ip saddr map @geoip4
                meta mark set ip6 saddr map @geoip6
                meta mark $FR tcp dport 443 accept
                tcp dport 443 drop
        }
}

le paramètre include permet de prendre en compte les bases IP au format nft. Au début j’utilisais directement le repertoire cloné (dans le home) mais cela ne fonctionnait pas. J’ai donc créé le répertoire nftables dans etc.
meta mark set ip permet de marquer les paquets entrants avec leur code pays.
meta mark $FR permet d’associer les arguments de nftables sur tous les paquets marqués FR.
Dans mon exemple j’autorise donc tous les paquets en provenance de France sur le port 443. Les autres paquets en destination du port 443 sont rejetés, écartés (drop). Libre à vous d’ajuster à vos propres règles.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *