Ir al contenido

Listas del firewall

install añade la veth a una lista de interfaces y la /30 del contenedor a una address-list, para que las reglas raw de descarte de un cortafuegos MikroTik dejen pasar las respuestas del agente. Nombra las listas que usan tus reglas con --iface-list y --addr-list, o none cuando ninguna regla las necesita. Sin --expose, install no escribe ninguna regla de cortafuegos.

La guía Building Advanced Firewall de MikroTik añade reglas raw comentadas defconf:. Dos de ellas descartan en silencio cada paquete que envía un contenedor nuevo:

Regla Descarta un paquete que Un contenedor nuevo cae porque Qué lo deja pasar
drop the rest, in-interface-list=!LAN entra por una interfaz fuera de la lista LAN su veth no está en ninguna lista la veth en LAN: --iface-list
drop local if not from default IP range, src-address-list=!LANs viene de una dirección fuera de la address-list LANs su /30 no está en ninguna address-list la /30 en LANs: --addr-list
la misma regla escrita src-address=!192.168.88.0/24 viene de una dirección fuera de ese rango su /30 está fuera del rango ninguna lista: añade antes una regla de aceptación para in-interface=<veth>, o elige una --subnet dentro del rango

El descarte es silencioso. Desde tu máquina el agente no responde, y eso se ve igual que un contenedor que no está en marcha; por eso el sondeo tras install pregunta al router si el contenedor está en marcha antes de sugerir nada más (Acceso por red).

Otras reglas de descarte en raw, input o forward pueden descartar el tráfico del contenedor en otro punto. install no añade nada para ellas más allá de las dos pertenencias; la comprobación de trampas de doctor las lee y nombra la regla.

Con las listas por defecto, install escribe estas dos entradas:

Paso Orden Se omite con
pertenencia a interface-list /interface/list/member/add list="LAN" interface="veth-mikroscope" comment="mikroscope:mikroscope (managed by mikroscope)" --iface-list none
pertenencia a address-list /ip/firewall/address-list/add list="LANs" address=172.30.10.0/30 comment="mikroscope:mikroscope (managed by mikroscope)" --addr-list none
  • Las dos llevan la etiqueta. uninstall quita cada una por la etiqueta, la lista y el miembro.
  • La lista de interfaces tiene que existir. La address-list no: su primera entrada la crea, y uninstall quita la entrada.
  • Con las dos pertenencias, una máquina de la LAN llega al agente directamente a través del router (verificado).

Una pertenencia no se limita a mikroscope. Cualquier otra regla de tu router que case con la lista de interfaces LAN o con la address-list LANs casa también con el tráfico del contenedor, mientras esté instalado. Lee tus propias reglas teniéndolo en cuenta.

Pasa las listas que usan tus reglas de descarte:

Opción Variable Por defecto Admite Nombra
--iface-list MIKROSCOPE_IFACE_LIST LAN ^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$ o none; no las listas integradas de RouterOS all, dynamic ni static la lista que usa tu regla de descarte in-interface-list=!…
--addr-list MIKROSCOPE_ADDR_LIST LANs ^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$ o none la lista que usa tu regla drop local if not from default IP range
Ventana de terminal
mikroscope install --iface-list MYLAN --addr-list MYNETS

Una lista de interfaces integrada no admite miembros, así que --iface-list static se detiene antes de la primera conexión:

mikroscope: iface-list "static" is a RouterOS built-in list, which takes no member: name the list your firewall's in-interface-list=!… drop rule uses, or none to join no list

status, upgrade y uninstall leen las listas de la instalación que hay en el router, así que no necesitan ninguna opción de listas. Una opción de listas que contradice la instalación se rechaza, nombrando los dos valores (Forma de la instalación).

Un router sin ninguna regla que descarte por lista no necesita ninguna de las dos pertenencias. Omítelas:

Ventana de terminal
mikroscope install --iface-list none --addr-list none

doctor te dice cuándo es así: su comprobación de trampas termina con they would pass with no list membership as well, y una lista de interfaces que falta se informa con --iface-list none como primera solución:

MISSING interface list LAN exists (found=0)
fix: --iface-list none: no firewall rule here needs the veth in an interface list. Or create it: `/interface/list/add name=LAN`

doctor, solo o dentro de install, comprueba las listas y después sigue las respuestas del agente a través de tu cortafuegos:

Las comprobaciones que ejecuta doctor
Comprobación, tal como se imprimePasa cuandoLa solución que nombra
interface list <list> existsexiste la lista --iface-list (por defecto LAN). Con --iface-list none doctor imprime interface list the veth joins y lo da por bueno: no se escribe ninguna pertenencia--iface-list none si ninguna regla del cortafuegos necesita la veth en una lista (doctor lo ofrece primero en ese caso); si no, /interface/list/add name=…, o pasa la lista que usa tu regla de descarte in-interface-list=!…
address list <list>siempre: install añade la /30 a la lista --addr-list (por defecto LANs), lo que la crea si falta, y uninstall retira la entrada. Con --addr-list none doctor imprime address list the /30 joins. Si alguna regla necesita esa pertenencia lo responde la fila siguienteninguno
no firewall rule drops the agent's repliesdoctor lee todas las reglas activas de las cadenas por las que pasan las respuestas del agente, /ip/firewall/raw prerouting y /ip/firewall/filter forward e input, y recorre cada una como RouterOS, gana la primera que coincide, con las respuestas en las listas a las que se une el plan: ninguna regla las descarta. Un aviso cuando una regla podría hacerlo, porque filtra por algo que doctor no evalúa (un destino, una marca, un límite de tasa), y cuando las respuestas a un equipo de la LAN pasan pero una regla podría descartar las que van al propio router (filter input), que necesita el transporte por relaylas --iface-list y --addr-list que dejan pasar las respuestas; cuando ninguna lista lo consigue (una regla src-address=!<rango>, por ejemplo), añade antes de esa regla una de aceptación para in-interface=<veth>, o elige una --subnet dentro del rango

La comprobación de trampas lee todas las reglas activas de /ip/firewall/raw prerouting y de /ip/firewall/filter forward e input, y recorre cada cadena como RouterOS, por orden, gana la primera que coincide. Las respuestas que sigue entran por la veth, desde la dirección y el puerto del agente, en las listas a las que se une el plan.

Imprime Significa Haz
ok … no rule drops them las respuestas pasan con las pertenencias del plan nada
ok … they would pass with no list membership as well ninguna regla necesita una pertenencia --iface-list none --addr-list none, si no quieres ninguna pertenencia
MISSING … drops them, solución install with --iface-list … --addr-list … una regla descarta las respuestas, y otras listas que nombran las reglas las dejan pasar instala con las listas que nombra la solución
MISSING … drops them, solución … add an accept rule for in-interface=<veth> before it ninguna lista de las que nombran las reglas deja pasar las respuestas, como con una regla src-address=!<rango> añade esa regla de aceptación, o elige una --subnet dentro del rango que nombra la solución
WARN … may drop them la regla filtra por algo que doctor no evalúa: un destino, una marca, un límite de tasa si el agente no responde tras install, mira primero esa regla
WARN … may drop the ones to the router itself las respuestas a una máquina de la LAN pasan, y una regla de filter input podría descartar las que van al router usa el transporte directo; el relay podría no llegar al agente

doctor nombra una regla por su tabla, cadena y número, sus condiciones y su comentario, como en /ip/firewall/raw rule 0 (chain=prerouting action=drop, …) "…". Nunca propone una lista en la que esté el enlace de subida del router, y da por hecho que una address-list distinta de la del plan no tiene ninguna entrada para la /30.

Recorre una regla tal como la aplica RouterOS, que no siempre es como se lee. RouterOS salta una regla que marca como inválida, y una regla que nombra una lista de interfaces que se quitó sigue siendo válida, con el id de la lista en lugar de su nombre, y coincide como si la lista estuviera vacía (Exposición del router).

Dos avisos son sobre el router y no sobre la instalación. No cambian el estado de salida de doctor ni si install sigue adelante, pero un router cuyo cortafuegos no hace lo que parece hacer lleva tráfico que nunca debió llevar, y entonces todos los paneles miden ese tráfico:

Las comprobaciones que ejecuta doctor
Comprobación, tal como se imprimePasa cuandoLa solución que nombra
no firewall rule doctor reads is invalid or names a deleted listun aviso: ninguna regla de raw prerouting ni de filter forward e input está marcada como inválida, que RouterOS salta como si no existiera (nombra una interfaz que se quitó o no está lista, y about dice cuál), y ninguna nombra una lista de interfaces que se quitó, que RouterOS guarda como el id de la lista (in-interface-list=!*2000010) y aplica como una lista vacía. Una regla cambiada un momento antes se lee inválida, sin motivo, hasta que RouterOS la aplicacorrige o quita lo que nombra una regla inválida; vuelve a poner por nombre una lista borrada, porque crear una lista con el mismo nombre no repara la regla. Sin motivo, ejecuta doctor otra vez
the router does not answer DNS from its uplinkun aviso: allow-remote-requests de /ip/dns está apagado, o una regla de raw prerouting o de filter input descarta una consulta UDP al puerto 53 que entra por la interfaz de la ruta por defecto activa, recorrida como en la comprobación de trampas, gana la primera que coincide. Un aviso de que las consultas podrían pasar cuando una regla filtra por algo que doctor no evalúa, una lista de direcciones de origen por ejemplo. IPv6 no se leeuna regla de descarte para el puerto 53 UDP y TCP en el enlace de subida antes de cualquier aceptación que lo coja, o /ip/dns/set allow-remote-requests=no si ningún equipo de la LAN usa el router como resolvedor
  • Una regla que no hace nada, o que hace demasiado. Una regla inválida, que nombra una interfaz que se quitó o no está lista, se salta: una regla de descarte inválida no descarta nada. Una regla cuya lista de interfaces se quitó se lee in-interface-list=!*2000010 y coincide como si la lista estuviera vacía, así que un descarte !LAN que se quede así descarta todo paquete que llega a la cadena input, incluidos el SSH y el Winbox del propio router desde la LAN. Crear una lista con el mismo nombre no la repara: vuelve a poner por nombre la lista de la regla.
  • Un resolvedor abierto. Con allow-remote-requests=yes en /ip/dns, el router responde DNS en cualquier interfaz por la que su cortafuegos deje entrar consultas. doctor sigue una consulta UDP al puerto 53 que entra por la interfaz de la ruta por defecto activa a través de raw prerouting y filter input; cuando ninguna regla la descarta, el router responde DNS para Internet, y los ataques de reflexión que lo encuentran llenan su tabla de conexiones y su CPU. El descarte in-interface-list=!LAN de la cadena input de la configuración por defecto los para.

Los dos se comprobaron contra RouterOS en el laboratorio (Probado en).

Si la veth ya está en la lista de interfaces, o la /30 ya está en la address-list, y esa entrada no lleva la etiqueta de mikroscope, install se detiene en ese paso y lo nombra: el efecto existe, pero mikroscope no lo creó y no lo quitará. Elige otro --veth u otro --subnet, o quita tu entrada a mano si es tuya. uninstall nunca la toca.

Solo --expose escribe reglas de cortafuegos: un dst-nat en la dirección LAN del router y un accept en forward colocado antes del primer drop de forward, los dos etiquetados. uninstall los quita con el resto de la instalación, porque lee en el router que la instalación estaba expuesta. Exponer en la LAN tiene las dos reglas y quién llega al agente a través de ellas.