Trabajo a distancia en la oficina. RDP, Port Knocking, Mikrotik: simple y seguro

En relación con la pandemia del virus covid-19 y la cuarentena universal en muchos países, la única forma de que muchas empresas continúen trabajando es el acceso remoto a los trabajos a través de Internet. Hay muchos métodos relativamente seguros para el trabajo remoto, pero dada la magnitud del problema, necesita un método simple para que cualquier usuario se conecte de forma remota a la oficina y sin la necesidad de configuraciones adicionales, explicaciones, consultas tediosas e instrucciones largas. Este método es el favorito de muchos administradores RDP (Remote Desktop Protocol). Conectarse directamente al lugar de trabajo a través de RDP resuelve idealmente nuestro problema, excepto por una gran mosca en el ungüento: mantener el puerto RDP abierto para Internet es muy inseguro. Por lo tanto, a continuación propongo un método de protección simple pero confiable.imagen

Como a menudo me encuentro con pequeñas organizaciones donde los dispositivos Mikrotik se usan como acceso a Internet, se mostrará a continuación cómo implementar esto en Mikrotik, pero el método de protección Port Knocking se implementa fácilmente en otros dispositivos de clase superior con la misma configuración para el enrutador de entrada y cortafuegos

Brevemente sobre Port Knocking . Una protección externa ideal para una red conectada a Internet es cuando todos los recursos y puertos están cerrados externamente por un firewall. Y aunque un enrutador con un firewall configurado de este modo no reacciona de ninguna manera a los paquetes que vienen del exterior, los escucha. Por lo tanto, puede configurar el enrutador para que cuando reciba una cierta secuencia (código) de paquetes de red en diferentes puertos, este (el enrutador) para IP de donde provienen los paquetes abra el acceso a ciertos recursos (puertos, protocolos, etc.).

Ahora al grano. No haré una descripción detallada de la configuración del firewall en Mikrotik; Internet está lleno de fuentes de alta calidad para esto. Idealmente, un firewall bloquea todos los paquetes entrantes, pero

/ip firewall filter
add action=accept chain=input comment="established and related accept" connection-state=established,related


Permite el tráfico entrante desde conexiones establecidas (relacionadas).
Ahora configure Port Knocking en Mikrotik:

/ip firewall filter
add action=drop chain=input dst-port=19000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=drop chain=input dst-port=16000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=add-src-to-address-list address-list="remote_port_1" address-list-timeout=1m chain=input dst-port=19000 protocol=tcp comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=19001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=18999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=16001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=15999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="allow_remote_users" address-list-timeout=1m chain=input dst-port=16000 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
move [/ip firewall filter find comment=RemoteRules] 1
/ip firewall nat
add action=dst-nat chain=dstnat comment="remote_rdp" src-address-list="allow_remote_users" dst-port=33890 in-interface-list=WAN protocol=tcp to-addresses=192.168.1.33 to-ports=3389

Ahora más: las

dos primeras reglas

/ip firewall filter
add action=drop chain=input dst-port=19000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=drop chain=input dst-port=16000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules

prohibir los paquetes entrantes de direcciones IP que están en la lista negra al escanear puertos;

La tercera regla:

add action=add-src-to-address-list address-list="remote_port_1" address-list-timeout=1m chain=input dst-port=19000 protocol=tcp comment=RemoteRules

Agrega ip a la lista de hosts que hicieron el primer golpe correcto en el puerto deseado (19000);
Las siguientes cuatro reglas:

add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=19001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=18999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=16001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=15999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules

cree puertos de trampa para aquellos que quieran escanear sus puertos, y cuando se detecten tales intentos, coloque su IP en la lista negra durante 60 minutos, durante los cuales las dos primeras reglas evitarán que dichos hosts toquen los puertos correctos;

La siguiente regla:

add action=add-src-to-address-list address-list="allow_remote_users" address-list-timeout=1m chain=input dst-port=16000 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules

pone ip en la lista de permitidos durante 1 minuto (suficiente para establecer una conexión), ya que el segundo golpe correcto se realiza en el puerto deseado (16000);

Siguiente comando:

move [/ip firewall filter find comment=RemoteRules] 1

mueve nuestras reglas hacia arriba en la cadena de procesamiento del firewall, ya que lo más probable es que ya tengamos diferentes reglas de prohibición configuradas que evitarán que nuestros recién creados funcionen. La primera regla en Mikrotik comienza desde cero, pero en mi dispositivo el cero estaba ocupado por la regla incorporada y era imposible de mover, me mudé a 1. Por lo tanto, miramos nuestra configuración, donde puede mover y especificar el número deseado.

La siguiente configuración:

/ip firewall nat
add action=dst-nat chain=dstnat comment="remote_rdp_to_33" src-address-list="allow_remote_users" dst-port=33890 in-interface-list=WAN protocol=tcp to-addresses=192.168.1.33 to-ports=3389

reenvía el puerto 33890 seleccionado al azar a un puerto RDP normal 3389 e ip de la computadora o servidor de terminal que necesitamos. Creamos tales reglas para todos los recursos internos necesarios, preferiblemente exponiendo puertos externos no estándar (y diferentes). Naturalmente, la ip de los recursos internos debe ser estática o segura para un servidor DHCP.

Ahora nuestro Mikrotik está configurado y necesitamos un procedimiento simple para que el usuario se conecte a nuestro RDP interno. Como tenemos principalmente usuarios de Windows, creamos un archivo bat simple y lo llamamos StartRDP.bat:

1.htm
1.rdp

en consecuencia 1.htm contiene el siguiente código:

<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
       RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">

contiene dos enlaces a imágenes imaginarias que se encuentran en la dirección my_router.sn.mynetname.net - tomamos esta dirección del sistema DDNS de Mikrotik pre-habilitando esto en nuestro Mikrotik: vaya al menú IP-> Nube - marque la casilla de verificación DDNS Enabled, haga clic en Aplicar y copie el nombre dns de nuestro enrutador. Pero esto solo es necesario cuando la IP externa del enrutador es dinámica o se usa una configuración con varios proveedores de Internet.

El puerto en el primer enlace: 19000 corresponde al primer puerto en el que debe tocar, en el segundo, respectivamente, el segundo. Entre los enlaces hay una breve instrucción que muestra qué hacer si de repente nuestra conexión se rompe debido a problemas de red cortos: actualizamos la página, el puerto RDP se abre nuevamente para nosotros durante 1 minuto y nuestra sesión se restablece. Además, el texto entre las etiquetas img forma un micro retraso para el navegador, lo que reduce la probabilidad de que el primer paquete se entregue al segundo puerto (16000); hasta ahora no ha habido tales casos en dos semanas de uso (30 personas).

El siguiente es el archivo 1.rdp, que podemos configurar para todos o por separado para cada usuario (lo hice, es más fácil dedicar 15 minutos adicionales que varias horas para consultar a aquellos que no pudieron resolverlo)

screen mode id:i:2
use multimon:i:1
.....
connection type:i:6
networkautodetect:i:0
.....
disable wallpaper:i:1
.....
full address:s:my_router.sn.mynetname.net:33890
.....
username:s:myuserlogin
domain:s:mydomain

de las configuraciones interesantes aquí usan multimon: i: 1 - esto incluye el uso de múltiples monitores - algunos lo necesitan, pero no pensarán en encenderlo ellos mismos.

tipo de conexión: i: 6 y redautodetect: i: 0 - dado que la mayoría de Internet está por encima de 10 Mbps, active el tipo de conexión 6 (red local de 10Mbps y superior) y desactive la detección de red, porque si es (auto) por defecto, entonces es incluso un pequeño raro El retraso de la red establece automáticamente una velocidad subestimada para nuestra sesión, que puede generar retrasos notables en el trabajo, especialmente en los programas gráficos.

desactivar el fondo de pantalla: i: 1: desactivar el
nombre de usuario de la imagen del escritorio : s: myuserlogin: especificar el nombre de usuario, ya que una parte importante de nuestros usuarios no conoce su nombre de usuario
domain: s: mydomain: especifique el dominio o el nombre de la computadora.

Pero si queremos simplificar la tarea de crear un procedimiento de conexión, también podemos usar PowerShell - StartRDP.ps1

Test-NetConnection -ComputerName my_router.sn.mynetname.net -Port 19000
Test-NetConnection -ComputerName my_router.sn.mynetname.net -Port 16000
mstsc /v:my_router.sn.mynetname.net:33890

También un poco sobre el cliente RDP en Windows: MS ha recorrido un largo camino para optimizar el protocolo y su lado del servidor y el cliente, ha implementado muchas características útiles, como trabajar con hardware 3D, optimizar la resolución de pantalla para su monitor, pantalla múltiple y más. Pero, por supuesto, todo se implementa en modo de compatibilidad con versiones anteriores y si el cliente es Windows 7 y la PC remota es Windows 10, entonces RDP funcionará con la versión de protocolo 7.0. Pero el beneficio es que puede actualizar las versiones RDP a versiones más recientes; por ejemplo, puede actualizar la versión del protocolo de 7.0 (Windows 7) a 8.1. Por lo tanto, para la comodidad de los clientes, es necesario maximizar la versión del lado del servidor, así como descartar enlaces para actualizar a nuevas versiones de clientes de protocolo RDP.

Como resultado, tenemos una tecnología simple y relativamente segura para la conexión remota a una PC o servidor terminal en funcionamiento. Pero para una conexión más segura, nuestro método de Knock Port puede ser complicado para ataques de varios órdenes de magnitud, agregando puertos para verificar: puede agregar 3,4,5,6 ... la misma lógica y en este caso una intrusión directa en su red será casi imposible .

Archivos en blanco para crear una conexión remota a RDP .

All Articles