Port Knocking – jako zabezpieczenie dostępu do routera i usług w sieci LAN
Jednym z problemów przed jakimi staje administrator sieci jest umożliwienie dostępu do zasobów sieci firmowej z zewnątrz. Oczywistym rozwiązaniem tego problemu jest konfiguracja połączeń VPN opisywana już wcześniej na stronach serwisu MikroTik Academy. W pewnych sytuacjach, może zaistnieć potrzeba zapewnienia dostępu dla urządzeń zdalnych, na których nie mamy możliwości uruchomienia klienta VPN (np. korzystamy nie z naszego komputera np kafejka internetowa lub pożyczony komputer). W takiej sytuacji możemy zastanowić się nad skorzystaniem z mechanizmu Port Knocking. Na wstępnie zaznaczę, iż metoda ta nie jest tak bezpieczna jak VPN i nie wprowadza szyfrowania komunikacji !!!
Czym jest port knocking ?
Port kocking jest to rozwiązaniem bazującym na odpowiedniej konfiguracji reguł firewall’a. Domyślnie cały ruch, z zewnętrznych adresów, przychodzący do naszego routera będziemy blokować. Zrobimy jednak wyjątek dla adresów IP, które zostaną dodane jako wyjątek w regułach naszego firewall’a. Aby dany adres został dodany jako wyjątek, musi spełnić określone przez nas warunki, na przykład:
Osoba chcąca uzyskać dostęp do danego zasobu musi uprzednio wykonać próbę połączenia na port 3043/TCP naszego routera, a następnie w ciągu 60 sekund na port 6602/TCP. W przypadku, gdy spełnione zostaną oba warunki, adres IP trafi na listę adresów zaufanych. Wspomniana tutaj sekwencja jest znana tylko osobie, której chcemy odblokować dostęp zdalny. Należy zwrócić uwagę, iż przy pomocy narzędzi wykonujących skanowanie portów, osoba, która potencjalnie nie zna sekwencji 3043/TCP, 6602/TCP może również uzyskać dostęp. Dlatego konieczne jest zabezpieczenie się przed skanowaniem portów.
W poniższym artykule skonfigurujemy Port Knocking dla:
- dostępu do routera z zewnątrz za pomocą WinBox
- dostępu do komputera w sieci LAN, na którym pracuje usługa RDP
Zarządzanie naszym routerem z zewnątrz
/ip firewall filter add action=accept chain=input comment=”ZEZWOL ESTABLISHED,RELATED na WAN” connection-state=established,related
in-interface=ether1
/ip firewall filter add action=drop chain=input comment=”BLOKUJ HOSTY SKANUJACE PORTY” in-interface=ether1 src-address-list=port_scanners
/ip firewall filter add action=add-src-to-address-list address-list=port_scanners address-list-timeout=23h59m59s chain=input comment=”WYKRYWANIE SKANOWANIA PORTOW” in-interface=ether1 protocol=tcp psd=21,5s,3,1
/ip firewall filter add action=add-src-to-address-list address-list=port_knocking_stage_1 address-list-timeout=1m chain=input comment=”PROBA POLACZENIA na PORT 3043/TCP” dst-port=3043 in-interface=ether1 protocol=tcp
/ip firewall filter add action=add-src-to-address-list address-list=port_knocking_stage_2 address-list-timeout=1m chain=input comment=”PROBA POLACZENIA na PORT 6602/TCP” dst-port=6602 in-interface=ether1 protocol=tcp src-address-list=port_knocking_stage_1
/ip firewall filter add action=accept chain=input comment=”ZEZWOL NA POLACZENIA NA PORT 8291/TCP – WINBOX GDY ADRES na ADDRESS LIST” dst-port=8291 in-interface=ether1 protocol=tcp src-address-list=port_knocking_stage_2
/ip firewall filter dst-port=8291 in-interface=ether1 protocol=tcp src-address-list=port_knocking_stage_2 add action=drop chain=input comment=”ZABLOKUJ WSZYSTKO CO PRZYCHODZI na WAN” in-interface=ether1
Poniżej opis reguł:
0 – akceptujemy wszystkie połączenia do naszego routera będące w stanie ESTABLISHED, RELATED
1 – blokujemy połączenia przychodzące z hostów które znajdują się na liście port_scanners
2 – za pomocą opcji PSD (Port Scan Detection) wykrywamy hosty przeprowadzające skanowanie portów i dodajemy je do address-listy port_scanners
3 – dodajemy do address-listy port_knocking_stage_1 hosta, który próbował połączyć się na port 3043 naszego routera
4 – dodajemy do address-listy port_knocking_stage_2 hosta, który znajduje się już na liście port_knocking_stage_1 i dodatkowo próbował połączyć się na port 6602 naszego routera
5 – zezwalamy na możliwość połączenia się do naszego routera na port 8291 (WinBox) dla hostów znajdujących się na address-list port_knocking_stage_2
6 – blokujemy cały pozostały ruch przychodzący do naszego routera
Mechanizm PSD (Port Scan Detection)
Weight Treshold – ile punktów należy uzbierać aby dla tego hosta wykonała się akcja polegająca na dodaniu go do address-listy port_scanners
Delay-Treshold – przedział czasu w jakim zbierane są punkty
Low Port Weight – jednorazowa próba połączenia na dowolny port z zakresu 0-1023 skutkuje naliczeniam 3 punktów karnych
High Port Weight – jednorazowa próba połączenia na dowolny port z zakresu 1024-65535 skutkuje naliczeniem 1 punktu karnego
Każda próba połączenia na port naszego routera skutkuje przyznaniem 1 lub 3 punktów karnyc. Jeżeli dany host uzbiera w ciągu 5 sekund 21 takich punktów, trafi na 24 godziny na address-list port_scanners (a ponieważ istnieje reguła 1, w efekcie ruch z tego hosta zostanie zablokowany na firewall’u).
Przekierowanie portów – Remote Desktop
Korzystając z faktu, iż mechanizm port knocking uruchomiliśmy w kroku powyżej, wystarczy, że dodamy regułę dst-nat, działającą dla wszystkich hostów znajdujących się na liście port_knocking_stage_2
/ip firewall nat add action=masquerade chain=srcnat out-interface=ether1 src-address=10.20.100.0/24
/ip firewall nat add action=dst-nat chain=dstnat dst-port=3389 in-interface=ether1 protocol=tcp src-address-list=port_knocking_stage_2 to-addresses=10.20.100.10 to-ports=3389
Możemy teraz przetestować czy nasza konfiguracja działa poprawnie. Do wykonania próby połączenia na port 3043, a później 6602 możemy wykorzystać dowolne narzędzie dostępne w naszym systemie operacyjnym: telnet, putty, ssh lub nawet przeglądarkę www. Aby zautomatyzować korzystanie z mechanizmu port knocking możemy także skorzystać z gotowych narzędzi, takich jak Windows Port Knock Application dostępnej pod adresem http://gregsowell.com/?p=2020.