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