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.
No hay comentarios:
Publicar un comentario