Cómo bloquear direcciones IP de países con el complemento Geoip en Iptables

Aprenderemos cómo podemos bloquear el tráfico que se origina en IP de países específicos utilizando la base de datos GeoIP y IPTables de Linux. Iptables es una utilidad basada en comandos para configurar el kernel del firewall de Linux que se está implementando como parte del proyecto Netfilter. Mientras que GeoIP es una colección de direcciones IP correspondientes a ubicaciones geográficas, donde la ubicación geográfica se asigna a direcciones IP asignadas a esas organizaciones, ciudades, regiones y países específicos. Las coordenadas geográficas en la base de datos GeoIP a menudo se encuentran cerca del centro de la población, por lo que no deben usarse para identificar una dirección o un hogar específico. Con un módulo llamado xt_geoip, que consta del complemento Iptables xtables y la base de datos GeoIP.

Actualización e instalación de dependencias.

En primer lugar, tenemos que actualizar nuestro sistema Linux y luego avanzaremos para instalar las dependencias que xtables-addons necesita. Para ello ejecutaremos los siguientes comandos correspondientes a las distribuciones que se ejecutan en nuestra máquina.

Sistema basado en Debian (Debian, Ubuntu, Linux Mint)

# apt-get update && apt-get upgrade
# apt-get install iptables-dev xtables-addons-common libtext-csv-xs-perl pkg-config

Sistema basado en RedHat (CentOS, RHEL, Fedora)

# yum update
# yum install gcc-c++ make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS

Instalación de complementos xtables

Después de actualizar nuestro sistema y instalar todas las dependencias, instalaremos xtables-addons en nuestra máquina. Para hacer esto, descargaremos el último tarball del sitio oficial del proyecto xtables-addons usando wget. Una vez descargado, descomprimiremos el archivo y luego lo compilaremos e instalaremos en nuestra máquina.

# wget https://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-2.13.tar.xz
# tar xf xtables-addons-2.13.tar.xz
# cd xtables-addons-2.13
# ./configure
# make
# make install

Permitir que SELinux cargue módulos (basado en el sistema RedHat)

Dado que las distribuciones basadas en RedHat, es decir, CentOS, RHEL y Fedora, tienen SELinux habilitado de forma predeterminada, tenemos que ajustar la política de SELinux de la siguiente manera. De lo contrario, SELinux impedirá las IPTables para el módulo de arranque xt_geoip.

# chcon -vR --user=system_u /lib/modules/$(uname -r)/extra/*.ko
# chcon -vR --type=lib_t /lib64/xtables/*.so

Instalación de la base de datos GeoIP

A continuación, ejecutaremos un módulo llamado xt_geoip que viene con la extensión Xtables-addons, que descarga la base de datos GeoIP de MaxMind y la convierte al formato binario reconocido por xt_geoip. Una vez cargado, lo crearemos y los moveremos a la ruta deseada en xt_geoip, es decir /usr/share/xt_geoip/.

# cd geoip
# ./xt_geoip_dl
# ./xt_geoip_build GeoIPCountryWhois.csv
# mkdir -p /usr/share/xt_geoip/
# cp -r {BE,LE} /usr/share/xt_geoip/

Bloqueando el tráfico del país.

Si todo salió como se esperaba, deberíamos poder usar las utilidades IPTables en nuestro firewall para usar el módulo GeoIP.

Usando Iptables

Aquí está la sintaxis básica para usar IPTables con el módulo GeoIP para bloquear el tráfico que se origina o tiene como destino un país. Aquí tenemos que usarcódigo de dos letras ISO3166en lugar de un país, por ejemplo, RU para Rusia, IE para Irlanda, IN para India, CN para China, etc.

# iptables -m geoip --src-cc country[,country...] --dst-cc country[,country...]

Ahora, si queremos bloquear el tráfico entrante desde India (IN) y Estados Unidos de América (US), escribiremos el siguiente comando para Iptables.

# iptables -I INPUT -m geoip --src-cc IN,US -j DROP

Si queremos bloquear todo el tráfico entrante fuera de Rusia en nuestro servidor, debemos seguir estos pasos.

# iptables -I INPUT -m geoip ! --src-cc RU -j DROP

root@destroyer:~# ping 213.159.209.228                                                                                                                         
PING 213.159.209.228 (213.159.209.228) 56(84) bytes of data.

Cuando intentamos hacer ping a un servidor desde una red fuera de Rusia, no obtuvimos respuestas. Dado que la configuración de Iptables se aplicó en tiempo de ejecución y no se guardó, después de reiniciar el servidor, recibimos respuestas de ping del servidor. Si queremos bloquear el tráfico saliente con destino a India (IN), debemos ejecutar el siguiente comando.

# iptables -A OUTPUT -m geoip --dst-cc IN -j DROP

Usando firewalld

Si iniciamos sesión en un sistema basado en Systemd y firewalld como controlador para la interfaz de IPTables, también podemos usar firewalld para la tarea anterior.

    # firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip --src-cc IN,UN -j DROP

    # firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip ! --src-cc RU -j DROP

    # firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m geoip --dst-cc IN -j DROP

Iptables con módulo GeoIP es muy importante para prevenir ataques DOS y DDOS desde algunos países. También es muy efectivo si desea restringir el acceso a su sitio web/servidor desde un país específico. Por lo tanto, tener el módulo GeoIP instalado con los complementos de iptables es obligatorio para tener una instalación para permitir o denegar ciertos países. Entonces, si tiene alguna pregunta, sugerencia o comentario, escríbalo en el cuadro de comentarios a continuación. Gracias ! Buena suerte para tismile

Actualizaciones del boletín

Ingrese su dirección de correo electrónico a continuación para suscribirse a nuestro boletín