Linux jako firewall

Ochrona przed atakami z Internetu to jedno z podstawowych zadań administratora systemu, a coraz częściej także każdego użytkownika komputera. Zintegrowany z jądrem Linuksa filtr pakietów umożliwia budowę wydajnej zapory, a niejako przy okazji pozwala też na pewną kontrolę nad poczynaniami użytkowników w lokalnej sieci.

Ochrona przed atakami z Internetu to jedno z podstawowych zadań administratora systemu, a coraz częściej także każdego użytkownika komputera. Zintegrowany z jądrem Linuksa filtr pakietów umożliwia budowę wydajnej zapory, a niejako przy okazji pozwala też na pewną kontrolę nad poczynaniami użytkowników w lokalnej sieci.

Gdy nawiązujesz połączenie z Internetem, automatycznie wystawiasz się na potencjalne zagrożenie. Ostatnio praktycznie nie ma tygodnia, by telewizja, radio i prasa nie donosiły o nowych wirusach, robakach, trojanach czy też lukach zabezpieczeń w systemach operacyjnych.

Problem można, na szczęście, stosunkowo łatwo rozwiązać i za naprawdę niewygórowaną sumę kupić router z firewallem, który będzie chronić lokalną sieć. Mimo to jest wiele powodów, aby samemu bliżej zapoznać się z problemem. Jednym z nich mogą być choćby pieniądze zaoszczędzone na zakupie routera.

Nie sposób jednak przecenić - szczególnie w dużych sieciach - znacznie większych możliwości, jakie daje samodzielnie zestawiony firewall pracujący z Linuksem. To nie tylko znacznie bardziej elastyczna konfiguracja, ale także o wiele dokładniejsze protokołowanie wszystkich zdarzeń, co umożliwia z jednej strony łatwiejsze rozpoznawanie ataków, łącznie z śledzeniem wielkości strumienia napływających danych. Firewall taki pozwala również efektywnie ograniczyć połączenia wychodzące - funkcja, która w równym stopniu uniemożliwia użytkownikom niepożądane współdzielenie plików, jak i blokuje komunikację z czyhającymi ewentualnie w sieci trojanami.

1. Konfiguracja - najlepiej ręcznie

Narzędzie YaST2 umożliwia konfigurację jedynie tych ustawień, które dotyczą lokalnego komputera.

Narzędzie YaST2 umożliwia konfigurację jedynie tych ustawień, które dotyczą lokalnego komputera.

Sercem każdego firewalla pracującego z Linuksem jest program iptables. Sam program nie wykonuje funkcji właściwych dla firewalla, a raczej tworzy interfejs do zintegrowanej z jądrem Linuksa architektury filtru sieciowego. Filtr ten, utworzony w ramach projektu Netfilter ( http://www.netfilter.org ), zawiera wszystkie funkcje potrzebne do budowy firewalla.

Funkcjami filtru sterują różne opcje, które należy przypisać narzędziu iptables w postaci parametrów. W ten sposób można tworzyć kolejne etapy, przez które musi przejść pakiet danych, aby mógł zostać przesłany dalej, przetworzony czy odrzucony. Tak utworzonymi regułami zarządza "procesor" firewalla, rezydujący w pamięci głównej komputera. Dzięki temu można wprowadzać zmiany również w trakcie pracy.

Niestety, w tym wypadku zalety są jednocześnie wadami: architektura filtru sieciowego jest tak elastyczna, że początkujący użytkownik z dużym trudem poznaje mechanizm jego działania. Oprócz tego nie ma głównego pliku konfiguracyjnego, który stanowiłby zbiór obowiązujących reguł. Dlatego w Internecie można znaleźć wiele programów pomocniczych, które mają ułatwić konfigurację firewalla. W wielu przypadkach są to udane próby, ale mają tę samą wadę - gdy coś nie działa właściwie, użytkownik nadal nie wie, jak zlokalizować błąd.

Podstawowe drogi pakietu danych z punktu widzenia routera - wejście, wyjście i przekazanie.

Podstawowe drogi pakietu danych z punktu widzenia routera - wejście, wyjście i przekazanie.

Ochrona nie pojedynczego komputera, ale na przykład całej sieci przekracza możliwości wielu tych rozwiązań. Dotyczy to również firewalla zintegrowanego z SuSE Linux 9.0. Narzędzie YaST2 pozwala jedynie na konfigurację ustawień lokalnego komputera. Pokonanie tego ograniczenia wymaga ręcznej edycji pliku konfiguracyjnego /etc/sysconfig/SuSEfirewall2. To zadanie praktycznie niewykonalne dla osoby niewtajemniczonej. Pozostaje zatem wziąć się do nauki. Z czasem okaże się, że nie jest to aż tak trudne, jak się w pierwszej chwili wydawało.

2. Sposób pracy iptables

Na potrzeby naszego przykładu przyjmiemy założenie, że mamy do czynienia z komputerem, który pracuje jako router między Internetem a siecią lokalną. Na początek rozpatrzmy, z jakimi rodzajami transmisji możemy mieć do czynienia. Są trzy możliwości:

  • Nadszedł pakiet danych przeznaczony właśnie do tego komputera.
  • Dane, które nadeszły, przeznaczone są do innego komputera w sieci i muszą być przekazane dalej.
  • Aplikacja działająca na komputerze sama wysyła dane.
Odpowiednio do tego można zdefiniować trzy główne zadania: przyjmowanie (input), przekazywanie (forward) i wysyłanie (output) danych. Filtr sieciowy udostępnia listy reguł o takich samych nazwach; narzędzie iptables może się odwoływać do tych list. Same listy nazywane są często łańcuchami (chains).

Skuteczne tłumaczenie adresów (NAT) wymaga dodatkowych przekształceń pakietów.

Skuteczne tłumaczenie adresów (NAT) wymaga dodatkowych przekształceń pakietów.

Takie podejście jest dużym uproszczeniem, które nie uwzględnia dwóch przypadków specjalnych. Pierwszy to zastosowanie tłumaczenia adresów (Network Address Translation, NAT). Tutaj router "udaje" przed innymi komputerami w Internecie, że jest wyłącznym nadawcą pakietów pochodzących z lokalnej sieci. W tym celu do każdego pakietu wychodzącego wstawia jako adres nadawcy przydzielony mu przez dostawcę usług internetowych adres IP. Aby nadchodzące z Internetu odpowiedzi mogły trafić do właściwego odbiorcy, muszą zostać zaopatrzone we właściwy adres - inny niż adres routera, bo w przeciwnym razie router przetwarzałby pakiety, zamiast przesyłać je do odbiorcy w lokalnej sieci. W przypadku pakietów przychodzących trzeba zmienić adres na właściwy adres odbiorcy w sieci LAN, by mógł on trafić do lokalnego komputera; w przypadku pakietów wychodzących trzeba na koniec procesu przetwarzania zmienić adres nadawcy na adres routera.

Aby umożliwić również i to, iptables zawiera oprócz łańcuchów standardowej tabeli dodatkowo filtry tabeli nat, która z kolei zawiera oprócz łańcuchów input, output i forward także oba łańcuchy prerouting oraz postrouting.

Tłumaczenie adresów (NAT) to nie jedyna możliwość manipulacji pakietów. Procedura o nazwie "mangling" (tzw. wikłanie nazw) pozwala na przypisanie specjalnych atrybutów poszczególnym pakietom. Za pomocą tej funkcji można zrealizować pewne zadania specjalne, na przykład rudymentarną obsługę Quality of Services także w protokole IPv4.

Aby całość zadziałała, wikłanie nazw można przeprowadzać na różnych etapach przetwarzania pakietu: przed wywołaniem funkcji NAT, przed zadziałaniem filtrów wejściowych, a także przed filtrem wyjściowym i przed filtrem dalszego przekazania. Funkcja wikłania pakietów ma jednak niewielkie znaczenie dla pracy firewalla, a więc łańcuchy input, output, forward, prerouting i postrouting, znajdujące się w tabeli mangle można po prostu pozostawić bez zmian.

Nie tylko tabele filtrów mangle i nat mają swoje nazwy. Ma ją również tabela standardowa - filter. Jeżeli więc w wywołaniu iptables nie podasz konkretnej tabeli, nowe reguły zostaną automatycznie umieszczone w tabeli filtrów.


Zobacz również