¿Cómo bloquear países completos con FirewallD? 🔒
🚧 Bloquear el acceso hacia servidores por país suele ser una práctica de seguridad relativamente común para quienes administran servidores. Habrá quienes propongan hacerlo con iptables —ya considerado obsoleto— por mera costumbre. La mayoría de las distribuciones Linux actuales utilizan FirewallD que emplea nftables —sucesor de iptables— en combinación con ipset y otras herramientas.
⚠️ Consideración importante: Lo primero será evaluar si el mal comportamiento de un usuario o un incidente específico amerita realmente bloquear todo un país, aunque éste se encuentre geográfica y culturalmente alejado de uno. Bloquear un país completo se considera una práctica de seguridad demasiado agresiva.
🛠️ Procedimientos.
Los procedimientos son relativamente sencillos si se tiene algo de experiencia utilizando FirewallD. La realidad es que hay poca documentación oficial al respecto, pero a continuación presento dos procedimientos basándome sobre el excelente artículo en inglés de IfThenElse en Linode.com, que realmente hace más simples las cosas.
⚠️ NOTA: Todos los procedimientos deben ejecutarse como usuario root.
📋 Preparación del entorno
Por favor, recomendamos leer y practicar primero la configuración y uso de FirewallD como se explica en el siguiente documento hospedado en nuestro sitio:
Procedimiento 1: poner en lista negra bloques de direcciones completos por país.
🌍 Descargue el archivo de bloques de direcciones por país:
wget http://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz
🖥️ Descomprima este archivo en un directorio permanente. Realmente la ruta es poco relevante, pero sugiero utilizar un directorio estandarizado para poder recordar dónde estarán los archivos de zona por país.
mkdir -p /usr/share/local/data-countries
tar zxf all-zones.tar.gz -C /usr/local/share/data-countries
🖥️ Genere una lista negra en FirewallD ejecutando lo siguiente:
firewall-cmd –permanent –new-ipset=blacklist –type=hash:net –option=family=inet –option=hashsize=4096 –option=maxelem=200000
🔍 Parámetros explicados:
–permanent → implica que se trata de un cambio permanente en FirewallD
–new-ipset=blacklist → crea una lista de direcciones IP que se denominará blacklist
–type=hash:net → especifica que el almacenamiento de datos de la lista serán bloques de direcciones
–option=family=inet → especifica que las direcciones serán tipo IPv4, utilice inet6 para IPv6
–option=hashsize=4096 → indica el tamaño inicial de la lista
–option=maxelem → indica el tamaño máximo de la lista, en el ejemplo anterior se definen 200 mil registros
🖥️ Asocie esta lista negra recién creada a la zona drop de FirewallD ejecutando lo siguiente:
firewall-cmd –permanent –zone=drop –add-source=ipset:blacklist
🖥️ NOTA: La zona drop de FirewallD tiene como política predeterminada descartar todas las conexiones.
Recargue configuración de firewalld ejecutando lo siguiente:
firewalld –reload
Elegir un país para añadir a lista negra.
📁 Dentro de /usr/local/share/data-countries estarán los archivos con las las listas de bloques de direcciones por país. Cada país tiene un archivo *.zone usando el código ISO-3166 para el nombre del archivo. Ejemplo: si se quiere bloquear a la Federación Rusa, el archivo que corresponde es ru.zone.
Hay que tomar en cuenta que casi todos estos archivos tienen cientos e incluso miles de líneas, por lo que cargar las listas hará que demore un poco en iniciar o recargar FirewallD. El archivo correspondiente a Federación Rusa…