Existen varias opciones para bloquear el acceso al servidor, tanto a un puerto, por ejemplo el 80, el 22 ó cualquier otro en un servidor Linux. La más sencilla pasa por utilizar IPSET. Para ello basta con seguir una serie de pasos muy sencillos:
1. Instalar IPSET:
~#apt update && apt install ipset
2. Una vez instalado creamos la variable que contendrá las entradas de todos los países que queremos bloquear:
~#ipset create countries hash:net,port
3. Comprobamos que se ha creado correctamente:
~#ipset list
Name: countries
Type: hash:net,port
Revision: 7
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 448
References: 0
Number of entries: 0
Members:
4. Ahora añadimos las IPs y los puertos de los países que queremos bloquear. Para ello vamos a crear un pequeño script para extraerlas:
~#mkdir /root/ipset
~#cd /root/ipset
~#touch /root/ipset/ban-ip-countries.sh
~#chmod +x /root/ipset/ban-ip-countries.sh
5. Ahora editamos el archivo con el editor que más nos guste, por ejemplo vim o nano:
~#nano /root/ipset/ban-ip-countries.sh
COUNTRIES=('cn' 'ru' 'in')
ipset flush countries
for i in "${COUNTRIES[@]}"; do
echo "Ban IP of country ${i}"
for IP in $(wget -O - https://www.ipdeny.com/ipblocks/data/countries/${i}.zone)
do
ipset add countries $IP,22 #En este caso el puerto 22 pero podemos poner más
done
done
6. Ahora lo ejecutamos:
~#bash ban-ip-countries.sh
7. Una vez ejecutado se habrán generado todas la lista de reglas para todas las IPs/puertos de estos países. Solo queda añadirla las reglas a iptables:
iptables -I INPUT -m set --match-set countries src -j DROP
iptables -I FORWARD -m set --match-set countries src -j DROP
Fuente: https://mtxserv.com/vps-server/doc/how-to-block-ip-addresses-by-country