Zabezpieczanie usług (serwerów) w sieci wewnętrznej za pomocą OpenBSD
11.02.2013 | aktual.: 11.02.2013 22:32
Załóżmy, że mamy w naszej sieci uruchomioną usługę, którą trzeba udostępnić w internecie. Udostępnienie tej usługi w internecie spędza nam sen z powiek, bowiem nie mamy pewności czy ktoś nieuprawniony nie będzie próbował z niej skorzystać. Niech taką usługą będzie np. Zdalny Pulpit. Od dawna panuje przekonanie, że produkty firmy Microsoft nie oferują zbyt wysokiego poziomu zabezpieczeń. O ile Windows Server posiada sporo opcji podnoszących bezpieczeństwo tej usługi jak choćby wybranie mocniejszego algorytmu szyfrowania, używania certyfikatów, o tyle Windows XP Professional takich możliwości już nie ma. Każdy kto administrował firewallem z pewnością zauważył setki lub nawet tysiące prób połączeń z krajów w których z całą pewnością nie przebywa osoba uprawniona do korzystania z danej aplikacji. W przypadku odkrycia nowej luki w aplikacji, bardzo łatwo możemy zostać skutecznie zaatakowani. Dobrym pomysłem wydaje się więc otwarcie w firewallu portu tylko dla jednego lub kilku adresów ip, z których użytkownik będzie się łączył. Cała reszta świata będzie miała zabroniony dostęp już na poziomie firewalla. Jeśli wiemy, że użytkownik będzie łączył się ze Zdalnym Pulpitem z jednego lub kilku adresów ip, bardzo łatwo można napisać odpowiednią regułkę otwierającą odpowiedni port w firewallu praktycznie w każdym systemie. Gorzej wygląda sprawa jeśli użytkownik przemieszcza się po całym kraju. Nie możemy wówczas przewidzieć spod jakich adresów będą przychodziły połączenia. Wobec tego najmniejszym złem będzie otworzenie portu w firewallu dla całego kraju (co skutecznie ogranicza działalność skanerów sieciowych, botów i innych szkodliwych programów z ich azjatyckiego zagłębia). Łatwo powiedzieć dla całego kraju, ale jak to zrobić? Przecież to cała masa adresów ip, nawet jeśli użyjemy pul adresowych CIDR, które dostępne są np. tutaj. W OpenBSD jest to niezwykle proste. Filtr pakietów pf posiada ciekawą opcję odpowiednią do takich zastosowań - tabele. W tabele można wpisać adresy ip które filtr pakietów będzie dopuszczał lub nie do naszych serwerów. Wystarczy pobrać na dysk listę adresów ip i wskazać filtrowi pakietów ścieżkę do niej aby zacząć jej używać. Całość konfiguracji odbywa się w pliku /etc/pf.conf. Na początek tworzymy nową tabelę i wskazujemy lokalizację pliku z adresami na dysku:
[code=]table <rdp_allowed> persist file "/etc/pf/rdp_allowed"[/code]
Drugim i ostatnim krokiem jest wykorzystanie jej w konkretnej regule filtra:
[code=]pass in on vr0 inet proto tcp from <rdp_allowed> to (vr0) port 3389 rdr‑to 192.168.4.33[/code]
Od tego momentu do naszego Zdalnego Pulpitu dopuszczone są wyłącznie adresy ip w tym przypadku z Polski, co bardzo zawęża pulę potencjalnych atakujących, bo jeśli ktoś analizował logi filtra pakietów, z pewnością zauważył, że 99% niechcianych połączeń pochodzi z Azji i wschodniej Europy. Ktoś powie: “No dobrze, ale każdy adres ip można podrobić albo użyć proxy”. Pewnie, ale atakujący najpierw musi wiedzieć, że w naszej sieci działają jakieś publicznie dostępnie usługi, a blokowanie połączeń już na etapie routera brzegowego dość skutecznie ogranicza pole manewru automatycznych skanerów sieci. Doświadczonego crackera w ten sposób nie zatrzymamy ale całe mnóstwo script kiddies na pewno. W podobny sposób możemy zabezpieczyć naszą sieć przed niektórymi atakami DDoS, ale o tym innym razem.