Skip to content

Mikrotik

Acercamiento

El dispositivo físico

En el aula contaremos con un Mikrotik hAP lite por alumna/o:

mt-hAP-lite

Diagrama

El mismo sigue el siguiente diagrama de bloques:

bloques hAP lite

Primer acceso

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

login

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.

usuario nuevo 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:

  1. Crear un par de llaves público-privadas RSA (ver vídeo)
  2. Copiar llave pública al dispositivo File-Upload
  3. Asociar a un usuario en menú UserList-SSH Keys
  4. 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:

  1. La IP o FQDN^(1)^ del dispositivo al que nos hemos conectado.
  2. Tipo de cifrado (rsa, ed25519, etc)
  3. 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

IP estática

DHCP Client

dhcp client

DHCP Server

==REVISAR==

dhcp server

Switch y bridges

bridge

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:

cliente PPPoE

interfaz asignada creacion de interfaz credenciales PPPoE

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

Tutorial de frikidelto.com

Servidor PPPoE

Servidor PPPoE

Redes inalámbricas - Wifi

Perfil de seguridad:

perfil de seguridad

Interfaz Wifi:

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:

masquerade-nat

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

  1. Crear bridgeWifi
  2. Meter wlan1 en el bridgeWifi.

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

Guía de kibitkin.info.

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:

  1. Keep Users: mantiene usuarios y passwords
  2. CAPS Mode: para gestión centralizada de wifi. Nosotros no lo usaremos.
  3. No Default Configuration: nos devolverá un equipo limpio completamente. Ideal si queremos aplicar una configuración nuestra guardada.
  4. Do Not Backup: no guarda backup, por lo que restaura la versión default de configuración.
  5. 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:

  1. Desenchufar el equipo
  2. Esperar 10 segundos
  3. Pulsar botón de reset
  4. Enchufarlo
  5. Esperar a que comienze a parpadear el led
  6. 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:

  1. Creación de listas de interfaces WAN y LAN.
  2. Creación de las listas.
  3. Añadir interfaces a ellas. No es obligatorio, pero simplifica todo.
  4. Creación de un bridge:
  5. Crear bridge (bridgeLan)
  6. Añadir la lista de interfaces LAN ➡️ añadirá dinamicamente las interfaces de la lista al bridge.
  7. Direcciones internas:
  8. Crear un pool de direcciones
  9. Asignar una ip del pool al bridge de forma estática
  10. Crear un servidor dhcp al bridge con el pool creado. Se recomienda dejar algunas IPs para equipos estáticos (servidores, impresoras, etc).
  11. Obtener ip “pública” en la interfaz WAN mediante cliente dhcp
  12. Permitir enrutamiento entre interfaces mediante firewall source nat salida lista de interfaces WAN, acción masquerade.

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