El
objetivo de este post es dar una explicación de cómo funciona el
firewall de un equipo Mikrotik y la sintaxis para realizar algunas
acciones básicas. Lo expuesto aquí es el resultado de los apuntes
que tomé en el curso
de Mikrotik y
de algunas pruebas que hice por mi cuenta.
Funcionamiento
general
El
firewall por defecto lee las reglas de arriba hacia abajo y sale con
la primera que matchea. Se usa la orden passthrough para obligar a
que, luego de cumplirse una regla, se siga con las demás. En su
naturaleza y funcionamiento es muy similar a iptables.
En el siguiente esquema se puede ver cómo se produce el flujo de los
paquetes dentro del firewall.
Firewall
con ejemplos
Connection
tracking: permite visualizar las conexiones en las que interviene
nuestro equipo.
[admin@MikroTik]
> ip firewall connection print
Flags:
S - seen reply, A - assured
#
|
PROTOCOL
|
SRC-ADDRESS
|
DST-ADDRESS
|
TCP-STATE
|
TIMEOUT
|
0
SA
|
tcp
|
192.168.88.4:34838
|
192.168.88.1:23
|
established
|
21h54m32s
|
1
SA
|
tcp
|
192.168.4.254:48101
|
192.168.4.1:8291
|
established
|
23h59m59s
|
2
|
udp
|
192.168.4.1:123
|
163.10.0.84:123
|
|
8s
|
3
SA
|
tcp
|
192.168.4.254:51654
|
192.168.4.1:23
|
established
|
4m59s
|
Reglas
generales
Escritura
de firewall: siempre conviene empezar con las reglas de estado,
para ahorrar procesamiento y acelerar las conexiones ya establecidas
y las relativas.
[admin@MikroTik]
> ip firewall filter add connection-state=established
action=accept chain=input
[admin@MikroTik]
> ip firewall filter add connection-state=related action=accept
chain=input
[admin@MikroTik]
> ip firewall filter add connection-state=invalid
action=drop chain=input
[admin@MikroTik]
> ip firewall filter add protocol=tcp src-port=8291
in-interface=!wlan1 action=accept chain=input comment="DENIEGA
WINBOX DESDE LA WIRELESS"
Aceptar
conexiones VPN:
[admin@MikroTik]
> ip firewall filter add protocol=gre action=accept chain=input
[admin@MikroTik]
> ip firewall filter add protocol=tcp dst-port=1723 action=accept
chain=input comment="ACEPTO CONEXIONES VPN"
Denegar
ping y loguear los intentos de ping:
[admin@MikroTik]
> ip firewall filter add protocol=icmp chain=input action=log
log-prefix="PING DENEGADO"
[admin@MikroTik]
> ip firewall filter add protocol=icmp action=accept
chain=input comment="DENIEGO ICMP"
[admin@MikroTik]
> log print
23:34:12
firewall,info PING DENEGADO input: in:ether1 out:(none), src-mac
00:21:70:fd:e3:25, proto ICMP (type 8, code 0),
192.168.4.254->192.168.4.1, len 64
Uso
de listas
Las
listas contienen direcciones IP para las que podemos tomar
determinadas acciones. De esta manera, mantenemos una única lista de
direcciones y la invocamos en el firewall.
Crear
una lista especificando desde dónde permitimos conexiones SSH
[admin@MikroTik]
> ip firewall address-list add list=ssh-permitido
address=192.168.1.2/32 comment="MAQUINA DEL ADMINISTRADOR"
[admin@MikroTik]
> ip firewall filter add src-address-list=!ssh-permitido
protocol=tcp dst-port=22 action=drop chain=input comment="ACEPTO
SSH DESDE LAS MAQUINAS EN LA LISTA ssh-permitido"
Agregar
IPs a una address-list de forma dinámica: si quiero por ejemplo
guardar todas las IPs que intentaron acceder por WinBox a mi equipo:
[admin@MikroTik]
> ip firewall filter add chain=input
action=add-src-to-address-list protocol=tcp
address-list=acceso-winbox dst-port=8291
[admin@MikroTik]
> ip firewall address-list print
Flags:
X - disabled, D - dynamic
#
|
LIST
|
ADDRESS
|
0
|
acceso-winbox
|
0.0.0.0
|
1
D
|
acceso-winbox
|
192.168.4.254
|
Cadenas
creadas por el usuario
Las
cadenas creadas por el usuario sirven para ordenar el firewall. Por
ejemplo, creo una cadena que se llame virus donde cargo los virus
conocidos. Necesito luego hacer un jump desde la cadena input.
[admin@MikroTik]
> ip firewall filter add dst-port=135-139,445 protocol=tcp
action=drop chain=virus comment="VIRUS DE WINDOWS"
[admin@MikroTik]
> ip firewall filter add chain=input action=jump jump-target=virus
Administración
de reglas
Mover
una regla: por ejemplo, acabo de agregar una regla y por defecto
lo hace al final. Necesito que dicha regla que esta en el lugar 13
pase al 3:
[admin@MikroTik]
> ip firewall filter move 13 3
Protección
contra ataques conocidos
A
continuación se explican algunos ataques conocidos y qué
estrategias pueden implementarse para protegerse contra ellos.
También algunas estrategias para aumentar la seguridad en nuestras
redes.
Bogons
nets
El
grupo CYMRU mantiene
un listado con direcciones de red no asignadas o banneadas. De esta
forma, utilizando sus listas podemos protegernos de ataques que
tengan direcciones no válidas. Lo que se hace es rutear dichas
direcciones a un black hole.
Port
knocking
Port
knocking consiste
en utilizar un preámbulo específico para luego lograr el acceso a
donde necesitamos. Por ejemplo, si queremos acceder por SSH al equipo
podemos definir que desde la IP que deseamos ingresar hagamos un
intento de acceso al puerto 33, luego al 55 y finalmente al 77. Al
cumplir lo anterior entonces abriremos el puerto 22 para esa IP por
un tiempo limitado.
La
forma de implementar el port knocking del ejemplo con Mikrotik es la
siguiente:
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=77 action=add-src-to-address-list
address-list=ssh-permit-temp address-list-timeout=1h
src-address-list=step2
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=55 action=add-src-to-address-list
address-list=step2 address-list-timeout=1m src-address-list=step1
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=33 action=add-src-to-address-list
address-list=step1 address-list-timeout=1m
[admin@MikroTik]
> ip firewall filter add chain=input protocol=tcp dst-port=22
src-address-list=!ssh-permit-temp action=drop
Fuerza
bruta
Para
impedir que, por ejemplo, nos descubran la password del SSH
utilizando fuerza bruta podemos implementar un mecanismo que habilite
sólo tres intentos de acceso y luego bloquee la IP por 10 días:
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=22 action=add-src-to-address-list
address-list=ssh-blacklist address-list-timeout=10d
src-address-list=ssh3
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=22 action=add-src-to-address-list
address-list=ssh3 address-list-timeout=1m src-address-list=ssh2
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=22 action=add-src-to-address-list
address-list=ssh2 address-list-timeout=1m src-address-list=ssh1
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=22 action=add-src-to-address-list
address-list=ssh1 address-list-timeout=1m
[admin@MikroTik]
> ip firewall filter add chain=input protocol=tcp dst-port=22
action=drop address-list=ssh-blacklist
DoS
Los
ataques de DoS se llevan a cabo consumiendo y agotando los recursos
del equipo/red atacado. Existen algunas formas de mitigarlos.
Una
estrategia es utilizar tarpit.
Esto baja la ventana TCP a 0, impidiendo que haya transferencia de
datos pero dejando que se generen las conexiones. El siguiente
ejemplo muestra cómo permitir 19 conexiones simultáneas por IP con
destino al servidor web y aplicar tarpit a partir de la conexión 20.
[admin@MikroTik]
> ip firewall filter add chain=forward dst-address=163.10.0.84
protocol=tcp dst-port=80 action=tarpit connection-limit=20,32
Otra
estrategia que puede realizarse es permitir un máximo de conexiones
nuevas simultáneas. Por ejemplo, la siguiente regla permite 5
conexiones nuevas al mismo tiempo y las restantes las dropea:
[admin@MikroTik]
> ip firewall filter add chain=forward connection-state=new
dst-address=163.10.0.84 protocol=tcp dst-port=80 action=drop
connection-limit=5,32
Notas
sobre rendimiento
Tener
en cuenta que siempre conviene que si hay dos reglas que pueden
resumirse en una se haga, pues es una regla menos para procesar.
Si
no se utiliza el equipo como router conviene deshabilitar el
connection tracking, pues así nos estaríamos ahorrando tiempo de
procesamiento y memoria RAM.
Referencias
e interés
Existen
varios sitios que nos permiten ingresar con un usuario de sólo
lectura a sus routers para verificar la configuración. Dos de ellos
son accesibles vía WinBox con usuarios demo y sin password. Las
direcciones son demo.mikrotikexpert.com y demo2.mt.lv.
Se
puede encontrar también más información sobre tarpit en
un artículo de Security Focus. Finalmente, en la documentación del
RouterOS puede accederse a una explicación sobre el funcionamiento
de la cadena
filter del firewall.
Administración
del firewall en Mikrotik
El
objetivo de este post es dar una explicación de cómo funciona el
firewall de un equipo Mikrotik y la sintaxis para realizar algunas
acciones básicas. Lo expuesto aquí es el resultado de los apuntes
que tomé en el curso
de Mikrotik y
de algunas pruebas que hice por mi cuenta.
Funcionamiento
general
El
firewall por defecto lee las reglas de arriba hacia abajo y sale con
la primera que matchea. Se usa la orden passthrough para obligar a
que, luego de cumplirse una regla, se siga con las demás. En su
naturaleza y funcionamiento es muy similar a iptables.
En el siguiente esquema se puede ver cómo se produce el flujo de los
paquetes dentro del firewall.
Firewall
con ejemplos
Connection
tracking: permite visualizar las conexiones en las que interviene
nuestro equipo.
[admin@MikroTik]
> ip firewall connection print
Flags:
S - seen reply, A - assured
#
|
PROTOCOL
|
SRC-ADDRESS
|
DST-ADDRESS
|
TCP-STATE
|
TIMEOUT
|
0
SA
|
tcp
|
192.168.88.4:34838
|
192.168.88.1:23
|
established
|
21h54m32s
|
1
SA
|
tcp
|
192.168.4.254:48101
|
192.168.4.1:8291
|
established
|
23h59m59s
|
2
|
udp
|
192.168.4.1:123
|
163.10.0.84:123
|
|
8s
|
3
SA
|
tcp
|
192.168.4.254:51654
|
192.168.4.1:23
|
established
|
4m59s
|
Reglas
generales
Escritura
de firewall: siempre conviene empezar con las reglas de estado,
para ahorrar procesamiento y acelerar las conexiones ya establecidas
y las relativas.
[admin@MikroTik]
> ip firewall filter add connection-state=established
action=accept chain=input
[admin@MikroTik]
> ip firewall filter add connection-state=related action=accept
chain=input
[admin@MikroTik]
> ip firewall filter add connection-state=invalid
action=drop chain=input
[admin@MikroTik]
> ip firewall filter add protocol=tcp src-port=8291
in-interface=!wlan1 action=accept chain=input comment="DENIEGA
WINBOX DESDE LA WIRELESS"
Aceptar
conexiones VPN:
[admin@MikroTik]
> ip firewall filter add protocol=gre action=accept chain=input
[admin@MikroTik]
> ip firewall filter add protocol=tcp dst-port=1723 action=accept
chain=input comment="ACEPTO CONEXIONES VPN"
Denegar
ping y loguear los intentos de ping:
[admin@MikroTik]
> ip firewall filter add protocol=icmp chain=input action=log
log-prefix="PING DENEGADO"
[admin@MikroTik]
> ip firewall filter add protocol=icmp action=accept
chain=input comment="DENIEGO ICMP"
[admin@MikroTik]
> log print
23:34:12
firewall,info PING DENEGADO input: in:ether1 out:(none), src-mac
00:21:70:fd:e3:25, proto ICMP (type 8, code 0),
192.168.4.254->192.168.4.1, len 64
Uso
de listas
Las
listas contienen direcciones IP para las que podemos tomar
determinadas acciones. De esta manera, mantenemos una única lista de
direcciones y la invocamos en el firewall.
Crear
una lista especificando desde dónde permitimos conexiones SSH
[admin@MikroTik]
> ip firewall address-list add list=ssh-permitido
address=192.168.1.2/32 comment="MAQUINA DEL ADMINISTRADOR"
[admin@MikroTik]
> ip firewall filter add src-address-list=!ssh-permitido
protocol=tcp dst-port=22 action=drop chain=input comment="ACEPTO
SSH DESDE LAS MAQUINAS EN LA LISTA ssh-permitido"
Agregar
IPs a una address-list de forma dinámica: si quiero por ejemplo
guardar todas las IPs que intentaron acceder por WinBox a mi equipo:
[admin@MikroTik]
> ip firewall filter add chain=input
action=add-src-to-address-list protocol=tcp
address-list=acceso-winbox dst-port=8291
[admin@MikroTik]
> ip firewall address-list print
Flags:
X - disabled, D - dynamic
#
|
LIST
|
ADDRESS
|
0
|
acceso-winbox
|
0.0.0.0
|
1
D
|
acceso-winbox
|
192.168.4.254
|
Cadenas
creadas por el usuario
Las
cadenas creadas por el usuario sirven para ordenar el firewall. Por
ejemplo, creo una cadena que se llame virus donde cargo los virus
conocidos. Necesito luego hacer un jump desde la cadena input.
[admin@MikroTik]
> ip firewall filter add dst-port=135-139,445 protocol=tcp
action=drop chain=virus comment="VIRUS DE WINDOWS"
[admin@MikroTik]
> ip firewall filter add chain=input action=jump jump-target=virus
Administración
de reglas
Mover
una regla: por ejemplo, acabo de agregar una regla y por defecto
lo hace al final. Necesito que dicha regla que esta en el lugar 13
pase al 3:
[admin@MikroTik]
> ip firewall filter move 13 3
Protección
contra ataques conocidos
A
continuación se explican algunos ataques conocidos y qué
estrategias pueden implementarse para protegerse contra ellos.
También algunas estrategias para aumentar la seguridad en nuestras
redes.
Bogons
nets
El
grupo CYMRU mantiene
un listado con direcciones de red no asignadas o banneadas. De esta
forma, utilizando sus listas podemos protegernos de ataques que
tengan direcciones no válidas. Lo que se hace es rutear dichas
direcciones a un black hole.
Port
knocking
Port
knocking consiste
en utilizar un preámbulo específico para luego lograr el acceso a
donde necesitamos. Por ejemplo, si queremos acceder por SSH al equipo
podemos definir que desde la IP que deseamos ingresar hagamos un
intento de acceso al puerto 33, luego al 55 y finalmente al 77. Al
cumplir lo anterior entonces abriremos el puerto 22 para esa IP por
un tiempo limitado.
La
forma de implementar el port knocking del ejemplo con Mikrotik es la
siguiente:
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=77 action=add-src-to-address-list
address-list=ssh-permit-temp address-list-timeout=1h
src-address-list=step2
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=55 action=add-src-to-address-list
address-list=step2 address-list-timeout=1m src-address-list=step1
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=33 action=add-src-to-address-list
address-list=step1 address-list-timeout=1m
[admin@MikroTik]
> ip firewall filter add chain=input protocol=tcp dst-port=22
src-address-list=!ssh-permit-temp action=drop
Fuerza
bruta
Para
impedir que, por ejemplo, nos descubran la password del SSH
utilizando fuerza bruta podemos implementar un mecanismo que habilite
sólo tres intentos de acceso y luego bloquee la IP por 10 días:
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=22 action=add-src-to-address-list
address-list=ssh-blacklist address-list-timeout=10d
src-address-list=ssh3
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=22 action=add-src-to-address-list
address-list=ssh3 address-list-timeout=1m src-address-list=ssh2
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=22 action=add-src-to-address-list
address-list=ssh2 address-list-timeout=1m src-address-list=ssh1
[admin@MikroTik]
> ip firewall filter add chain=input connection-state=new
protocol=tcp dst-port=22 action=add-src-to-address-list
address-list=ssh1 address-list-timeout=1m
[admin@MikroTik]
> ip firewall filter add chain=input protocol=tcp dst-port=22
action=drop address-list=ssh-blacklist
DoS
Los
ataques de DoS se llevan a cabo consumiendo y agotando los recursos
del equipo/red atacado. Existen algunas formas de mitigarlos.
Una
estrategia es utilizar tarpit.
Esto baja la ventana TCP a 0, impidiendo que haya transferencia de
datos pero dejando que se generen las conexiones. El siguiente
ejemplo muestra cómo permitir 19 conexiones simultáneas por IP con
destino al servidor web y aplicar tarpit a partir de la conexión 20.
[admin@MikroTik]
> ip firewall filter add chain=forward dst-address=163.10.0.84
protocol=tcp dst-port=80 action=tarpit connection-limit=20,32
Otra
estrategia que puede realizarse es permitir un máximo de conexiones
nuevas simultáneas. Por ejemplo, la siguiente regla permite 5
conexiones nuevas al mismo tiempo y las restantes las dropea:
[admin@MikroTik]
> ip firewall filter add chain=forward connection-state=new
dst-address=163.10.0.84 protocol=tcp dst-port=80 action=drop
connection-limit=5,32
Notas
sobre rendimiento
Tener
en cuenta que siempre conviene que si hay dos reglas que pueden
resumirse en una se haga, pues es una regla menos para procesar.
Si
no se utiliza el equipo como router conviene deshabilitar el
connection tracking, pues así nos estaríamos ahorrando tiempo de
procesamiento y memoria RAM.
Referencias
e interés
Existen
varios sitios que nos permiten ingresar con un usuario de sólo
lectura a sus routers para verificar la configuración. Dos de ellos
son accesibles vía WinBox con usuarios demo y sin password. Las
direcciones son demo.mikrotikexpert.com y demo2.mt.lv.
Se
puede encontrar también más información sobre tarpit en
un artículo de Security Focus. Finalmente, en la documentación del
RouterOS puede accederse a una explicación sobre el funcionamiento
de la cadena
filter del firewall.