Praca zdalna w biurze. RDP, Port Knocking, Mikrotik: proste i bezpieczne

W związku z pandemią wirusa covid-19 i powszechną kwarantanną w wielu krajach, jedynym sposobem na kontynuację pracy dla wielu firm jest zdalny dostęp do miejsc pracy przez Internet. Istnieje wiele w miarę bezpiecznych metod pracy zdalnej – jednak biorąc pod uwagę skalę problemu, potrzebny jest prosty sposób na zdalne połączenie się z biurem przez każdego użytkownika i to bez konieczności dodatkowych ustawień, wyjaśnień, żmudnych konsultacji i długich instrukcji. Ta metoda jest ukochana przez wielu administratorów RDP (Remote Desktop Protocol). Bezpośrednie połączenie z miejscem pracy przez RDP idealnie rozwiązuje nasz problem, poza jedną wielką muchą w maści - utrzymywanie otwartego portu RDP dla Internetu jest bardzo niebezpieczne. Dlatego poniżej proponuję prostą, ale niezawodną metodę zabezpieczenia.Praca zdalna w biurze. RDP, Port Knocking, Mikrotik: proste i bezpieczne

Ponieważ często spotykam małe organizacje, w których urządzenia Mikrotik są używane jako dostęp do Internetu, poniżej zostanie pokazane, jak to zaimplementować na Mikrotik, ale metodę ochrony Port Knocking można łatwo zaimplementować na innych urządzeniach wyższej klasy z podobnymi ustawieniami routera wejściowego i zaporą ogniową .

Krótko o Port Knocking. Idealną ochroną zewnętrzną sieci podłączonej do Internetu jest zamknięcie wszystkich zasobów i portów z zewnątrz przez zaporę ogniową. I choć router z tak skonfigurowanym firewallem nie reaguje w żaden sposób na pakiety przychodzące z zewnątrz, to je nasłuchuje. W związku z tym można skonfigurować router tak, aby w przypadku odebrania określonej (kodowej) sekwencji pakietów sieciowych na różnych portach, on (router) dla adresu IP, z którego nadeszły pakiety, odciął dostęp do określonych zasobów (portów, protokołów, itp.).

Teraz do interesów. Nie będę szczegółowo opisywał ustawień zapory na Mikrotik - Internet jest pełen wysokiej jakości ź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

Zezwala na ruch przychodzący z ustalonych, powiązanych połączeń.
Teraz ustawiamy Port Knocking na Mikrotiku:

/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 dwie zasady

/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

zabronić pakietów przychodzących z adresów IP znajdujących 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 poprawnie wykonały pierwsze pukanie do właściwego portu (19000);
Kolejne cztery zasady to:

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

utwórz porty-pułapki dla tych, którzy chcą przeskanować twoje porty, a jeśli takie próby zostaną wykryte, umieść ich adres IP na czarnej liście na 60 minut, podczas których dwie pierwsze reguły nie dadzą takim hostom możliwości pukania do właściwych portów;

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

umieszcza ip na liście dozwolonych na 1 minutę (wystarczającą do nawiązania połączenia), ponieważ drugie poprawne stuknięcie zostało wykonane na żądanym porcie (16000);

Następne polecenie:

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

przenosi nasze reguły w górę łańcucha przetwarzania zapory, ponieważ najprawdopodobniej będziemy już mieć skonfigurowane różne reguły odmowy, które uniemożliwią działanie naszych nowo utworzonych. Pierwsza reguła w Mikrotiku zaczyna się od zera, ale na moim urządzeniu zero było zajęte przez wbudowaną regułę i nie można było jej przenieść - przeniosłem ją na 1. Dlatego patrzymy w nasze ustawienia - gdzie można ją przenieść i wskaż żądany numer.

Następne ustawienie:

/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

przekazuje dowolnie wybrany port 33890 do zwykłego portu RDP 3389 i ip komputera lub serwera terminali, którego potrzebujemy. Tworzymy takie reguły dla wszystkich niezbędnych zasobów wewnętrznych, najlepiej ustawiając niestandardowe (i różne) porty zewnętrzne. Oczywiście adres IP zasobów wewnętrznych musi być albo statyczny, albo stały na serwerze DHCP.

Teraz nasz Mikrotik jest skonfigurowany i potrzebujemy prostej procedury, aby użytkownik mógł połączyć się z naszym wewnętrznym RDP. Ponieważ mamy głównie użytkowników systemu 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">
нажмите обновить страницу для повторного захода по RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">

zawiera dwa linki do wyimaginowanych obrazków, które znajdują się pod adresem my_router.sn.mynetname.net - bierzemy ten adres z systemu Mikrotik DDNS po włączeniu go w naszym Mikrotiku: przechodzimy do menu IP-> Cloud - zaznaczamy checkbox DDNS Enabled, kliknij Zastosuj i skopiuj nazwę dns naszego routera. Ale jest to konieczne tylko wtedy, gdy zewnętrzny adres IP routera jest dynamiczny lub używana jest konfiguracja z kilkoma dostawcami Internetu.

Port w pierwszym łączu: 19000 odpowiada pierwszemu portowi, na który należy zapukać, w drugim odpowiednio do drugiego. Pomiędzy linkami znajduje się krótka instrukcja, która pokazuje, co zrobić, jeśli nagle nasze połączenie zostanie przerwane z powodu krótkich problemów z siecią - odświeżamy stronę, port RDP ponownie otwiera się dla nas na 1 minutę i nasza sesja zostaje przywrócona. Również tekst pomiędzy tagami img tworzy mikroopóźnienie dla przeglądarki, co zmniejsza prawdopodobieństwo dostarczenia pierwszego pakietu na drugi port (16000) – jak dotąd nie było takich przypadków w ciągu dwóch tygodni użytkowania (30 ludzie).

Dalej jest plik 1.rdp, który możemy skonfigurować po jednym 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 tego rozgryźć)

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 interesujących ustawień tutaj jest użycie multimon: i: 1 - obejmuje to korzystanie z wielu monitorów - niektórzy tego potrzebują, ale sami nie pomyślą o włączeniu tego.

typ połączenia: i: 6 i networkautodetect: i: 0 - ponieważ większość Internetu ma prędkość powyżej 10 Mb/s, to włącz typ połączenia 6 (sieć lokalna 10 Mb/s i wyżej) i wyłącz autowykrywanie sieci, ponieważ jeśli domyślnie (auto) , wtedy nawet rzadkie małe opóźnienie sieci automatycznie ustawia naszą sesję na niską prędkość na długi czas, co może powodować zauważalne opóźnienia w pracy, szczególnie w programach graficznych.

wyłącz tapetę: i: 1 - wyłącz obraz pulpitu
username:s:myuserlogin - określamy login użytkownika, ponieważ znaczna część naszych użytkowników nie zna swojego loginu
domain:s:mydomain — podaj domenę lub nazwę komputera

Ale jeśli chcemy uprościć nasze zadanie tworzenia procedury połączenia, możemy również użyć 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

Również trochę o kliencie RDP w systemie Windows: MS przeszedł długą drogę w optymalizacji protokołu oraz jego części serwerowej i klienckiej, zaimplementował wiele przydatnych funkcji - takich jak praca ze sprzętowym 3D, optymalizacja rozdzielczości ekranu dla twojego monitora, multiscreen, i tak dalej. Ale oczywiście wszystko jest zaimplementowane w trybie kompatybilności wstecznej, a jeśli klientem jest Windows 7, a zdalny komputer to Windows 10, wówczas RDP będzie działać przy użyciu protokołu w wersji 7.0. Zaletą jest jednak to, że można aktualizować wersje RDP do nowszych wersji — na przykład można uaktualnić wersję protokołu z 7.0 (Windows 7) do 8.1. Dlatego dla wygody klientów konieczne jest jak największe zwiększanie wersji części serwerowej, a także zrzucanie linków do aktualizacji do nowych wersji klientów protokołu RDP.

Dzięki temu mamy prostą i stosunkowo bezpieczną technologię zdalnego łączenia się z działającym komputerem PC lub serwerem terminalowym. Jednak w celu zapewnienia bezpieczniejszego połączenia naszą metodę Port Knocking można utrudnić o kilka rzędów wielkości, dodając porty do sprawdzenia — można dodać 3,4,5,6… port zgodnie z tą samą logiką , aw tym przypadku bezpośrednie wtargnięcie do Twojej sieci będzie prawie niemożliwe.

Puste pliki do tworzenia zdalnego połączenia z RDP.

Źródło: www.habr.com

Dodaj komentarz