Seguridad

Bloquear IPs Maliciosas y Países en MikroTik: Threat Feeds y Geo-Blocking

11 de Julio de 2026·10 min de lectura·Equipo Mikrosinc

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):

  1. Una address-list guarda miles de rangos de IP (ej.: ThreatFeed o GeoBlock).
  2. Una regla de firewall con src-address-list= descarta cualquier paquete cuyo origen esté en la lista.
  3. 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:

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:

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 MikroTikCon Mikrosinc
ActivarScript + scheduler por deviceUn toque en el panel
Parsing de los feedsEn RouterOS (pesado en device pequeño)En el servidor — el device recibe listo
ActualizaciónRecrea la lista enteraSolo lo que cambió (diff): agrega nuevos, elimina viejos
Anti lock-outPor tu cuentaRangos privados/CGNAT filtrados automáticamente
FlotaCopiar el script en cada router1 descarga, distribuida a todos
VisibilidadWinbox, device por deviceEstado, 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