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

Debido a la pandemia del virus covid-19 y la cuarentena general en muchos países, la única forma de que muchas empresas puedan seguir trabajando es el acceso remoto a los lugares de trabajo a través de Internet. Hay muchos métodos relativamente seguros para el trabajo remoto, pero dada la magnitud del problema, se necesita un método simple para que cualquier usuario se conecte de forma remota a la oficina y sin necesidad de configuraciones adicionales, explicaciones, consultas tediosas y largas instrucciones. Este método es apreciado por muchos administradores RDP (Protocolo de escritorio remoto). 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.Trabajo remoto en la oficina. RDP, Port Knocking, Mikrotik: simple y seguro

Dado que a menudo me encuentro con organizaciones pequeñas donde los dispositivos Mikrotik se utilizan como acceso a Internet, a continuación se mostrará 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 configuraciones de enrutador de entrada y firewall similares. .

Brevemente sobre Port Knocking. La protección externa ideal de una red conectada a Internet es cuando todos los recursos y puertos están cerrados desde el exterior 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 una cierta secuencia (código) de paquetes de red se reciba en diferentes puertos, (el enrutador) para la IP de donde provienen los paquetes corte el acceso a ciertos recursos (puertos, protocolos, etc.).

Ahora a los negocios. 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, el cortafuegos 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 de conexiones relacionadas establecidas.
Ahora configuramos 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 durante el escaneo de puertos;

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 la primera llamada correcta en el puerto correcto (19000);
Las siguientes cuatro reglas son:

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 trampa para aquellos que quieran escanear sus puertos, y si se detectan dichos intentos, ponga su IP en la lista negra durante 60 minutos, durante los cuales las dos primeras reglas no darán a dichos hosts la oportunidad de llamar a los puertos correctos;

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 permitida por 1 minuto (suficiente para establecer una conexión), ya que el segundo toque correcto se realizó en el puerto deseado (16000);

El 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 configuradas diferentes reglas de denegación que evitarán que funcionen las recién creadas. La primera regla en Mikrotik comienza desde cero, pero en mi dispositivo el cero estaba ocupado por una regla integrada y era imposible moverlo. Lo moví a 1. Por lo tanto, miramos nuestra configuración, dónde puede moverlo e indique el número deseado.

Próxima 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 un puerto 33890 seleccionado arbitrariamente al puerto RDP habitual 3389 y la ip de la computadora o terminal server que necesitamos. Creamos tales reglas para todos los recursos internos necesarios, preferiblemente configurando puertos externos no estándar (y diferentes). Naturalmente, la IP de los recursos internos debe ser estática o fija en el servidor DHCP.

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

1.htm
1.rdp

respectivamente 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 my_router.sn.mynetname.net: tomamos esta dirección del sistema Mikrotik DDNS después de habilitarlo en nuestro Mikrotik: vaya al menú IP-> Nube: marque la casilla de verificación DDNS habilitado, haga clic en Aplicar y copie el nombre dns de nuestro enrutador. Pero esto solo es necesario cuando la ip externa del router es dinámica o se utiliza 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, al segundo. Entre los enlaces hay una breve instrucción que muestra qué hacer si de repente nuestra conexión se interrumpe debido a problemas de red breves: actualizamos la página, el puerto RDP se vuelve a abrir para nosotros durante 1 minuto y nuestra sesión se restablece. Además, el texto entre las etiquetas img forma un microretraso 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). gente).

Luego viene el archivo 1.rdp, que podemos configurar uno para todos o por separado para cada usuario (yo hice esto, es más fácil pasar 15 minutos adicionales que unas pocas horas consultando 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í es el uso de multimon: i: 1: esto incluye el uso de múltiples monitores; algunos lo necesitan, pero ellos mismos no pensarán en encenderlo.

tipo de conexión: i: 6 y detección automática de red: 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 10 Mbps y superior) y desactive la detección automática de red, porque si por defecto (auto) , entonces, incluso una pequeña latencia de red rara hace que nuestra sesión se vuelva lenta durante mucho tiempo, lo que puede crear retrasos notables en el trabajo, especialmente en los programas gráficos.

deshabilitar fondo de pantalla: i: 1 - deshabilitar la imagen del escritorio
nombre de usuario: s: myuserlogin: especificamos el inicio de sesión del usuario, ya que una parte significativa de nuestros usuarios no conocen su inicio de sesión
dominio:s:midominio: especifique el dominio o el nombre de la computadora

Pero si queremos simplificar nuestra 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 en la optimización del protocolo y sus partes de servidor y cliente, ha implementado muchas funciones útiles, como trabajar con hardware 3D, optimizar la resolución de pantalla para su monitor, multipantalla, etcétera. 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, RDP funcionará con la versión 7.0 del protocolo. 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 comodidad de los clientes, es necesario aumentar las versiones de la parte del servidor tanto como sea posible, así como eliminar enlaces para actualizar a nuevas versiones de los clientes del protocolo RDP.

Como resultado, tenemos una tecnología simple y relativamente segura para la conexión remota a una PC o servidor terminal que funcione. Pero para una conexión más segura, nuestro método Port Knocking puede ser más difícil de atacar en varios órdenes de magnitud, agregando puertos para verificar: puede agregar 3,4,5,6 ... un puerto de acuerdo con 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.

Fuente: habr.com

Añadir un comentario