Red de conocimiento informático - Material del sitio web - Cómo bloquear el tráfico de red por país en Linux

Cómo bloquear el tráfico de red por país en Linux

Como administrador de sistemas que mantiene servidores Linux en un entorno de producción, hay situaciones en las que necesita bloquear o permitir selectivamente el tráfico de red según la ubicación geográfica. Por ejemplo, supongamos que se encuentra con ataques de denegación de servicio provenientes principalmente de direcciones IP registradas en un determinado país. En otros casos, desea bloquear solicitudes de inicio de sesión SSH extranjeras de fuentes desconocidas por razones de seguridad, o su empresa tiene derechos de distribución de videos en línea para que solo se puedan distribuir a países específicos, o debido a la política de restricción geográfica de su empresa, necesita para evitar que su servidor local cargue documentos en sistemas de almacenamiento remotos en la nube fuera de EE. UU.

Todos estos casos de uso requieren la instalación de firewalls para filtrar el tráfico país por país. Hay varias formas de hacer esto. Por ejemplo, puede utilizar contenedores TCP para aplicaciones individuales como SSH, NFS y mon libtext-csv-xs-perl pkg-config

- Instalar paquetes dependientes en CentOS, RHEL o Fedora

CentOS/RHEL 6 requiere que se instale primero el repositorio EPEL (para perl-Text-CSV_XS).

$ sudo yum install gcc-c make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS

Compila e instala Xtables-addons

Descargue el último código fuente de xtables-addons del sitio web oficial () y compílelo/instale como se muestra a continuación.

$wget /project/xtables-addons/Xtables-addons/xtables-addons

-2.10.tar.xz

$ tar xf xtables-addons- 2.10.tar.xz

$ cd xtables-addons-2.10

$ ./configure

$make

$ sudo make install

Tenga en cuenta: si SELinux está habilitado de forma predeterminada en sistemas basados ​​en Red Hat (CentOS, RHEL, Fedora), es necesario ajustar la política de SELinux de la siguiente manera. De lo contrario, SELinux impedirá que iptables cargue el módulo xt_geoip.

$ sudo chcon -vR --user=system_u /lib/modules/$(uname -r)/extra/*.ko

$ sudo chcon -vR --type= lib_t /lib64/xtables/*.so

Instalación de la base de datos GeoIP para Xtables-addons

El siguiente paso es instalar la base de datos GeoIP, que xt_geoip utilizará para el mapeo de IP a países. . Para mayor comodidad, el paquete de código fuente xtables-addons contiene dos scripts auxiliares que se pueden usar para descargar la base de datos GeoIP de MaxMind y convertirla a un formato binario reconocido por xt_geoip. Estos scripts se encuentran en la carpeta geoip dentro del paquete fuente. Siga las instrucciones a continuación para crear e instalar la base de datos GeoIP en su sistema.

$ cd geoip

$ ./xt_geoip_dl

$ ./xt_geoip_build GeoIPCountryWhois.csv

$ sudo mkdir -p /usr/ share/xt_geoip

$ sudo cp -r {BE,LE} /usr/share/xt_geoip_dl

$ ./usr/share/xt_geoip

Reclamaciones de MaxMind Su base de datos GeoIP tiene una tasa de precisión de 99,8 y se actualiza mensualmente. Para asegurarse de que su base de datos GeoIP instalada localmente esté actualizada, debe configurar una tarea programada mensual para actualizar la base de datos GeoIP local una vez al mes.

Bloquear el tráfico de red desde o hacia un país

Una vez que haya instalado el módulo xt_geoip y la base de datos GeoIP, puede usar inmediatamente la opción de coincidencia de geoip en el comando iptables.

$ sudo iptables -m geoip --src-cc país[, país...] --dst-cc país[, país...]

Lo que quieres Los países del bloque se designan utilizando códigos ISO3166 de dos letras, como EE. UU. (Estados Unidos), CN (China), IN (India) y FR (Francia).

Por ejemplo, si desea bloquear el tráfico entrante desde Yemen (YE) y Zambia (ZM), utilice el siguiente comando de iptables.

$ sudo iptables -I INPUT -m geoip --src-cc YE,ZM -j DROP

Si desea bloquear el tráfico saliente con destino a China (CN), simplemente ejecute el siguiente comando.

$ sudo iptables -A OUTPUT -m geoip --dst-cc CN -j DROP

También puedes pasar "--src-cc " o "--dst-cc Agregue "!" antes de "" para "cancelar" la condición coincidente. Por ejemplo:

Si desea bloquear todo el tráfico entrante fuera de EE. UU. en su servidor, puede ejecutar el siguiente comando:

$ sudo iptables -I INPUT -m geoip ! --src-cc US -j DROP

Para usuarios de Firewall-cmd

Algunas distribuciones (como CentOS/RHEL 7 o Fedora) han reemplazado iptables con el servidor de firewall predeterminado firewalld. En dichos sistemas, también puede usar xt_geoip para bloquear el tráfico usando firewall-cmd. Los tres ejemplos anteriores se pueden reescribir de la siguiente manera usando firewall-cmd.

$ sudo firewall-cmd --direct --add-rule filtro ipv4 ENTRADA 0 -m geoip --src-cc YE, ZM -j DROP

$ sudo firewall-cmd --direct --add-rule filtro ipv4 SALIDA 0 -m geoip -dst-cc CN -j DROP

$ sudo firewall-cmd --direct --add-rule filtro ipv4 ENTRADA 0 -m geoip ! --src-cc US -j DROP

Conclusión

En este tutorial presenté iptables/xt_geoip, una forma de filtrar paquetes de red según el país de origen/destino. Método simple. Si es necesario, puedes implementar esta útil arma en tu sistema de firewall. Finalmente, me gustaría advertir a todos: el filtrado de tráfico basado en GeoIP no es una forma infalible de bloquear ciertos países en su servidor. La base de datos GeoIP es intrínsecamente inexacta/incompleta, y es fácil falsificar el país de origen/destino si se utiliza una VPN, Tor o cualquier host de retransmisión comprometido. El filtrado basado en geolocalización puede incluso bloquear el tráfico legítimo que, en primer lugar, no debería prohibirse. No es demasiado tarde para comprender esta limitación antes de decidir implementarla en su entorno de producción.