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 ti