Mikrotik¶
Acercamiento¶
El dispositivo físico¶
En el aula contaremos con un Mikrotik hAP lite por alumna/o:

Diagrama¶
El mismo sigue el siguiente diagrama de bloques:

Primer acceso¶
Para acceder por primera vez al mismo tendremos que utilizar la aplicación WinBox que podéis descargar aquí.

La primera vez nos conectaremos por MAC.
Por defecto, el usuario es admin y el password está en blanco.
La interfaz de nuestro equipo caerá, por lo que tendremos que ponerla en modo estático con cualquier IP válida del rango privado.
El motivo de caer la interfaz es que el dispositivo no tiene ningún servidor DHCP.
Securizando¶
Comenzaremos creando un nuevo usuario y desactivando el admin.
Si preferimos, podemos utilizar la New Terminal:
# Creamos usuario:
/user add name=myname password=mypassword group=full
# Desabilitamos admin:
/user disable admin
# O si preferimos lo eliminamos:
/remove user admin
# Y vemos resultado:
/user print
# Establecer contraseña:
/user set 1 password="!={Ba3N!"40TуX+GvKBz?jTLIUcx/,"
Donde el número 1 deberá sustituirse por el id de usuario arrojado por el comando /user print.
SSH¶
SSH (o Secure SHell) es el nombre de un protocolo y del programa que lo implementa cuya principal función es el acceso remoto a un servidor por medio de un canal seguro en el que toda la información está cifrada. Además de la conexión a otros dispositivos, SSH permite copiar datos de forma segura (tanto archivos sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir contraseñas al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH y también puede redirigir el tráfico del (Sistema de Ventanas X) para poder ejecutar programas gráficos remotamente. El puerto TCP asignado es el 22.
SSH trabaja de forma similar a como se hace con telnet.
Fuente: Wikipedia
Versión 6.x¶
Dadas las limitaciones de la versión 6, relajaremos la seguridad permitiendo el acceso con password desde la terminal de winbox con el comando:
[usuario@MikroTik] > /ip ssh set always-allow-password-login=yes
Después, podemos entrar desde la terminal de GNU/Linux o Mac con:
ssh -oHostKeyAlgorithms=+ssh-rsa usuario@192.168.88.1
Desde Powershell:
ssh -o HostKeyAlgorithms=+ssh-rsa -o MACs=+hmac-sha1 usuario@192.168.88.1
Si hemos podido acceder, podremos salir con el comando:
[usuario@MikroTik] > /quit
Versión 7.x¶
Para activarlo en el equipo deberemos:
- Crear un par de llaves público-privadas RSA (ver vídeo)
- Copiar llave pública al dispositivo
File-Upload - Asociar a un usuario en menú
UserList-SSH Keys - Acceso desde terminal
ssh usuario@ip_del_mikrotik
Problemas típicos¶
A veces podemos encontrarnos con el siguiente mensaje:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:/I62FFxfkrDjW5DxENiNGgBhCNoyslHO+89tAmwUonI.
Please contact your system administrator.
Add correct host key in /home/usuario/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/usuario/.ssh/known_hosts:159
remove with:
ssh-keygen -f "/home/usuario/.ssh/known_hosts" -R "192.168.88.1"
Host key for 192.168.88.1 has changed and you have requested strict checking.
Host key verification failed.
El cliente SSH nos está informando que el fingerprint (huella dactilar) del equipo al que nos queremos conectar NO coincide con el que tenemos almacenado para dicha ip por lo podríamos estar ante un caso de ataque de man-in-the-middle.
Si hemos cambiado de equipo al que nos estamos conectando o lo hemos devuelto a valores de fábrica es normal que cambie el fingerprint por lo que simplemente borraremos el fingerprint almacenado previamente y podremos acceder.
Para borrarlo, sólo tenemos que seguir las indicaciones que nos ofrecen ssh-keygen -f "/home/usuario/.ssh/known_hosts" -R "192.168.88.1"
Obtener fingerprint almacenados¶
Nuestro equipo almacena en ~/.ssh/known_hosts los fingerprint de todos los equipos a los que nos hemos conectado anteriormente.
Podemos consultarlo desde bash o powershell con el comando cat ~/.ssh/known_hosts. En cada línea aparece por columanas:
- La IP o FQDN^(1)^ del dispositivo al que nos hemos conectado.
- Tipo de cifrado (rsa, ed25519, etc)
- La public-key.
Si deseamos capturar el fingerprint del dispositivo, deberemos borrar la entrada correspondiente al mismo.
^(1)^ FQDN son las siglas de Fully Qualified Domain Name o en español Nombre completo del equipo.
Exportación de configuración¶
Podemos exportar la configuración como archivo mediante el comando /export terse o generar un fichero de backup.
También podemos invocarlo directamente desde la terminal de Powershell o bash con el comando:
ssh -oHostKeyAlgorithms=+ssh-rsa usuario@192.168.88.1 "/export hide-sensitive terse" > configuracion.rsc`
Podemos obtener una versión más completa con:
ssh -oHostKeyAlgorithms=+ssh-rsa usuario@192.168.88.1 "/export verbose terse" > configuracion.rsc`
Como tarda y podemos ponernos nerviosos si no vemos el avance, podemos añadir el argumento -v para que el comando ssh nos indique el progreso, esto es ssh -v -o....
Nota: Recuerda que las contraseñas están en el archivo por lo que custódialo adecuadamente.
Desabilitando servicios¶
Ya que no usaremos los servicios telnet, ftp, api y api-ssl los desabilitaremos en el menú IP-servicios o con los comandos:
/ip service set telnet disabled=yes
/ip service set ftp disabled=yes
/ip service set api disabled=yes
/ip service set api-ssl disabled=yes
NTP¶
Cliente NTP¶
Pongamos en hora el equipo con System-NTP Client o los comandos para Routeros 6:
/system ntp client set enabled=yes primary-ntp=212.227.145.233 secondary-ntp=162.159.200.123 server-dns-names=1
.1.1.1
O en Routeros 7:
/system ntp client set enabled=yes
/system ntp client servers add address=0.debian.pool.ntp.org
/system ntp client servers add address=1.debian.pool.ntp.org
/system ntp client servers add address=2.debian.pool.ntp.org
/system ntp client servers add address=3.debian.pool.ntp.org
Servidor NTP¶
Ofrece sincronización horaria a los clientes.
Dado que NO es compatible con nuestro equipo no lo utilizaremos, pero aquí tenemos una muestra si queremos jugar con GNS3 ntp server
Además, por lo general deberemos crear la regla adecuada en el firewall
Direcciones¶
Estáticas¶

DHCP Client¶

DHCP Server¶
==REVISAR==

Switch y bridges¶

Los dispositivos Mikrotik suelen llevar un chip dedicado para la conmutación que se asocia al primer bridge del dispositivo.
Concretamente el MT-hAP-lite lleva el chip Atheros8227 con capacidad para 1024 host-table, 4096 vlan-table y 32 rule-table, así como port mirroring y por supuesto port switching.
Redes cableadas - Ethernet¶
Cliente PPPoE¶
El Protocolo Punto-a-Punto “over” Ethernet -PPPoE- es un protocolo de enlace (L2) que premite autenticar a usuarios/abonados y asignación dinámica de IP.
Es ampliamente utilizado por ISP (Provedores de Servicio de Internet).
Ejemplo de configuración:


O vía CLI:
/interface vlan add interface=ether1 name=INTERNET vlan-id=100
/interface pppoe-client add add-default-route=yes comment=Lowi disabled=no interface=INTERNET name=pppoe-lowi password=XXXX user=YYYY@lowi
El proveedor de internet Lowi proporciona la conexión encapsulada en la VLAN 100 por lo que tenemos que crear primero dicha interfaz y luego autenticarnos mediante el protocolo PPPoE usando la interfaz INTERNET creada para desencapsular la conexión.
Obtención de credenciales PPPoE¶
Servidor PPPoE¶
Redes inalámbricas - Wifi¶
Perfil de seguridad:

Interfaz Wifi:

Compartir internet¶
En Mikrotik¶
Algunos, pese a tener conexión wifi al dispositivo, no podéis salir a interner y eso es porque nos falta que el dispositivo “comparta” la conexión mediante una regla del firewall que active el NAT.
La regla la podéis activar simplemente ejecutando el comando:
/ip firewall nat add action=masquerade chain=srcnat comment="defconf: masquerade" ipsec-policy=out,none out-interface-list=WAN !to-addresses !to-ports
O con Winbox:

En GNU/Linux¶
En GNU/Linux podemos compartir la conexión de la interfaz NAT de nuestra MV hacia la interfaz bridge, con lo que podríamos dar enrutamiento hacia internet al router MT y con ello probar nuestro access point -AP- que hemos generado con nuestra nueva conexión Wifi.
Para ello, suponiendo la interfaz eth0 como la que tiene conectividad a internet y la eth1 la que realizará de conexión interna:
Habilitar el reenvío de IP (IP Forwarding): para permitir que el núcleo reenvíe tráfico entre interfaces ejecuta:
sudo sysctl -w net.ipv4.ip_forward=1
Configurar Masquerade con Iptables: Sustituye eth0 por tu interfaz de internet (salida) y ejecuta:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Permitir las conexiones salientes:
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Permitir las conexiones entrantes establecidas:
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
Para hacerla persistente consulta aquí
Wifi invitados¶
Tendremos varias formas de obtener el objetivo.
Bridge + dhcp¶
- Crear
bridgeWifi - Meter
wlan1en elbridgeWifi.
Opcional meter alguna otra interface cableada.
3. Crear un pool y dhcp para el bridge - poolWifi
4. Conectar
Opcional: Para mejorar la seguridad podemos meter una regla de firewall que bloquee las conexiones desde poolWifi a poolLan
Subredes + dhcp + firewall¶
Bridge + firewall¶
Esta opción nos permite meter en el bridge de invitados puntos cableados con lo que podríamos tener APs completos de invitados.
Portal cautivo¶
Cuando tengamos un bridge, en nuestro caso bridgeLan, con un servidor DHCP que sirva configuraciones a los clientes podremos pasar a crear un hostpot con portal cautivo.
Fuente: Leo Valero
1. Crear nuevo AP¶
Comenzamos creando un nuevo AP (virtual) con seguridad con el perfil abierto por defecto con nombre “Mikrotik-Portal-Nombre”.

2. Crear hostpot¶
Creando un hostpot en IP-hostpot:

3. Perfiles de servidor¶
Después en Server Profiles no tenemos que cambiar nada, pero sí mirar el directorio HTML, normalmente directorio “hostpot”
4. Perfiles de usuario¶
A continuación, configuraremos el User Profiles:

5. Crear usuario/os¶

Nota: Si necesitamos verificar el password podemos usar ⚙️ -Settings para activar o no hide-password.
6. Probar¶
Ahora para probarlo nos conectaremos al hostpot y abriremos en el navegador cualquier dirección http, sin la s.
Si ésto no abre la consola de login lo intentaremos con la IP del router, por ejemplo http://172.16.X.1
Repetidor - WDS¶
Existen muchos modos de realizarlo. Comenzaremos por el más sencillo, el WDS dinámico.
Se realizará por parejas y se configurarán un dispositivo AP-Bridge (para ser un AP multipunto) y una estación (el cliente).
Vídeos:
Wifi mesh¶
Similar al anterior, pero más moderno es el protocolo conocido como mesh:
Servicios avanzados¶
Reenvío de puertos¶
Los puertos públicos los reenviamos a un host concreto de nuestra LAN:
# Servidor Nginx en puerto 80:
/ip firewall nat add action=dst-nat chain=dstnat comment=HTTP_FOR_NGINX dst-port=80 in-interface=pppoe-lowi protocol=tcp to-addresses=192.168.1.10 to-ports=80
# Servidor DNS con protocolo UDP:
/ip firewall nat add action=dst-nat chain=dstnat comment=UDP53 dst-port=53 in-interface=pppoe-lowi protocol=udp to-addresses=192.168.1.10 to-ports=53
NAT¶
Realizaremos una NAT de nuestra red privada a la ip pública.
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether1
Firewall¶
Podemos emplear el dispositivo como filtro de capas 2, 3 y 7:
# Incrementamos velocidad de proceso y reducimos carga de trabajo:
/ip firewall filter add action=accept chain=forward comment="Aceptamos las conexiones que ya se han verificado o solicitado (esblecido y relacionado)" connection-state=established,related
# Filtrar todo para un destino
/ip firewall filter add action=drop chain=forward comment="Drop destino marca" dst-address=34.147.120.111
# Filtro capa 7 según expresión regular:
/ip firewall layer7-protocol add name=marca regexp="^.*marca.*\$"
# Aplicamos filtro anterior
/ip firewall filter add action=drop chain=forward comment="Filtra marca -> Ojo con DNS de firefox" disabled=yes layer7-protocol=marca src-address=192.168.1.0/24
# Filtro por protocolo
# Podemos añadir origen, destino, etc...
/ip add action=drop chain=input protocol=icmp
/ip add action=accept chain=input protocol=tcp src-port=80
El orden en el que aplicamos los filtros es MUY importante. Cuando un paquete encaja con un filtro, se ejecuta la acción y NO se comprueban mas filtros.
Por ejemplo, en los dispositivos MT-hAP-lite viene configurada una regla que acepta icmp, por lo que si añadimos otra que lo rechaza, sólo le hará caso si es anterior a la de aceptar.
Buenas prácticas¶
Por lo general, cuando tratamos temas de firewall lo normal es trabajar con la seguridad por defecto, esto es, todo prohibido excepto aquello permitido explícitamente.
Y ¿cómo llevamos esto a un firewall?
Pues añadiendo la regla de bloquear TODO al final. Puesto que las reglas se comprueban de arriba a abajo, si una regla coincide se ejecuta la acción y si no y se bloquea todo lo demás.
VPN¶
Virtual Private Network -VPN- nos permite conectar 2 o más puntos de forma segura.
- VPN capa 2: l2tp
- VPN capa 3: [Wireguard] (sólo RouterOS 7)
- VPN capa 2 o 3: OpenVPN. Válido en RouterOS 6 y posterior, pero configuración más compleja que las anteriores. Permite autenticación en 2 pasos.
Otros tips¶
Backups¶
Generar¶
Generar backup /system backup save name=NombreDelBackup dont-encrypt=yesSaving system configuration
Restaurar¶
O por comandos:
# Subimos el archivo
scp -oHostKeyAlgorithms=+ssh-rsa nombreDelBackup.backup usuario@192.168.88.1:
# Lo restauramos:
/system backup load name=nombreDelBackup.backup
Restaurar configuración rsc¶
Ya vimos como guardar un fichero de configuración legible. Ahora vamos a cargarlo:
/import file-name=configuracion-completa.rsc
Para ello primero deberemos subir el archivo con File-File-list y a la derecha pulsamos sobre Upload...
Alias de interfaz¶
A veces no queremos perder la conexión a internet por lo que podemos crear un alias a una interfaz y asignarle una IP que nos permita modificar la configuración sin desconectarnos de internet:
En GNU/Linux:¶
#!/bin/bash
# Suponemos que la interfaz es eth0 (podría ser enp3s0 o cualquier otra)
DEV='eth0'
IP='192.168.88.10/24'
ALIAS_DEV='elAlias'
# Añadimos alias de interfaz
sudo ip link add $ALIAS_DEV link "$DEV" type macvlan mode bridge
# Asignamos IP a la nueva interfaz
sudo ip a add "$IP" dev $ALIAS_DEV
# La levantamos
sudo ip link set $ALIAS_DEV up
# Mostramos el resultado
ip a show $ALIAS_DEV
Reset Configuration¶
Software¶
Mediante el menú System-Reset Configuration con las opciones:
Keep Users: mantiene usuarios y passwordsCAPS Mode: para gestión centralizada de wifi. Nosotros no lo usaremos.No Default Configuration: nos devolverá un equipo limpio completamente. Ideal si queremos aplicar una configuración nuestra guardada.Do Not Backup: no guarda backup, por lo que restaura la versióndefaultde configuración.Run After Reset: tras arrancar carga el script de restauración deseado.
Fuente: sin cables
Hardware¶
Cuando lo anterior no funciona tendremos que proceder al reset mediante el botón físico.
El procedimiento:
- Desenchufar el equipo
- Esperar 10 segundos
- Pulsar botón de reset
- Enchufarlo
- Esperar a que comienze a parpadear el led
- Soltar
La configuración posterior dependerá de los segundos que tuvimos presionado el botón de reset por lo que es un poco impredecible. De todas formas no reiniciará el usuario admin y pass en blanco, por lo que es justo lo que necesitamos para hacer un soft-reset.
Desde cero¶
Configuración básica:¶
- Creación de listas de interfaces
WANyLAN. - Creación de las listas.
- Añadir interfaces a ellas. No es obligatorio, pero simplifica todo.
- Creación de un bridge:
- Crear bridge (
bridgeLan) - Añadir la lista de interfaces
LAN➡️ añadirá dinamicamente las interfaces de la lista al bridge. - Direcciones internas:
- Crear un pool de direcciones
- Asignar una ip del pool al bridge de forma estática
- Crear un servidor dhcp al bridge con el pool creado. Se recomienda dejar algunas IPs para equipos estáticos (servidores, impresoras, etc).
- Obtener ip “pública” en la interfaz WAN mediante cliente dhcp
- Permitir enrutamiento entre interfaces mediante firewall
source natsalida lista de interfaces WAN, acciónmasquerade.
Simulación¶
Para realizar pruebas de laboratorios con Mikrotik tenemos 3 opciones:
- MV con RouterOS: Sencillo, nos descargamos la imagen y la corremos dentro de nuestro hipervisor de referencia: vbox, vmware o hyper-v entre otros.
- GNS3 + MV con RouterOS: GNS3 está disponible como aplicación, como MV e incluso como contenedor docker. Una vez funcionando podremos importar a nuestro laboratorio las MV disponibles en nuestro hipervisor, incluído RouterOS.
- Docker con QEMU con RouterOS o 2: donde tendremos algo similar al punto 1, pero set-of-the-box, el primero con acceso con VNC y ssh, y el segundo con winbox, webfig y ssh.
Fuentes¶
- Primera configuración - Oficial MT y Wiki.
- Blog de Lázaro.
- Raúl Prieto Fernández:
- AlexarizaNet: