Muncă la distanță în birou. RDP, Port Knocking, Mikrotik: simplu și sigur

În contextul pandemiei de COVID-19 și al carantinei generale din multe țări, singura soluție pentru multe companii de a continua activitatea a fost accesul de la distanță la locurile de muncă prin internet. Există multe metode relativ sigure pentru muncă la distanță, dar având în vedere amploarea problemei, este necesară o metodă simplă pentru orice utilizator de conectare la birou, fără a necesita setări suplimentare, explicații, consultanțe obositoare și instrucțiuni lungi. Această metodă este RDP (Remote Desktop Protocol), preferată de mulți administratori. Conectarea directă la locul de muncă prin RDP rezolvă perfect problema, cu excepția unui mare neajuns: păstrarea portului RDP deschis pentru internet este foarte nesigur. Așadar, mai jos propun o metodă simplă, dar fiabilă de protecție.Muncă la distanță în birou. RDP, Port Knocking, Mikrotik: simplu și sigur

Adesea întâlnesc organizații mici care folosesc dispozitive Mikrotik pentru conectarea la internet, așa că voi explica cum se realizează acest lucru pe Mikrotik, dar metoda de protecție Port Knocking poate fi implementată ușor și pe alte dispozitive de clasă superioară cu setări similare pe routerul de intrare și firewall.

Pe scurt despre Port Knocking. Protecția externă ideală a unei rețele conectate la internet este atunci când toate resursele și porturile sunt închise din exterior de un firewall. Chiar dacă routerul configurat astfel nu răspunde pachetelor venite din exterior, el le monitorizează. Prin urmare, routerul poate fi configurat astfel încât, la primirea unei anumite (codificate) secvențe de pachete de rețea pe diferite porturi, acesta (routerul) să deschidă accesul pentru IP-ul de unde au venit pachetele la anumite resurse (porturi, protocoale etc.).

Acum să trecem la subiect. Nu voi face o descriere detaliată a configurării firewall-ului pe Mikrotik, deoarece există multe surse de calitate pe internet pentru aceasta. Ideal, firewall-ul blochează toate pachetele de intrare, dar

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

Permite traficul de intrare din conexiuni deja stabilite (established, related).
Acum configurăm Port Knocking pe 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

Acum, mai în detaliu:

primele două reguli

/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

interzic pachetele de intrare de la adresele IP care au fost incluse pe lista neagră în timpul scanării porturilor;

A treia regulă:

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

adaugă ip-ul în lista gazdelor care au efectuat primul ping corect pe portul dorit (19000);
Următoarele patru reguli:

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

crează porți de capcană pentru cei care doresc să scaneze porturile tale și, odată ce se detectează astfel de încercări, adaugă ip-ul lor în lista neagră timp de 60 de minute, în care primele două reguli nu permit acestor gazde să acceseze porturile corecte;

Următoarea regulă:

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

îndreaptă ip-ul în lista celor permise timp de 1 minut (suficient pentru a stabili conexiunea), deoarece s-a efectuat al doilea ping corect pe portul dorit (16000);

Următoarea comandă:

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

mută regulile noastre în sus în lanțul de procesare al firewall-ului, deoarece cel mai probabil avem deja configurate diferite reguli de restricționare care nu vor permite aplicarea celor nou create. Prima regulă din Mikrotik începe cu zero, dar la mine pe dispozitiv zero era ocupat cu o regulă integrată și nu a putut fi mutat — l-am mutat la 1. Așadar, ne uităm la configurațiile noastre — unde putem muta și indicăm numărul necesar.

Următoarea configurație:

/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

realizează redirecționarea unui port ales aleatoriu 33890 către portul RDP standard 3389 și ip-ul computerului sau serverului terminal dorit. Creăm astfel de reguli pentru toate resursele interne necesare, preferabil setând porturi externe neobișnuite (și diferite). Desigur, ip-urile resurselor interne trebuie să fie fie статични fie rezervate pe DHCP server.

Acum Mikrotik-ul nostru este configurat și avem nevoie de o procedură simplă pentru utilizatori pentru a se conecta la RDP-ul nostru intern. Deoarece majoritatea utilizatorilor noștri sunt Windows, creăm un simplu fișier bat și îl numim StartRDP.bat:

1.htm
1.rdp

respectiv 1.htm conține următorul cod:

<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
dați clic pe reîmprospătare pentru a reveni prin RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">

aici se găsesc două linkuri către imagini fictive care se află la adresa my_router.sn.mynetname.net — această adresă o preluăm din sistemul DDNS al Mikrotik-ului, activând mai întâi această opțiune în routerul nostru: mergem în meniul IP->Cloud — bifăm DDNS Enabled, apăsăm Apply și copiem numele DNS al routerului nostru. Aceasta este obligatorie doar atunci când adresa IP externă a routerului este dinamică sau se utilizează o configurație cu mai mulți furnizori de internet.

Portul din primul link :19000 corespunde primului port pe care trebuie să ne conectăm, iar în cel de-al doilea, cel de-al doilea. Între linkuri se află un scurt ghid care arată ce trebuie făcut dacă, din cauza unor probleme minore de rețea, conexiunea noastră este întreruptă — actualizăm pagina, portul RDP se redeschide pentru noi timp de 1 minut și sesiunea noastră este restaurată. De asemenea, textul dintre etichetele img creează pentru browser o micro întârzierere, care reduce probabilitatea livrării primului pachet pe al doilea port (16000) — până acum, în două săptămâni de utilizare (30 de persoane), nu au fost astfel de cazuri.

Apoi urmează fișierul 1.rdp, pe care îl putem configura o dată pentru toți sau separat pentru fiecare utilizator (eu am făcut astfel — este mai ușor să cheltui 15 minute în plus decât câteva ore pentru consultanța celor care nu au reușit să se descurce)

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

între setările interesante aici use multimon:i:1 — aceasta activează utilizarea mai multor monitoare — unii au nevoie de aceasta, dar nu se gândesc să o activeze singuri.

connection type:i:6 și networkautodetect:i:0 — deoarece internetul majorității este mai mare de 10 Mbps, activăm tipul de conexiune 6(rețea locală 10Mbps și mai mult) și dezactivăm networkautodetect, deoarece dacă este setat pe auto, chiar și o întârziere rară în rețea stabilizează automat o viteză redusă pentru sesiunea noastră, ceea ce poate crea întârzieri semnificative în funcționare, mai ales în programele grafice.

disable wallpaper:i:1 — dezactivăm imaginea desktopului
username:s:myuserlogin — specificăm numele de utilizator, deoarece o parte considerabilă dintre utilizatorii noștri nu își cunosc logarea
domain:s:mydomain — specificăm domeniul sau numele computerului

Dar dacă dorim să ne simplificăm sarcina de a crea o procedură de conectare, putem folosi și 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

De asemenea, puțin despre clientul RDP din Windows: MS a parcurs un drum lung în optimizarea protocolului și a părților sale de server și client, implementând multe caracteristici utile - cum ar fi suportul pentru 3D hardware, optimizarea rezoluției ecranului pentru monitorul dumneavoastră, suport multi-ecran și altele. Dar, desigur, totul este realizat în modul de compatibilitate inversă, iar dacă clientul este Windows 7, iar PC-ul la distanță este Windows 10, RDP va funcționa folosind versiunea 7.0 a protocolului. Dar din fericire, este posibil să actualizați versiunile RDP la versiuni mai recente - de exemplu, să creșteți versiunea protocolului de la 7.0 (Windows 7) la 8.1. Așadar, pentru comoditatea clienților, trebuie să maximizăm versiunile părții de server, precum și să oferim linkuri pentru actualizarea la noi versiuni ale clienților protocolului RDP.

În cele din urmă, avem o tehnologie simplă și relativ sigură pentru conectarea la un PC sau server terminal la distanță. Dar pentru o conexiune mai sigură, metoda noastră de Port Knocking poate fi complicată astfel încât să devină mai greu accesibilă prin adăugarea de porturi pentru verificare - putem aplica aceeași logică adăugând porturile 3, 4, 5, 6... și în acest caz, pătrunderea directă în rețeaua dumneavoastră va fi aproape imposibilă.

Șabloane de fișiere pentru crearea conexiunii la distanță RDP.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster