Devido à pandemia do vírus covid-19 e ao bloqueio geral em muitos países, a única saída para muitas empresas para continuar suas atividades é o acesso remoto aos locais de trabalho pela internet. Existem muitos métodos relativamente seguros para o trabalho remoto — mas, considerando a magnitude do problema, é necessário um método simples de conexão remota ao escritório que não exija configurações adicionais, explicações, consultas cansativas ou longas instruções. Um desses métodos é o RDP (Remote Desktop Protocol), muito apreciado por muitos administradores. A conexão direta ao local de trabalho via RDP resolve perfeitamente nossa tarefa, exceto por um grande porém: manter a porta RDP aberta para a internet é muito inseguro. Portanto, a seguir, proponho um método simples, mas confiável de proteção.
Como frequentemente me deparo com pequenas organizações que usam dispositivos Mikrotik como saída para a internet, mostrarei como isso pode ser realizado no Mikrotik, mas o método de proteção Port Knocking pode ser facilmente implementado em outros dispositivos de classe superior com configurações de roteador de entrada e firewall similares.
Breve explicação sobre Port Knocking. A proteção externa ideal de uma rede conectada à internet é quando todos os recursos e portas estão fechados para fora pelo firewall. E embora o roteador configurado com esse firewall não reaja aos pacotes provenientes de fora, ele os escuta. Portanto, é possível configurar o roteador para que, ao receber uma determinada sequência (código) de pacotes de rede em diferentes portas, ele (o roteador) abra o acesso a certos recursos (portas, protocolos, etc.) para o IP de onde vieram os pacotes.
Agora vamos ao que interessa. Não farei uma descrição detalhada da configuração do firewall no Mikrotik — há muitas fontes de qualidade na internet para isso. Idealmente, o firewall bloqueia todos os pacotes de entrada, mas
/ip firewall filter
add action=accept chain=input comment="established and related accept" connection-state=established,relatedPermite o tráfego de entrada de conexões já estabelecidas (established, related).
Agora vamos configurar 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=3389Agora em mais detalhes:
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=RemoteRulesproíbem pacotes de entrada de endereços IP que estão na lista negra após a varredura de 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 o IP à lista de hosts que se conectaram corretamente no primeiro toque na porta desejada (19000);
As seguintes quatro regras:
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=RemoteRulescriam portas armadilha para quem tenta escanear suas portas, e ao detectar tais tentativas, coloca o IP na lista negra por 60 minutos, durante os quais as duas primeiras regras impedirão que esses hosts se conectem às portas corretas;
A próxima 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=RemoteRulescoloca o IP na lista de permissões por 1 minuto (tempo suficiente para estabelecer a conexão), pois houve uma segunda tentativa correta na porta necessária (16000);
O próximo comando:
move [\/ip firewall filter find comment=RemoteRules] 1move nossas regras para cima na cadeia de processamento do firewall, pois já teremos regras de bloqueio configuradas que impedirão que nossas novas regras funcionem. A primeira regra no Mikrotik começa com zero, mas no meu dispositivo zero estava ocupado por uma regra interna e não foi possível mover — eu movi para 1. Portanto, verificamos nossas configurações — onde podemos mover e indicamos o número necessário.
A próxima 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=3389realiza o redirecionamento da porta 33890 escolhida aleatoriamente para a porta RDP padrão 3389 e o IP do computador ou servidor terminal necessário. Criamos tais regras para todos os recursos internos necessários, preferencialmente configurando portas externas não padronizadas (e diferentes). Naturalmente, os IPs dos recursos internos devem ser estáticos ou fixos via DHCP servidor.
Agora nosso Mikrotik está configurado e precisamos de um procedimento simples para o usuário se conectar ao nosso RDP interno. Como a maioria dos nossos usuários é do Windows, criamos um arquivo bat simples e o nomeamos como StartRDP.bat:
1.htm
1.rdprespectivamente, 1.htm contém o seguinte código:
<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
clique em atualizar a página para tentar novamente pelo RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">Aqui estão dois links para imagens fictícias localizadas no endereço my_router.sn.mynetname.net — esse endereço é obtido do sistema DDNS do Mikrotik, e isso precisa ser habilitado primeiro no nosso Mikrotik: acesse o menu IP->Cloud — marque a caixa DDNS Enabled, clique em Apply e copie o nome DNS do nosso roteador. Isso é necessário apenas quando o IP externo do roteador é dinâmico ou em configuração com múltiplos provedores de internet.
A porta no primeiro link :19000 corresponde à primeira porta que deve ser acessada, enquanto no segundo link, à segunda. Entre os links, há uma breve instrução mostrando o que fazer caso nossa conexão seja interrompida por falhas temporárias na rede — atualizamos a página, a porta RDP é reaberta para nós por 1 minuto e nossa sessão é restaurada. O texto entre as tags img também cria um micro atraso para o navegador, reduzindo a probabilidade da entrega do primeiro pacote na segunda porta (16000) — até agora, em duas semanas de uso (30 usuários), não houve tais casos.
Em seguida, temos o arquivo 1.rdp, que podemos configurar uma vez para todos ou separadamente para cada usuário (foi isso que fiz — é mais fácil gastar 15 minutos adicionais do que várias horas consultando aqueles que não conseguem entender).
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:mydomainuma das configurações interessantes aqui é use multimon:i:1 — isso ativa o uso de múltiplos monitores — algumas pessoas precisam disso e muitas não percebem como ativar.
connection type:i:6 e networkautodetect:i:0 — como a maioria das conexões de internet já está acima de 10 Mbps, ativamos o tipo de conexão 6 (rede local de 10 Mbps ou mais) e desativamos o networkautodetect, pois se estiver em auto, até mesmo uma pequena latência na rede pode automaticamente estabelecer uma velocidade reduzida para nossa sessão, causando atrasos perceptíveis no trabalho, especialmente em programas gráficos.
disable wallpaper:i:1 — desativamos a imagem da área de trabalho.
username:s:myuserlogin — informamos o login do usuário, já que uma parte significativa de nossos usuários não sabe seu login.
domain:s:mydomain — informamos o domínio ou o nome do computador.
Mas se quisermos simplificar a tarefa de criar o procedimento de conexão, 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:33890Um pouco sobre o cliente RDP no Windows: a Microsoft percorreu um longo caminho na otimização do protocolo e suas partes servidoras e clientes, implementando muitos recursos úteis, como suporte a hardware 3D, otimização da resolução da tela para o seu monitor, múltiplas telas e mais. Mas, naturalmente, tudo isso foi implementado em modo de compatibilidade e, se o cliente estiver no Windows 7 e o PC remoto estiver no Windows 10, o RDP funcionará usando a versão 7.0 do protocolo. Felizmente, é possível atualizar as versões do RDP para versões mais recentes — por exemplo, é possível aumentar a versão do protocolo de 7.0 (Windows 7) para 8.1. Portanto, para maior conveniência dos clientes, é necessário maximizar as versões da parte servidor e também fornecer links para atualizar para novas versões dos clientes do protocolo RDP.
Assim, temos uma tecnologia simples e relativamente segura para conexão remota ao PC de trabalho ou servidor terminal. No entanto, para uma conexão mais segura, nosso método de Port Knocking pode ser complicado para aumentar a dificuldade de ataques, adicionando portas para verificação — seguindo a mesma lógica, podemos adicionar 3, 4, 5, 6... portas e, nesse caso, a invasão direta à sua rede se tornará quase impossível.
.
Fonte: habr.com
