Skip to main content

nftables bloqueo por país o zona

Para eso necesitamos clonar el repositorio de Geoip que se puede localizar aquí

Luego podemos ver las opciones usando el comando:

./nft_geoip --help

El script necesita dos archivos .csv.

Un csv de datos de país (location.csv), su ruta se puede especificar con la opción --file-location
Un csv de datos geoip (dbip.csv), su ruta se puede especificar con la opción --file-address

location.csv

El script se envía con este archivo. Un .csv modificado que contiene los datos del país necesarios para generar los mapas.

dbip.csv

Este .csv no se envía y es necesario recuperarlo antes de utilizar el script. Existe la opción --download para hacerlo.

Generando los mapas geoip

Para generar las asignaciones en el directorio actual (suponiendo que no tenga el archivo dbip.csv)

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

Esto nos descargará los siguientes archivos

 rwxr-xr-x 2 root root 4,0K ene  4 19:38 .
 drwxr-xr-x 5 root root 4,0K ene  4 19:38 ..
 -rw-r--r-- 1 root root  22M ene  4 19:38 dbip.csv
 -rw-r--r-- 1 root root  956 ene  4 19:38 geoip-def-africa.nft
 -rw-r--r-- 1 root root 8,3K ene  4 19:38 geoip-def-all.nft
 -rw-r--r-- 1 root root  902 ene  4 19:38 geoip-def-americas.nft
 -rw-r--r-- 1 root root   15 ene  4 19:38 geoip-def-antarctica.nft
 -rw-r--r-- 1 root root  808 ene  4 19:38 geoip-def-asia.nft
 -rw-r--r-- 1 root root  810 ene  4 19:38 geoip-def-europe.nft
 -rw-r--r-- 1 root root  461 ene  4 19:38 geoip-def-oceania.nft
 -rw-r--r-- 1 root root 8,8M ene  4 19:38 geoip-ipv4.nft
 -rw-r--r-- 1 root root  16M ene  4 19:38 geoip-ipv6.nft

geoip-def-all.nft

Contiene todas las definiciones. También contiene un mapa entre las marcas de país y su marca de continente correspondiente.

geoip-def-{continente}.nft
Subconjunto de definiciones para países de un continente determinado. Para ser utilizado como marcas.

geoip-ipv4.nft
Que contiene el mapa entre rangos ipv4 y sus datos geoip. @geoip4

geoip-ipv6.nft
Que contiene el mapa entre rangos ipv6 y sus datos geoip. @geoip6

Ejemplo permitir sólo IP de España por https

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 $ES tcp dport 443 accept
                tcp dport 443 drop
        }
}