Zdalna praca w biurze. RDP, Port Knocking, Mikrotik: prosto i bezpiecznie

W związku z pandemią wirusa covid-19 i ogólnym kwarantanną w wielu krajach jedynym sposobem dla wielu firm na kontynuowanie pracy było zdalne połączenie do stanowisk pracy przez internet. Istnieje wiele stosunkowo bezpiecznych metod pracy zdalnej, ale biorąc pod uwagę skalę problemu, potrzebny jest prosty sposób zdalnego połączenia z biurem, nie wymagający dodatkowych ustawień, wyjaśnień, męczących konsultacji ani długich instrukcji. Tym sposobem jest ulubione przez wielu administratorów RDP (Remote Desktop Protocol). Bezpośrednie połączenie do stanowiska pracy za pomocą RDP idealnie rozwiązuje nasz problem, ale jest jeden duży minus — otworzenie portu RDP dla internetu jest bardzo niebezpieczne. Dlatego poniżej proponuję prostą, ale niezawodną metodę ochrony.Zdalna praca w biurze. RDP, Port Knocking, Mikrotik: prosto i bezpiecznie

Często spotykam się z małymi organizacjami, które jako dostęp do internetu używają urządzeń Mikrotik, więc poniżej pokażę, jak to zrealizować na Mikrotik, ale metoda ochrony Port Knocking jest łatwo realizowalna także na innych urządzeniach wyższej klasy przy podobnych ustawieniach wejściowego routera i zapory.

Krótko o Port Knocking. Idealna zewnętrzna ochrona sieci podłączonej do internetu polega na tym, że wszystkie zasoby i porty są zamknięte na zewnątrz przez zaporę. Choć router z tak skonfigurowaną zaporą nie reaguje na przychodzące z zewnątrz pakiety, to je nasłuchuje. Można więc skonfigurować router tak, aby po odebraniu określonej (kodowej) sekwencji pakietów sieciowych na różne porty, otwierał on dostęp do określonych zasobów (portów, protokołów itd.) dla IP, z którego pochodziły pakiety.

Teraz przejdźmy do rzeczy. Nie zamierzam szczegółowo opisywać konfiguracji zapory na Mikrotik, gdyż w internecie jest mnóstwo jakościowych źródeł na ten temat. W idealnym przypadku zapora blokuje wszystkie przychodzące pakiety, ale

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

Pozwala na ruch przychodzący z już ustanowionych (established, related) połączeń.
Teraz konfigurujemy Port Knocking na 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

Teraz bardziej szczegółowo:

pierwsze dwa reguły

/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

blokują przychodzące pakiety z adresów IP, które znalazły się na czarnej liście podczas skanowania portów;

Trzecia zasada:

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

dodaje IP do listy hostów, które wykonały poprawne pierwsze uderzenie na odpowiedni port (19000);
Następujące cztery zasady:

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

tworzą pułapki portowe dla tych, którzy chcą przeskanować Twoje porty, a po wykryciu takich prób dodają ich IP do czarnej listy na 60 minut, w trakcie których pierwsze dwa przepisy nie pozwolą tym hostom na skontaktowanie się z odpowiednimi portami;

Następna zasada:

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

dodaje IP do listy dozwolonej na 1 minutę (wystarczająco długo nawiązać połączenie), ponieważ wykonano drugi właściwy kontakt z odpowiednim portem (16000);

Następna komenda:

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

przesuwa nasze zasady w górę w łańcuchu przetwarzania zapory, ponieważ najprawdopodobniej mamy już skonfigurowane różne zasady blokujące, które nie pozwolą na działanie naszych nowo utworzonych zasad. Najpierwsza zasada w MikroTik zaczyna się od zera, ale na moim urządzeniu zero było zajęte przez wbudowaną zasadę i nie można było jej przesunąć — przesunąłem na 1. Dlatego spójrzmy na nasze ustawienia — dokąd można przesunąć i podajmy odpowiedni numer.

Następna konfiguracja:

/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

przekierowuje dowolnie wybrany port 33890 na standardowy port RDP 3389 i IP wymaganego komputera lub serwera terminalowego. Takie zasady tworzymy dla wszystkich potrzebnych zasobów wewnętrznych, najlepiej ustalając niestandardowe (i różne) porty zewnętrzne. Oczywiście, że IP wewnętrznych zasobów powinny być statyczne lub przypisane do DHCP. serwerze.

Teraz nasz MikroTik jest skonfigurowany i potrzebujemy prostego procesu połączenia dla użytkownika do naszego wewnętrznego RDP. Ponieważ to głównie użytkownicy Windows, tworzymy prosty plik bat i nazywamy go StartRDP.bat:

1.htm
1.rdp

odpowiednio 1.htm zawiera następujący kod:

<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
kliknij, aby odświeżyć stronę i spróbować ponownie przez RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">

Tutaj znajdują się dwa linki do fikcyjnych obrazków, które są dostępne pod adresem my_router.sn.mynetname.net — ten adres bierzemy z systemu DDNS Mikrotika, włączając to wcześniej w naszym Mikrotiku: przechodzimy do menu IP->Cloud — zaznaczamy DDNS Enabled, klikamy Apply i kopiujemy nazwę DNS naszego routera. Jest to konieczne tylko wtedy, gdy zewnętrzny adres IP routera jest dynamiczny lub używamy konfiguracji z kilkoma dostawcami internetu.

Port w pierwszym linku:19000 odpowiada pierwszemu portowi, z którym należy się łączyć, w drugim odpowiednio drugiemu. Między linkami znajduje się krótka instrukcja, która pokazuje, co zrobić, jeśli nasza sesja z powodu krótkich problemów w sieci została przerwana — odświeżamy stronę, port RDP znowu się otwiera na 1 minutę i nasza sesja zostaje przywrócona. Tekst między tagami img tworzy mikroopóźnienie w przeglądarce, co zmniejsza prawdopodobieństwo dostarczenia pierwszej paczki na drugi port (16000) — podczas dwóch tygodni korzystania (30 osób) takich przypadków nie było.

Następnie mamy plik 1.rdp, który możemy skonfigurować jeden dla wszystkich lub osobno dla każdego użytkownika (ja tak zrobiłem — łatwiej spędzić dodatkowe 15 minut, niż kilka godzin na konsultacjach z tymi, którzy nie mogli się połapać).

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

Z ciekawych ustawień jest use multimon:i:1 — to włącza korzystanie z wielu monitorów — niektórzy tego potrzebują, a sami nie pomyślą o włączeniu.

connection type:i:6 i networkautodetect:i:0 — ponieważ internet u większości użytkowników jest powyżej 10 Mbit, włączamy typ połączenia 6 (lokalna sieć 10 Mbit i więcej) i wyłączamy networkautodetect, ponieważ jeśli zostawimy to na auto, nawet rzadkie małe opóźnienie w sieci automatycznie ustawia obniżoną prędkość dla naszej sesji na długi czas, co może powodować zauważalne opóźnienia w pracy, zwłaszcza w programach graficznych.

disable wallpaper:i:1 — wyłączamy obrazek pulpitu.
username:s:myuserlogin — wpisujemy login użytkownika, ponieważ znaczna część naszych użytkowników nie zna swojego loginu.
domain:s:mydomain — wpisujemy domenę lub nazwę komputera.

Jednak jeśli chcemy ułatwić sobie zadanie przy tworzeniu procedury łączenia, możemy skorzystać z 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

Trochę o kliencie RDP w systemie Windows: Microsoft przeszedł długą drogę optymalizacji protokołu oraz jego części serwerowej i klienckiej, wprowadzając wiele przydatnych funkcji — takich jak obsługa sprzętowego 3D, optymalizacja rozdzielczości ekranu do twojego monitora, obsługa wielu ekranów i inne. Oczywiście wszystko zostało wdrożone w trybie zgodności wstecznej i jeśli klient Windows 7, a zdalny komputer działa na Windows 10, to RDP będzie działać, używając protokołu wersji 7.0. Na szczęście można aktualizować wersje RDP do nowszych — na przykład można zwiększyć wersję protokołu z 7.0 (Windows 7) do 8.1. Dlatego dla wygody klientów warto maksymalnie zaktualizować wersje części serwerowej oraz dostarczyć linki do aktualizacji nowszych wersji klientów protokołu RDP.

Ostatecznie mamy prostą i stosunkowo bezpieczną technologię zdalnego połączenia z komputerem roboczym lub serwerem terminalowym. Jednak dla jeszcze bezpieczniejszego połączenia nasza metoda Port Knocking może być skomplikowana, aby zmylić atakującego na kilka poziomów, poprzez dodanie portów do sprawdzenia — można w ten sam sposób dodać porty 3, 4, 5, 6... i w takim przypadku bezpośrednie wtargnięcie do twojej sieci stanie się prawie niemożliwe.

Szablony plików do stworzenia zdalnego połączenia z RDP.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster