Cómo activar bloqueo/filtrado de países potencialmente peligrosos para tráfico de entrada desde Internet a nuestra red LAN. También el proceso «inverso» de bloqueo de países del tráfico de salida desde la LAN a Internet. Aplicamos el bloqueo GeoIP en un cortafuegos OPNsense con MaxMind.

Requisitos para bloquear tráfico por GeoIP (geolocalización) en cortafuegos OPNsense

Necesitaremos disponer de un sistema de cortafuegos OPNsense en nuestra organización. En el siguiente tutorial indicamos cómo desplegar un cortafuego OPNsense virtualizado:

Para descargar una base de datos de rangos de IP y su país asociado, podremos usar cualquier proveedor que proporcione este servicio. En este tutorial, usaremos MaxMind, que tiene una versión gratuita, con limitaciones, pero que sirve para gran parte de los escenarios. En el siguiente punto indicamos cómo registrarnos en este servicio y cómo obtener el API key necesario.

Registro gratuito en MaxMind

Para obtener la base de datos de IP y ubicaciones geográficas, usaremos el servicio gratuito MaxMind. Nos registraremos en MaxMind, en GeoLite:

En «Manage license keys», crearemos una clave de licencia, que necesitaremos para el API en OPNSense:

Anotaremos la clave API y el número de usuario, para generar la siguiente URL, que será la que introduzcamos en OPNsense:

https://ID_USUARIO:CLAVE_API_LICENCIA@download.maxmind.com/geoip/databases/GeoLite2-Country-CSV/download?suffix=zip

Configuración de acceso a base de datos GeoIP en OPNsense

Abriremos la consola web de gestión de OPNsense, y accederemos a «Firewall» – «Aliases». En la pestaña «GeoIP settings», en «Url», añadiremos la URL generada anteriormente con el ID de usuario y la clave del API de MaxMind:

Si la URL, el id de usuario y la license key son correctos, en «Total number of ranges» nos mostrará un valor:

Para añadir los países a bloquear, pulsaremos en «Firewall» – «Aliases» y en la pestaña «Aliases». Pulsaremos en añadir:

Indicaremos un nombre para el grupo de países a bloquear en Name y, en Content seleccionaremos los países que queramos bloquear (podemos bloquear continentes enteros marcando el check de la derecha del continente). Si no tenemos servicios web ni recursos que necesiten acceso desde otros países podemos, incluso, bloquear todos los países salvo el nuestro:

En este caso, hemos bloqueando los habituales y considerados más peligrosos: China, Rusia, Corea del Norte, Israel, etc. Pulsaremos en «Apply»:

Aplicar reglas para bloqueo por GeoIP en tráfico de entrada o de salida

En este caso, queremos bloquear posibles intentos de acceso desde Internet a nuestra red, a través de la IP pública, lo que habitualmente se llama «ruido». Hay miles de bots automatizados que realizan intentos de acceso a IP de todo el mundo, para buscar vulnerabilidades y formas de acceder a nuestros equipos. Con este método evitaremos parte de ese «ruido», bloqueando países que no necesitamos que accedan o intenten acceder a nuestros equipos. Para ello, en «Firewall» – «Rules» – «WAN» (normalmente se suele llamar WAN a las reglas de la entrada de Internet, pulsaremos en añadir:

Introduciremos los siguientes datos:

  • Action: Block.
  • Interface: WAN.
  • Direction: in.
  • TCP/IP Version: IPv4.
  • Protocol: any.
  • Source: elegiremos el alias creado de grupo de países a bloquear, en este caso «Paises_Bloqueados».
  • Destination: any.
  • Description: Bloqueo Países peligrosos GeoIP entrante.

Antes de aplicar los cambios, es importante el orden de la regla. Si queremos que actúe la primera, para bloquear cualquier intento de acceso desde los países indicados, antes de que haga cualquier otra comprobación, pondremos esta regla la primera. Para ponerla la primera (si es lo que queremos), marcamos la regla y en la siguiente de más arriba pulsamos en la flecha de mover:

Repetiremos el proceso tantas veces como reglas haya, hasta dejarla la primera. Aplicaremos los cambios pulsando en «Apply changes»:

Es muy recomendable aplicar el mismo proceso para tráfico de salida desde la LAN a Internet (WAN), lo que se conoce como egress traffic. Podemos aplicarlo de dos formas:

  • Crear un Alias con los países de alto riesgo y aplicar una regla de bloqueo (blocklist).
  • Enfoque de denegación por defecto: permitir únicamente el tráfico hacia un grupo reducido de países autorizados (allowlist) y bloquear el resto.

En este caso, hemos optado por el primer enfoque, creando un alias de países a bloquear (continentes enteros como Asia, y países como Rusia, entre otros). Dado que ni nuestra navegación habitual ni los servicios/software que tenemos en los equipos necesitarán acceso a estos países. Aplicamos la regla de bloqueo a este grupo de países en la LAN:

La principal ventaja de aplicar esta medida de seguridad en el cortafuegos es la prevención de comunicaciones C2 (Command and Control). Si un equipo de la red interna se ve infectado, el malware intentará contactar con su servidor maestro para recibir instrucciones o exfiltrar información. Dado que estas infraestructuras atacantes suelen ubicarse en países de alto riesgo, la regla de bloqueo de salida interceptará y registrará (log) la petición, frustrando el ataque y alertando a los administradores sobre la presencia del equipo comprometido.

Revisión de log en OPNsense para análisis del tráfico bloqueado por GeoIP

A partir de este momento, cualquier intento de acceso desde algún país de los no permitidos, será bloqueado.

Podremos consultar que las reglas creadas funcionan. Desde Firewall – Log Files – Live View:

En «filters» podemos acotar los logs que se muestran, introduciendo alguna palabra de las indicadas en la descripción, por ejemplo «geoip»:

Nos mostrará, en tiempo real, los bloqueos se van produciendo. En este caso, tanto de salida como de entrada: