A causa della pandemia di virus covid-19 e del lockdown generale in molti paesi, l'unica soluzione per molte aziende per continuare a lavorare è stata l'accesso remoto ai posti di lavoro tramite internet. Ci sono molti metodi relativamente sicuri per il lavoro remoto, ma data l'entità del problema, è necessario un metodo di connessione remota semplice per tutti gli utenti, senza necessità di configurazioni aggiuntive, spiegazioni, consulenze noiose e lunghe istruzioni. Questo metodo è il tanto amato RDP (Remote Desktop Protocol) da molti amministratori. La connessione diretta al posto di lavoro tramite RDP risolve perfettamente il nostro problema, eccetto per un grande inconveniente: tenere aperto il porto RDP per internet è molto insicuro. Pertanto, di seguito propongo un metodo semplice ma affidabile di protezione.
Poiché spesso mi imbatto in piccole organizzazioni che utilizzano dispositivi Mikrotik come uscita verso internet, di seguito sarà mostrato come realizzarlo su Mikrotik, ma il metodo di protezione Port Knocking è facilmente implementabile anche su altri dispositivi di classe superiore con impostazioni simili del router e firewall.
In breve su Port Knocking. La protezione esterna ideale di una rete connessa a internet è quando tutte le risorse e i porti sono chiusi dall'esterno da un firewall. Anche se il router con un firewall configurato in questo modo non reagisce ai pacchetti in arrivo dall'esterno, li monitora. Pertanto, è possibile configurare il router in modo che, al ricevimento di una determinata sequenza (codice) di pacchetti di rete su diverse porte, il router apra l'accesso a determinate risorse (porte, protocolli, ecc.) per l'IP da cui sono arrivati i pacchetti.
Ora passiamo al lavoro. Non entrerò nei dettagli della configurazione del firewall su Mikrotik: in internet ci sono molte fonti di qualità per questo. In linea di principio, il firewall blocca tutti i pacchetti in entrata, ma
/ip firewall filter
add action=accept chain=input comment="established and related accept" connection-state=established,relatedconsente il traffico in entrata da connessioni già stabilite (established, related).
Ora configuriamo Port Knocking su 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=3389Ora in dettaglio:
le prime due regole
/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=RemoteRulesvietano i pacchetti in ingresso dagli indirizzi IP che sono stati inseriti nella blacklist durante la scansione delle porte;
La terza regola:
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 aggiunge l'ip alla lista degli host che hanno effettuato correttamente il primo accesso alla porta richiesta (19000);
Le seguenti quattro regole:
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=RemoteRulescreano porte trappola per chiunque voglia scansionare le vostre porte, e al rilevamento di tali tentativi inseriscono il loro ip nella blacklist per 60 minuti, durante i quali le prime due regole non permetteranno a tali host di accedere alle porte corrette;
La regola successiva:
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=RemoteRulesinserisce l'ip nella lista degli autorizzati per 1 minuto (sufficiente per stabilire una connessione), poiché è stato effettuato un secondo accesso corretto alla porta richiesta (16000);
Il comando successivo:
move [\/ip firewall filter find comment=RemoteRules] 1sposta le nostre regole verso l'alto nella catena di elaborazione del firewall, poiché probabilmente abbiamo già regole di blocco diverse impostate che non permetteranno l'attivazione delle nostre regole appena create. La prima regola su Mikrotik inizia da zero, ma sul mio dispositivo lo zero era occupato da una regola incorporata e non potevo spostarla - l'ho spostata a 1. Quindi controlliamo le nostre impostazioni - dove possiamo spostare e indichiamo il numero corretto.
La configurazione successiva:
/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=3389esegue il port forwarding di una porta scelta arbitrariamente 33890 sulla porta RDP standard 3389 e l'ip del computer o del server terminale di cui abbiamo bisogno. Creiamo tali regole per tutte le risorse interne necessarie, preferibilmente impostando porte esterne non standard (e diverse). Naturalmente, l'ip delle risorse interne deve essere statico o riservato su DHCP server.
Ora il nostro Mikrotik è configurato e abbiamo bisogno di una procedura semplice per l'utente per connettersi al nostro RDP interno. Poiché i nostri utenti sono principalmente Windows, creiamo un semplice file .bat e lo chiamiamo StartRDP.bat:
1.htm
1.rdpdi conseguenza, 1.htm contiene il seguente codice:
<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
fare clic per aggiornare la pagina e riconnettersi tramite RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">qui contiene due link a immagini fittizie che si trovano all'indirizzo my_router.sn.mynetname.net — questo indirizzo lo prendiamo dal sistema DDNS di Mikrotik abilitandolo precedentemente nel nostro Mikrotik: andiamo nel menu IP->Cloud — selezioniamo la casella DDNS Enabled, premiamo Apply e copiamo il nome DNS del nostro router. Questo è obbligatorio solo quando l'IP esterno del router è dinamico o si utilizza una configurazione con più fornitori di internet.
La porta nel primo link :19000 corrisponde alla prima porta a cui bisogna accedere, nel secondo link ovviamente alla seconda. Tra i link c'è una breve istruzione che mostra cosa fare se la nostra connessione si interrompe a causa di brevi problemi di rete — aggiorniamo la pagina, la porta RDP si riapre per noi per 1 minuto e la nostra sessione si ripristina. Inoltre, il testo tra i tag img crea per il browser un micro-ritardo, il quale riduce la probabilità di consegna del primo pacchetto sulla seconda porta (16000) — per ora, dopo due settimane di utilizzo (30 persone), non ci sono stati casi del genere.
Successivamente c'è il file 1.rdp, che possiamo configurare uno per tutti o separatamente per ogni utente (io ho fatto così — è più facile impiegare 15 minuti in più piuttosto che alcune ore per consigliare chi non riesce a capire)
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:mydomaintra le impostazioni interessanti c'è use multimon:i:1 — questo attiva l'uso di più monitor — a molti questo è necessario, ma non si ricordano di attivarlo.
connection type:i:6 e networkautodetect:i:0 — così come per la maggior parte delle connessioni internet che superano i 10 Mbit, attiviamo il tipo di connessione 6 (rete locale 10Mbit e oltre) e disattiviamo networkautodetect, poiché se impostato su default (auto), anche un raro ma breve ritardo nella rete stabilisce automaticamente un'errata velocità più bassa per la nostra sessione, che può creare ritardi notevoli nel lavoro, specialmente nei programmi grafici.
disable wallpaper:i:1 — disabilitiamo l'immagine del desktop
username:s:myuserlogin — indichiamo il login dell'utente, poiché una parte significativa dei nostri utenti non conosce il proprio login
domain:s:mydomain — indichiamo il dominio o il nome del computer
Ma se vogliamo semplificarci il compito nella creazione della procedura di connessione, possiamo anche usare 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:33890Inoltre, un po' di informazioni sul client RDP in Windows: Microsoft ha fatto molta strada nell'ottimizzazione del protocollo e delle sue parti server e client, implementando molte funzionalità utili, come il supporto per hardware 3D, l'ottimizzazione della risoluzione dello schermo in base al monitor, il supporto multi-schermo e altro ancora. Naturalmente, tutto è stato implementato in modalità di retrocompatibilità; pertanto, se si utilizza un client Windows 7 e un PC remoto Windows 10, l'RDP funzionerà utilizzando la versione 7.0 del protocollo. Fortunatamente, è possibile aggiornare le versioni dell'RDP a versioni più recenti; ad esempio, è possibile passare dalla versione 7.0 (Windows 7) alla 8.1. Pertanto, per comodità dei client è necessario aggiornare al massimo le versioni della parte server e fornire link per l'aggiornamento a nuove versioni dei client del protocollo RDP.
In definitiva, abbiamo una tecnologia semplice e relativamente sicura per la connessione remota a un PC di lavoro o a un server terminale. Tuttavia, per una connessione più sicura, il nostro metodo di Port Knocking può essere complicato per attacchi di diversi ordini di grandezza, aggiungendo porte per il controllo: si possono aggiungere anche le porte 3, 4, 5, 6, e in tal caso l'intrusione diretta nella tua rete diventa quasi impraticabile.
.
Fonte: habr.com
