A causa della pandemia di COVID-19 e del lockdown generalizzato in molti paesi, l'unica soluzione per molte aziende per continuare a operare è accedere ai posti di lavoro da remoto tramite internet. Ci sono diversi metodi relativamente sicuri per il lavoro remoto, ma considerando l'ampiezza del problema, è necessario un metodo semplice per tutti gli utenti per collegarsi all'ufficio, senza la necessità di ulteriori configurazioni, spiegazioni, consulenze impegnative e lunghe istruzioni. Questo metodo è il tanto apprezzato RDP (Remote Desktop Protocol), che consente di connettersi direttamente al posto di lavoro e risolve perfettamente il nostro problema, a parte un grosso inconveniente: tenere aperta la porta RDP per internet è molto rischioso. Pertanto, di seguito propongo un metodo semplice ma affidabile per la protezione.
Poiché spesso mi imbatto in piccole organizzazioni che utilizzano dispositivi Mikrotik per la connessione a internet, mostrerò qui di seguito come implementarlo su Mikrotik, ma il metodo di protezione Port Knocking è facilmente realizzabile anche su altri dispositivi di fascia più alta con impostazioni simili del router e firewall.
Breve introduzione a Port Knocking. La protezione esterna ideale per una rete connessa a Internet è quando tutte le risorse e le porte sono chiuse dall'esterno da un firewall. E sebbene il router con un firewall configurato in questo modo non reagisca ai pacchetti in arrivo dall'esterno, li monitora. Pertanto, è possibile configurare il router in modo che, ricevendo una particolare sequenza (codice) di pacchetti di rete su diverse porte, esso (il router) apra l'accesso a determinate risorse (porte, protocolli, ecc.) per l'IP da cui sono arrivati i pacchetti.
Ora veniamo al punto. Non fornirò una descrizione dettagliata della configurazione del firewall su MikroTik: ci sono molti buoni riferimenti su Internet per questo. Idealmente, 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,relatedPermette 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 entrata dagli indirizzi IP che sono stati messi nella lista nera 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 il corretto primo colpo sulla porta desiderata (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 chi desidera scansionare le vostre porte, e al rilevamento di tali tentativi aggiungono il loro IP nella lista nera per 60 minuti, durante i quali le prime due regole non permetteranno a tali host di bussare sulle 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é è stata effettuata la seconda corretta richiesta sulla porta desiderata (16000);
Il prossimo comando:
move [/ip firewall filter find comment=RemoteRules] 1sposta le nostre regole più in alto nella catena di elaborazione del firewall, poiché è probabile che abbiamo già impostato diverse regole restrittive che impediranno l'attivazione delle nostre nuove. La prima regola in MikroTik inizia da zero, ma sul mio dispositivo lo zero era occupato da una regola integrata e non era possibile spostarla — l'ho spostata a 1. Quindi, controlliamo le nostre impostazioni — dove possiamo spostare e indichiamo il numero corretto.
Impostazione seguente:
/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=3389ed effettua il forwarding della porta scelta casualmente 33890 sulla normale porta RDP 3389 e l'IP del computer o server terminale desiderato. Creiamo tali regole per tutte le risorse interne necessarie, preferibilmente impostando porte esterne atipiche (e diverse). Naturalmente, gli IP delle risorse interne devono essere o statici o assegnati tramite DHCP. server.
Ora il nostro MikroTik è impostato e abbiamo bisogno di una procedura semplice per l'utente per connettersi al nostro RDP interno. Poiché abbiamo principalmente utenti Windows, creiamo un semplice file .bat e lo chiamiamo StartRDP.bat:
1.htm
1.rdp1.htm contiene il seguente codice:
<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
clicca su aggiorna pagina per riconnetterti tramite RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">qui contiene due collegamenti a immagini fittizie che si trovano all'indirizzo my_router.sn.mynetname.net — questo indirizzo lo prendiamo dal sistema DDNS di MikroTik, attivando prima questa funzione nel nostro MikroTik: andiamo nel menu IP->Cloud, selezioniamo l'opzione DDNS Enabled, clicchiamo su Apply e copiamo il nome DNS del nostro router. Questo è necessario solo quando l'IP esterno del router è dinamico o quando si utilizza una configurazione con più provider Internet.
La porta nel primo collegamento:19000 corrisponde alla prima porta a cui dobbiamo connetterci, nel secondo caso alla seconda. Tra i collegamenti 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 viene ripristinata. Inoltre, il testo tra i tag img crea per il browser una micro-latenza che riduce la probabilità di inviare il primo pacchetto alla seconda porta (16000) — finora, in due settimane di utilizzo (con 30 persone), non ci sono stati casi di questo tipo.
Segue il file 1.rdp, che possiamo configurare in modo globale o separatamente per ogni utente (l'ho fatto così — è più facile investire 15 minuti in più piuttosto che alcune ore per consultazioni con 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 — alcuni ne hanno bisogno, ma non lo attiverebbero da soli.
connection type:i:6 e networkautodetect:i:0 — dato che la maggior parte delle connessioni ha più di 10 Mbit, impostiamo il tipo di connessione a 6 (rete locale 10 Mbit e oltre) e disabilitiamo networkautodetect, perché se è impostato su auto per impostazione predefinita, anche un raro ritardo di rete può stabilire a lungo una velocità inferiore per la nostra sessione, creando ritardi notevoli nel lavoro, soprattutto con 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 semplificare il compito di impostare la procedura di connessione, possiamo utilizzare anche 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' su RDP client 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 3D hardware, l'ottimizzazione della risoluzione dello schermo in base al monitor e il supporto multi-schermo. Naturalmente, tutto è implementato in modalità di retrocompatibilità, e se il client è Windows 7 e il PC remoto è Windows 10, RDP funzionerà utilizzando la versione 7.0 del protocollo. Fortunatamente, possiamo aggiornare le versioni RDP a versioni più recenti — ad esempio, possiamo aggiornare la versione del protocollo dalla 7.0 (Windows 7) all'8.1. Pertanto, per il comfort dei clienti, è necessario aggiornare il più possibile le versioni della parte server e fornire i collegamenti per l'aggiornamento a nuove versioni del protocollo RDP.
Abbiamo quindi una tecnologia semplice e relativamente sicura per la connessione remota a un PC o a un server terminale. Tuttavia, per una connessione più sicura, il nostro metodo di Port Knocking può essere reso più complesso per resistere ad attacchi di vari livelli, aggiungendo porte di verifica; seguendo questa logica, possiamo aggiungere 3, 4, 5, 6… porte, rendendo quasi impossibile un'intrusione diretta nella vostra rete.
.
Fonte: habr.com
