Lavoro a distanza in ufficio. RDP, Port Knocking, Mikrotik: semplice e sicuro

A causa della pandemia del virus covid-19 e della quarantena generale in molti paesi, l'unico modo per molte aziende di continuare a lavorare è l'accesso remoto ai luoghi di lavoro tramite Internet. Esistono molti metodi relativamente sicuri per il lavoro a distanza, ma data l'entità del problema, è necessario un metodo semplice per consentire a qualsiasi utente di connettersi in remoto all'ufficio e senza la necessità di ulteriori impostazioni, spiegazioni, noiose consultazioni e lunghe istruzioni. Questo metodo è amato da molti amministratori RDP (Remote Desktop Protocol). La connessione diretta al posto di lavoro tramite RDP risolve idealmente il nostro problema, ad eccezione di un grosso neo: mantenere la porta RDP aperta per Internet è molto pericoloso. Pertanto, di seguito propongo un metodo di protezione semplice ma affidabile.Lavoro a distanza in ufficio. RDP, Port Knocking, Mikrotik: semplice e sicuro

Poiché mi imbatto spesso in piccole organizzazioni in cui i dispositivi Mikrotik vengono utilizzati come accesso a Internet, di seguito verrà mostrato come implementarlo su Mikrotik, ma il metodo di protezione Port Knocking è facilmente implementabile su altri dispositivi di classe superiore con impostazioni del router di input e firewall simili .

Brevemente su Port Knocking. La protezione esterna ideale di una rete connessa a Internet si ha quando tutte le risorse e le porte sono chiuse dall'esterno da un firewall. E sebbene un router con un firewall così configurato non reagisca in alcun modo ai pacchetti provenienti dall'esterno, li ascolta. Pertanto, è possibile configurare il router in modo che quando una determinata sequenza (codice) di pacchetti di rete viene ricevuta su porte diverse, esso (il router) per l'IP da cui provengono i pacchetti, interrompe l'accesso a determinate risorse (porte, protocolli, eccetera.).

Ora al lavoro. Non farò una descrizione dettagliata delle impostazioni del firewall su Mikrotik: Internet è pieno di fonti di alta qualità 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,related

Consente il traffico in entrata da connessioni stabilite e correlate.
Ora impostiamo 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=3389

Ora più in dettaglio:

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=RemoteRules

proibire i pacchetti in arrivo da indirizzi IP inseriti nella lista nera durante la scansione delle porte;

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 ip all'elenco degli host che hanno effettuato il primo colpo corretto sulla porta corretta (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=RemoteRules

crea porte trap per coloro che vogliono scansionare le tue porte e, se vengono rilevati tali tentativi, inserisci nella blacklist il loro IP per 60 minuti, durante i quali le prime due regole non daranno a tali host l'opportunità di bussare alle porte corrette;

Prossima regola:

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

inserisce ip nella lista dei consentiti per 1 minuto (sufficiente a stabilire una connessione), dal momento che è stato effettuato il secondo colpo corretto sulla porta desiderata (16000);

Prossimo comando:

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

sposta le nostre regole lungo la catena di elaborazione del firewall, poiché molto probabilmente avremo già diverse regole di negazione configurate che impediranno il funzionamento di quelle appena create. La primissima regola in Mikrotik parte da zero, ma sul mio dispositivo zero era occupata da una regola incorporata ed era impossibile spostarla - l'ho spostata su 1. Pertanto, guardiamo le nostre impostazioni - dove puoi spostarla e indicare il numero desiderato.

Impostazione 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=3389

inoltra una porta 33890 selezionata arbitrariamente alla solita porta RDP 3389 e l'ip del computer o del terminal server 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 fisso sul server DHCP.

Ora il nostro Mikrotik è configurato e abbiamo bisogno di una semplice procedura per consentire all'utente di connettersi al nostro RDP interno. Poiché abbiamo principalmente utenti Windows, creiamo un semplice file bat e lo chiamiamo StartRDP.bat:

1.htm
1.rdp

rispettivamente 1.htm contiene il seguente codice:

<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
нажмите обновить страницу для повторного захода по RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">

contiene due collegamenti a immagini immaginarie che si trovano su my_router.sn.mynetname.net - prendiamo questo indirizzo dal sistema DDNS Mikrotik dopo averlo abilitato nel nostro Mikrotik: vai al menu IP-> Cloud - spunta la casella DDNS abilitato, fare clic su Applica e copiare il nome DNS del nostro router. Ma questo è necessario solo quando l'ip esterno del router è dinamico o viene utilizzata una configurazione con più provider Internet.

La porta nel primo collegamento: 19000 corrisponde alla prima porta su cui devi bussare, nella seconda, rispettivamente, alla seconda. Tra i collegamenti c'è una breve istruzione che mostra cosa fare se improvvisamente la nostra connessione viene interrotta 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 forma un micro-ritardo per il browser, che riduce la probabilità che il primo pacchetto venga consegnato alla seconda porta (16000) - finora non si sono verificati casi del genere in due settimane di utilizzo (30 persone).

Poi arriva il file 1.rdp, che possiamo configurare uno per tutti o separatamente per ogni utente (l'ho fatto - è più facile spendere 15 minuti in più che qualche ora consultando chi non è riuscito a capirlo)

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

delle impostazioni interessanti qui c'è use multimon: i: 1 - questo include l'uso di più monitor - alcuni ne hanno bisogno, ma loro stessi non penseranno di accenderlo.

tipo di connessione: i: 6 e networkautodetect: i: 0 - poiché la maggior parte di Internet è superiore a 10 Mbps, quindi attivare il tipo di connessione 6 (rete locale 10 Mbps e oltre) e disattivare networkautodetect, perché se per impostazione predefinita (auto) , quindi anche una rara piccola latenza di rete imposta automaticamente la nostra sessione a una velocità lenta per lungo tempo, il che può creare notevoli ritardi nel lavoro, soprattutto nei programmi di grafica.

disabilita lo sfondo: i: 1 - disabilita l'immagine del desktop
username:s:myuserlogin - specifichiamo il login dell'utente, poiché una parte significativa dei nostri utenti non conosce il proprio login
domain:s:mydomain - specifica il dominio o il nome del computer

Ma se vogliamo semplificare il nostro compito di creare una procedura di connessione, allora possiamo usare 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:33890

Anche un po 'sul client RDP in Windows: MS ha fatto molta strada nell'ottimizzazione del protocollo e delle sue parti server e client, ha implementato molte funzioni utili, come lavorare con l'hardware 3D, ottimizzare la risoluzione dello schermo per il tuo monitor, multischermo, e così via. Ma ovviamente tutto è implementato in modalità di compatibilità con le versioni precedenti e se il client è Windows 7 e il PC remoto è Windows 10, RDP funzionerà utilizzando la versione del protocollo 7.0. Ma il vantaggio è che puoi aggiornare le versioni RDP a versioni più recenti, ad esempio puoi aggiornare la versione del protocollo da 7.0 (Windows 7) a 8.1. Pertanto, per comodità dei client, è necessario aumentare il più possibile le versioni della parte server, nonché eliminare i collegamenti per l'aggiornamento alle nuove versioni dei client del protocollo RDP.

Di conseguenza, disponiamo di una tecnologia semplice e relativamente sicura per la connessione remota a un PC funzionante oa un terminal server. Ma per una connessione più sicura, il nostro metodo Port Knocking può essere reso più difficile da attaccare di diversi ordini di grandezza, aggiungendo porte da controllare: puoi aggiungere 3,4,5,6 ... una porta secondo la stessa logica e in questo caso un'intrusione diretta nella tua rete sarà quasi impossibile.

File vuoti per la creazione di una connessione remota a RDP.

Fonte: habr.com

Aggiungi un commento