Bloquear IPs Maliciosas y Países en MikroTik: Threat Feeds y Geo-Blocking
Gran parte de los ataques que un router de borde recibe cada día viene de dos grupos bien identificables: direcciones IP ya conocidas como maliciosas (servidores de botnets, redes secuestradas por criminales) y países desde los que no esperas recibir ninguna conexión. Bloquear ambos en la entrada, antes de que el paquete llegue a tus servicios, reduce drásticamente la superficie de ataque — escaneos, intentos de fuerza bruta y explotación de puertos expuestos caen de forma visible.
RouterOS tiene todo lo necesario: address-lists (listas de IPs) alimentadas automáticamente y una regla de drop que las usa como referencia. En este artículo verás cómo montar esto manualmente en MikroTik — y, al final, por qué hacerlo de forma centralizada y segura con Mikrosinc evita las trampas que esta configuración manual tiene.
El concepto: address-list + regla de drop
La idea es simple y vale para ambos casos (IPs maliciosas y países):
- Una address-list guarda miles de rangos de IP (ej.:
ThreatFeedoGeoBlock). - Una regla de firewall con
src-address-list=descarta cualquier paquete cuyo origen esté en la lista. - Un scheduler descarga la lista actualizada cada cierto tiempo y rehace la address-list.
Todo el trabajo está en mantener la lista actualizada — las fuentes cambian a diario, y una lista vieja protege cada vez menos.
Parte 1 — Bloqueando IPs maliciosas (threat feeds)
Las dos fuentes públicas y gratuitas más usadas son:
- Spamhaus DROP — bloques de red enteros controlados por criminales (lo "peor de lo peor", con falsos positivos bajísimos).
- abuse.ch Feodo Tracker — IPs de servidores de comando y control (C2) de troyanos bancarios y botnets activos (Emotet, Dridex, QakBot, etc.).
1. Regla de firewall que usa la lista
Antes de descargar nada, crea la regla que bloqueará. Queda ociosa hasta que la lista tenga contenido:
# Descarta todo lo que llega DESDE internet desde una IP maliciosa conocida /ip firewall filter add chain=input \ in-interface-list=WAN \ src-address-list=ThreatFeed \ action=drop comment="Drop IPs maliciosas (input)" /ip firewall filter add chain=forward \ src-address-list=ThreatFeed \ action=drop comment="Drop IPs maliciosas (forward)"
Coloca estas reglas justo después de tu accept established,related — así el tráfico legítimo ya establecido ni pasa por la verificación, y el costo es mínimo.
2. Script que descarga y llena la lista
RouterOS descarga el archivo con /tool fetch y un script recorre línea por línea agregando cada IP. Ejemplo para el feed de abuse.ch:
/system script add name=update-threatfeed source={ :do { # descarga la lista (HTTPS exige el CA importado en el device) /tool fetch url="https://feodotracker.abuse.ch/downloads/ipblocklist.txt" \ mode=https dst-path="feodo.txt"; :delay 3s; :local data [/file get feodo.txt contents]; # limpia la lista anterior y recrea /ip firewall address-list remove [find list=ThreatFeed]; :while ([:len $data] > 0) do={ :local pos [:find $data "\n"]; :local line $data; :if ($pos >= 0) do={ :set line [:pick $data 0 $pos]; :set data [:pick $data ($pos+1) [:len $data]] } else={ :set data "" }; # ignora comentarios (#) y líneas vacías :if ([:len $line] > 6 && [:pick $line 0 1] != "#") do={ :do { /ip firewall address-list add list=ThreatFeed address=$line comment=auto } on-error={}; }; }; } on-error={ :log warning "update-threatfeed: fallo al actualizar" }; }
3. Programar la actualización
# Se ejecuta todos los días a las 05:00 /system scheduler add name=sched-threatfeed \ interval=1d start-time=05:00:00 \ on-event="/system script run update-threatfeed"
Para incluir Spamhaus DROP, repite el script apuntando a https://www.spamhaus.org/drop/drop.txt — solo recuerda que su formato es CIDR ; SBLxxxx, así que hay que cortar el texto después del ; antes de agregar.
Parte 2 — Bloqueando por país (geo-blocking)
Para bloquear países enteros sin una base GeoIP de pago, la fuente más usada es ipdeny.com, que publica los rangos de IP agregados por país (derivados de los registradores regionales — ARIN, RIPE, APNIC, etc.). Cada país tiene un archivo: {código}-aggregated.zone.
La mecánica es idéntica a la del threat feed — cambia la URL y el nombre de la lista:
# Descarga los rangos de China (cn) y Rusia (ru) a la lista GeoBlock /system script add name=update-geoblock source={ :foreach cc in={ "cn"; "ru" } do={ :do { /tool fetch url=("http://www.ipdeny.com/ipblocks/data/aggregated/" . $cc . "-aggregated.zone") \ dst-path=($cc . ".zone"); :delay 2s; :local data [/file get ($cc . ".zone") contents]; :while ([:len $data] > 0) do={ :local pos [:find $data "\n"]; :local line $data; :if ($pos >= 0) do={ :set line [:pick $data 0 $pos]; :set data [:pick $data ($pos+1) [:len $data]] } else={ :set data "" }; :if ([:len $line] > 6) do={ :do { /ip firewall address-list add list=GeoBlock address=$line comment=auto } on-error={}; }; }; } on-error={ :log warning ("update-geoblock: fallo en " . $cc) }; }; }
Y la regla de bloqueo — aquí vale una decisión importante:
# Bloquea acceso ENTRANTE desde los países (gestión + port-forwards) /ip firewall filter add chain=input \ in-interface-list=WAN \ src-address-list=GeoBlock \ action=drop comment="Geo-block entrante" # Bloquea solo lo que entra vía port-forward — NO rompe la salida de los clientes /ip firewall filter add chain=forward \ connection-nat-state=dstnat \ src-address-list=GeoBlock \ action=drop comment="Geo-block port-forward"
Cuidado clásico: si descartas forward de forma irrestricta hacia esos países, un cliente que intente abrir un sitio alojado allí (o un servicio legítimo) se quejará de que "el sitio dejó de funcionar". Por eso el enfoque conservador de arriba bloquea solo el tráfico entrante — protección real sin generar tickets.
Las trampas de la configuración manual
Funciona — pero en la práctica, hacer esto a mano en varios routers tiene costos que rara vez aparecen en el tutorial:
- CPU en los equipos pequeños. Recorrer miles de líneas en un script de RouterOS es lento. En un hEX, el threat feed (~1.300 rangos) ya pesa; el geo-blocking, con decenas de miles de líneas por país, puede trabar el procesamiento del device durante el script.
- Recrear la lista entera es pesado. El modo simple (eliminar todo y volver a agregar) procesa la lista completa cada vez, aunque casi nada haya cambiado.
- Riesgo de lock-out. Si el feed viene corrupto o incluye un rango privado por error, puedes bloquearte a ti mismo. Un script ingenuo no filtra los rangos internos/CGNAT antes de aplicar.
- Certificado e internet en el device. Las fuentes HTTPS exigen el CA importado en cada router, además de DNS y salida funcionando.
- No escala. Cada MikroTik descargando las listas por su cuenta significa N veces el ancho de banda y riesgo de rate-limit en las fuentes. Y mantienes el mismo script copiado en decenas de equipos.
La forma Mikrosinc: un clic, centralizado y seguro
Mikrosinc trae esto listo en el módulo de Protección Avanzada (UTM) de cada dispositivo. El servidor descarga y procesa los feeds una vez, y distribuye las listas ya listas a cada router — resolviendo justamente los puntos de arriba:
| Manual en MikroTik | Con Mikrosinc | |
|---|---|---|
| Activar | Script + scheduler por device | Un toque en el panel |
| Parsing de los feeds | En RouterOS (pesado en device pequeño) | En el servidor — el device recibe listo |
| Actualización | Recrea la lista entera | Solo lo que cambió (diff): agrega nuevos, elimina viejos |
| Anti lock-out | Por tu cuenta | Rangos privados/CGNAT filtrados automáticamente |
| Flota | Copiar el script en cada router | 1 descarga, distribuida a todos |
| Visibilidad | Winbox, device por device | Estado, conteo y último sync en el panel |
En la práctica, entras al dispositivo, abres Protección Avanzada y enciendes el Threat Feed o el Bloqueo por País (eligiendo los países en un selector). Mikrosinc aplica las reglas ya protegidas contra edición accidental, sincroniza a diario por diff y muestra el conteo de bloques y el estado del último sync — sin que toques un solo comando de RouterOS.
Las reglas creadas por Mikrosinc quedan marcadas y protegidas contra alteración manual accidental en la pantalla de firewall — quien gestiona la protección es el panel, evitando que alguien rompa el bloqueo sin querer.
¿Prefieres que lo configuremos contigo?
Deja tu contacto — te respondemos por WhatsApp en horario comercial.
Activa la Protección Avanzada en tus MikroTik
Threat feeds y geo-blocking con un clic, actualización automática por diff y reglas protegidas contra alteración accidental — en toda tu flota.
Proteger mis Routers