RouterOS 4.0 estable
Como cuenta Maxi en Mikrotik Expert ha sido publicada la versión estable de la rama 4.0 del RouterOS de Mikrotik. La misma tiene varias novedades que pueden leerse en un pdf descriptivo. Resumo las mismas a continuación:
- Soporte para 802.11n.
- Versiones estables de los paquetes de BGP y MPLS, con numerosas funcionalidades nuevas.
- Virtualización con KVM.
- Cambio en el sistema de licenciamiento.
- Nuevas funcionalidades en términos de switching.
La nueva versión del RouterOS se puede descargar desde la página oficial de Mikrotik. Tener en cuenta que existen varios aspectos importantes que deben conocerse antes de hacer un upgrade. Pueden encontrarse en cualquiera de los tres enlaces que dejé anteriormente,
Winbox en Mac OS X
Para quienes necesiten utilizar Winbox en un entorno operativo Mac OS X aquí van las pautas básicas de qué hacer para que funcione. Las mismas han sido extraídas del portal de MacPorts y de la wiki de Mikrotik.
Los pasos a seguir consisten básicamente en:
- Instalar las Xcode tools: se proveen en el DVD de instalación de Mac OS X como instalación opcional. También es posible descargarlas desde el sitio web de Apple, aunque la primer solución es más rápida.
- Instalar MacPorts: para una instalación sencilla utilizar el paquete de instalación.
- Instalar wine: para hacerlo basta con ejecutar desde la terminal el comando sudo port install wine y esperar a que descargue e instale todas sus dependencias.
- Ejecutar Winbox: en mi caso tengo winbox en mi directorio personal. Entonces, para ejecutarlo: /opt/local/bin/wine /Users/leandro/winbox.exe
- Automatizar la ejecución: luego, es posible descargar un script hecho en automator para guardarlo dentro de la carpeta Aplicaciones y ejecutarlo desde allí. Eso sí, editen primero la ruta para que apunte a la ubicación correcta.
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.
Importante bug en RouterOS 3.25
Leí en Mikrotik Expert que la recientemente lanzada versión 3.25 del RouterOS de Mikrotik presenta un serio bug que puede provocar perder algunos paquetes del sistema e incluso la configuración completa del equipo. Dada la gravedad del problema la gente de Mikrotik decidió retirar dicha versión de su página. El consejo para quienes hayan actualizado es hacer un downgrade a la versión 3.24 mientras se espera que salga la 3.26 solucionando este problema.
Recuperación de password en Mikrotik
Hace un par de meses atrás me hice cargo de una red cuyo router era un equipo Mikrotik. Lógicamente, necesitaba recuperar la contraseña del mismo sin perder la configuración para que todo siguiera funcionando correctamente. Lamentablemente, Mikrotik no provee un procedimiento oficial para llevarlo a cabo por lo cuál decidí correr el riesgo con un procedimiento artesanal que resultó satisfactorio. En este post traduzco el original en inglés, con algunas acotaciones propias de mi experiencia.
Requerimientos
- Cable de consola (serie).
- Servidor DHCP.
- Servidor TFTP.
- Minicom.
- Netcat.
- Herramienta mtbpass.
- Compilador g++.
- Librerías de openssl.
- Kernel OpenWRT.
Tareas
- Bootear el equipo desde la red para cargar el kernel adaptado.
- Enviar el archivo con las password a una computadora.
- Desencriptar las contraseñas en la máquina.
Configuración de Minicom
En mi caso realicé el procedimiento sobre una RB411 con los valores de consola por defecto y utilizando un cable USB to Serial, con lo cual mi configuración es la siguiente:
A - Serial Device : /dev/ttyUSB0 E - Bps/Par/Bits : 115200 8N1 F - Hardware Flow Control : Yes G - Software Flow Control : No
Configuración de DHCP y TFTP
Para la configuración del DHCP editar el archivo /etc/dhcp3/dhcpd.conf. Notar que es importante conservar la red 10.0.0.0/24, ya que la misma está hardcodeada en las imagenes de los kernel.
default-lease-time 21600;
max-lease-time 43200;
option domain-name-servers 10.0.0.1;
option netbios-name-servers 10.0.0.1;
option netbios-node-type 8;
option www-server 10.0.0.1;
authoritative;
allow booting;
allow bootp;
subnet 10.0.0.0 netmask 255.255.255.0
{
option routers 10.0.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
filename "/tftpboot/linuxrc";
range 10.0.0.10 10.0.0.100;
}
Para el servidor TFTP editar el archivo /etc/inetd.conf y establecer el directorio del servidor a /tftpboot.
Copiar la imagen del kernel que corresponda a /tftpboot con el nombre linuxrc.
Bootear con el nuevo kernel
- Conectar el Mikrotik al puerto de consola.
- Conectar el puerto de red principal del Mikrotik al de la computadora.
- Asignar la IP 10.0.0.1/24 a la placa de la computadora.
- Iniciar los servicios de DHCP y TFTP.
Iniciar minicom sin inicialización de módem y prender el Mikrotik.
minicom -o RouterBOOT booter 1.5 RouterBoard 411 CPU frequency: 300 MHz Memory size: 32 MB Press any key within 1 seconds to enter setup
Aquí apretar cualquier tecla rápido, para que muestre el siguiente menú
RouterBOOT-1.5 What do you want to configure? d - boot delay k - boot key s - serial console o - boot device u - cpu mode f - try cpu frequency c - keep cpu frequency r - reset configuration g - upgrade firmware i - board info p - boot protocol t - do memory testing x - exit setup your choice:
Apretar o
your choice: o - boot device Select boot device: e - boot over Ethernet * n - boot from NAND c - boot from CF 1 - boot Ethernet once, then NAND 2 - boot Ethernet once, then CF b - boot chosen device your choice:
En este paso, si:
- El sistema reside en memoria NAND presionar 1.
- El sistema bootea desde CF, entonces presionar 2.
RouterBOOT-1.5 What do you want to configure? d - boot delay k - boot key s - serial console o - boot device u - cpu mode f - try cpu frequency c - keep cpu frequency r - reset configuration g - upgrade firmware i - board info p - boot protocol t - do memory testing x - exit setup your choice: p - boot protocol
Seleccionar aquí DHCP
Choose which boot protocol to use: 1 - bootp protocol * 2 - dhcp protocol your choice: 2 - dhcp protocol
Presionar x para guardar los cambios y reiniciar el equipo.
RouterBOOT-1.5 What do you want to configure? d - boot delay k - boot key s - serial console o - boot device u - cpu mode f - try cpu frequency c - keep cpu frequency r - reset configuration g - upgrade firmware i - board info p - boot protocol t - do memory testing x - exit setup your choice: x - exit setup writing settings to flash... OK RouterBOOT booter 1.5 RouterBoard 411 CPU frequency: 300 MHz Memory size: 32 MB Press any key within 1 seconds to enter setup. writing settings to flash... OK trying dhcp protocol... OK resolved mac address 00:1B:FC:41:BE:43 Gateway: 10.0.0.1 *transfer started ................................ transfer ok, time=1.8s setting up elf image... OK jumping to kernel code [ ... mucha salida propia del kernel ... ] init started: BusyBox v1.4.2 (2008-01-15 11:43:12 CET) multi-call binary Please press Enter to activate this console. PPP generic driver version 2.4.2
Presionar Enter y tendremos una consola de OpenWRT en Mikrotik.
BusyBox v1.4.2 (2008-01-15 11:43:12 CET) Built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M KAMIKAZE (7.09) ----------------------------------- * 10 oz Vodka Shake well with ice and strain * 10 oz Triple sec mixture into 10 shot glasses. * 10 oz lime juice Salute! --------------------------------------------------- root@OpenWrt:/#
Obtener archivo de passwords
Montar la partición NAND en modo sólo lectura para obtener el archivo de passwords. Antes verificar las particiones:
cat /proc/mtd 0x00000000-0x00040000 : "booter" # Para RB411 0x00040000-0x00400000 : "kernel" 0x00400000-0x04000000 : "rootfs" dev: size erasesize name # Para RB532 mtd0: 00400000 00020000 "RouterBoard NAND Boot" mtd1: 07c00000 00020000 "RouterBoard NAND Main"
En el caso de la RB411 hay que montar el dispositivo /dev/mtdblock2 y en el de la RB532 el /dev/mtdblock1.
mount -t yaffs2 -o ro /dev/mtdblock2 /mnt
Ahora hay que enviar el archivo a la computadora. El mismo debería ubicarse en /mnt/nova/store/user.dat o en /mnt/rw/store/user.dat. Para hacerlo:
Correr netcat en la PC:
/bin/netcat -l -p 7878 > user.dat
Enviar el archivo desde el Mikrotik:
cat /mnt/nova/store/user.dat|nc 10.0.0.1 7878
Ahora ya es posible desconectar y apagar el Mikrotik.
Desencripción de passwords
Descomprimir y compilar la herramienta mtpass. Notar que en Debian/Ubuntu es necesario tener instalado ”build-essential” y ”libssl-dev”. Luego ejecutar el binario pasándole como parámetro el archivo de claves.
./mtpass user.dat mtpass v0.3 - MikroTik RouterOS password recovery tool, (c) 2008 by manio Reading file user.dat, 166 bytes long Rec# | Username | Password | Disable flag | User comment -------------------------------------------------------------------------------------------- 1 | admin | secretpass | | system default user




