Trabalho remoto no escritório. RDP, Port Knocking, Mikrotik: simples e seguro

Em conexão com a pandemia do vírus covid-19 e a quarentena universal em muitos países, a única saída de muitas empresas para continuar trabalhando é o acesso remoto a empregos via Internet. Existem muitos métodos relativamente seguros para o trabalho remoto - mas, dada a escala do problema, você precisa de um método simples para qualquer usuário se conectar remotamente ao escritório e sem a necessidade de configurações adicionais, explicações, consultas tediosas e instruções longas. Este método é o favorito de muitos administradores RDP (Remote Desktop Protocol). Conectar-se diretamente ao local de trabalho via RDP resolve o nosso problema idealmente, exceto por uma grande mosca na pomada - manter a porta RDP aberta para a Internet é muito inseguro. Portanto, abaixo, proponho um método de proteção simples, porém confiável.imagem

Como geralmente encontro pequenas organizações nas quais os dispositivos Mikrotik são usados ​​como acesso à Internet, será mostrado abaixo como implementar isso no Mikrotik, mas o método de proteção Port Knocking é facilmente implementado em outros dispositivos de classe superior com as mesmas configurações para o roteador de entrada e firewall

Brevemente sobre Port Knocking . Uma proteção externa ideal para uma rede conectada à Internet é quando todos os recursos e portas são fechados externamente por um firewall. E embora um roteador com esse firewall configurado não reaja de maneira alguma aos pacotes vindos de fora, ele os ouve. Portanto, você pode configurar o roteador para que, ao receber uma certa sequência (de código) de pacotes de rede em portas diferentes, ele (o roteador) para IP de onde vieram os pacotes abra o acesso a determinados recursos (portas, protocolos etc.).

Agora ao ponto. Não farei uma descrição detalhada das configurações de firewall no Mikrotik - a Internet está cheia de fontes de alta qualidade para isso. Idealmente, um firewall bloqueia todos os pacotes recebidos, mas

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


Permite tráfego de entrada de conexões estabelecidas (relacionadas).
Agora configure o Port Knocking no 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

Agora mais: as

duas primeiras regras

/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

proibir pacotes recebidos de endereços IP que estão na lista negra ao digitalizar portas;

A terceira regra:

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

Adiciona ip à lista de hosts que fizeram a primeira batida correta na porta desejada (19000);
As quatro regras a seguir:

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

crie portas de interceptação para aqueles que desejam varrer suas portas e, quando essas tentativas forem detectadas, coloque seu IP na lista negra por 60 minutos, durante o qual as duas primeiras regras impedirão que esses hosts batam nas portas corretas;

A seguinte regra:

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

coloca ip na lista de permissões por 1 minuto (o suficiente para estabelecer uma conexão), uma vez que a segunda batida correta é feita na porta desejada (16000);

Próximo comando:

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

move nossas regras para a cadeia de processamento do firewall, pois provavelmente já teremos regras de proibição diferentes configuradas que impedirão que nossos recém-criados funcionem. A primeira regra no Mikrotik começa do zero, mas no meu dispositivo o zero foi ocupado pela regra interna e era impossível mover - mudei para 1. Então, olhamos para as nossas configurações - onde você pode mover e especificar o número desejado.

A seguinte configuração:

/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

encaminha a porta 33890 selecionada aleatoriamente para uma porta RDP comum 3389 e ip do computador ou servidor de terminal de que precisamos. Criamos essas regras para todos os recursos internos necessários, de preferência expondo portas externas não padrão (e diferentes). Naturalmente, o ip de recursos internos deve ser estático ou protegido para um servidor DHCP.

Agora nosso Mikrotik está configurado e precisamos de um procedimento simples para o usuário se conectar ao nosso RDP interno. Como temos principalmente usuários do Windows, criamos um arquivo bat simples e o chamamos de StartRDP.bat:

1.htm
1.rdp

consequentemente 1.htm contém o seguinte 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">

ele contém dois links para imagens imaginárias localizadas no endereço my_router.sn.mynetname.net - pegamos esse endereço do sistema DDNS do Mikrotik pré-habilitando-o em nosso Mikrotik: vá para o menu IP-> Nuvem - marque a caixa de seleção DDNS ativado, clique em Aplicar e copie o nome do DNS do nosso roteador. Mas isso é necessário apenas quando o ip externo do roteador é dinâmico ou é usada uma configuração com vários provedores de Internet.

A porta no primeiro link: 19000 corresponde à primeira porta na qual você precisa bater, na segunda, respectivamente, na segunda. Entre os links, há uma breve instrução que mostra o que fazer se, de repente, nossa conexão for interrompida devido a problemas de rede curtos - atualizamos a página, a porta RDP se abre novamente para nós por 1 minuto e nossa sessão é restaurada. Além disso, o texto entre as tags img forma um micro atraso para o navegador, o que reduz a probabilidade de o primeiro pacote ser entregue na segunda porta (16000) - até o momento não houve casos em duas semanas de uso (30 pessoas).

A seguir, está o arquivo 1.rdp, que podemos configurar um para todos ou separadamente para cada usuário (eu fiz isso - é mais fácil gastar mais 15 minutos do que várias horas para consultar aqueles que não conseguiram descobrir)

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

das configurações interessantes aqui usam multimon: i: 1 - isso inclui o uso de vários monitores - alguns precisam, mas eles não pensam em ativá-lo.

tipo de conexão: i: 6 e networkautodetect: i: 0 - como a maioria da Internet é superior a 10 Mbps, ative o tipo de conexão 6 (rede local de 10 Mbps e superior) e desative o networkautodetect, porque se for (automático) por padrão, é ainda raro o atraso da rede define automaticamente permanentemente uma velocidade subestimada para a nossa sessão, o que pode criar atrasos visíveis no trabalho, especialmente em programas gráficos.

desativar papel de parede: i: 1 - desativar o
nome de usuário da imagem da área de trabalho : s: myuserlogin - especifique o nome de usuário, pois uma parte significativa de nossos usuários não sabe o nome de usuário
domain: s: mydomain - especifique o domínio ou o nome do computador.

Mas, se queremos simplificar a tarefa de criar um procedimento de conexão, também podemos usar o 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

Também um pouco sobre o cliente RDP no Windows: a MS percorreu um longo caminho para otimizar o protocolo e seu servidor e o lado do cliente, implementou muitos recursos úteis - como trabalhar com o hardware 3D, otimizar a resolução da tela do monitor, da tela múltipla e muito mais. Mas, é claro, tudo é implementado no modo de compatibilidade com versões anteriores e, se o cliente for Windows 7 e o PC remoto for Windows 10, o RDP funcionará usando a versão 7.0 do protocolo. Mas o benefício é que você pode atualizar versões do RDP para versões mais recentes - por exemplo, você pode atualizar a versão do protocolo de 7.0 (Windows 7) para 8.1. Portanto, para a conveniência dos clientes, você precisa maximizar a versão do servidor, bem como liberar links para atualizar para novas versões dos clientes do protocolo RDP.

Como resultado, temos uma tecnologia simples e relativamente segura para conexão remota a um PC ou servidor de terminal em funcionamento. Mas, para uma conexão mais segura, nosso método Port Knocking pode ser complicado para ataques de várias ordens de magnitude, adicionando portas para verificação - você pode adicionar 3,4,5,6 ... a mesma lógica e, neste caso, uma intrusão direta em sua rede será quase impossível .

Espaços em branco de arquivo para criar uma conexão remota com o RDP .

All Articles