Uruchomienie firewalla i routingu dla sieci lokalnej

Podstawowa konfiguracja

Do tego służą dwa narzędzia - ipchains (starsze, wychodzące już z użycia) i ich następca, iptables. W większości dystrybucji domyślnie zainstalowane są obydwie, ale wszyscy znawcy tematu zalecają rezygnację z ipchains i korzystanie z iptables, tak więc będzie mowa tylko o tychże.

Iptables to tak naprawdę zestaw reguł, mówiących kernelowi jak ma filtrować przechodzące przez niego pakietu i co ma z nimi robić. Aktualny zestaw reguł można zobaczyć przy pomocy polecenia:

iptables -L

Ustawić swoje reguły można zasadniczo na trzy, równoważne sposoby:

Składnia skryptu jest bardzo prosta - jest to seria poleceń "iptables -A...", takich samych jakie wydawałoby się ręcznie. Warto zacząć od polecenia "iptables -F", likwidującego wszystkie poprzednio ustanowione reguły - inaczej kolejne uruchomienia skryptu po wprowadzeniu do niego zmian będą powodowały gromadzenie się reguł, co może się źle skończyć.

Jeśli chodzi o plik /etc/sysconfig/iptables, jego składnia jest trochę inna; najlepszym chyba sposobem jego utworzenia jest ustawienie reguł (wklepując pojedynczo lub przy pomocy skryptu), a następnie, kiedy już wszystko działa jak powinno, wydanie polecenia: "iptables-save > /etc/sysconfig/iptables".

Ustawianie iptables to jest cała filozofia, ale dla potrzeb pojedynczego komputera, nie świadczącego żadnych usług na zewnątrz (tj. nie będącego serwerem www, ftp albo poczty) ustawienie stateful inspection powinno być wystarczającym zabezpieczeniem, przynajmniej przez prymitywnymi internetowymi chuliganami. Chodzi o to, żeby kernel wpuszczał tylko pakiety związane z połączeniem przez nas nawiązanym - w efekcie nikt z zewnątrz nie może zainicjować połączenia z naszym komputerem. I mniej więcej o to nam chodzi. Oto przykładowa konfiguracja iptables dla pojedynczego komputera.

UWAGA: To jest tylko przykład, konfiguracja podstawowa, bardzo prymitywna, dobra na początek, ale obowiązkiem każdego przytomnego właściciela komputera jest stała rozbudowa zabezpieczeń, nie tylko po to żeby samemu być bezpiecznym, ale także po to żeby nikt nie wykorzystał twojego komputera do popełnienia naprawdę poważnych przestępstw. Dlatego najlepiej zajrzeć od czasu do czasu na jakąś stronę poświęconą bezpieczeństwu albo na listę typu "bugtraq" - np w zamieszczonych tutaj przykładowych konfiguracjach iptables jest łatka na dziurę wykrytą w maju tego roku.

Konfiguracja dla sieci lokalnej (maskarada)

W dużym skrócie, maskowanie adresów, czyli tzw. maskarada, polega na tym, że komputer podłączony do internetu (nasz router) z zewnątrz jest widziany jako jeden komputer mający jeden adres IP. Pakiety przychodzące do niego z sieci lokalnej, a przeznaczone na zewnątrz, są przez niego "opakowywane" tak że wyglądają jakby pochodziły od niego; wracające "rozpakowuje" i przekazuje do właściwego adresata.

Żeby maskaradę uruchodmić, trzeba do skryptu konfigurującego iptables dodać jedną linię, określającą zasady "nat", czyli net address translation. Oprócze tego potrzebne będzie jeszcze parę linii, tak jak w następującym przykładzie (UWAGA: jak powyżej!!!).

Jest też w internecie dostępny "automat" do generowania ustawień iptables - pod adresem http://e5ke.dk/iptables. Podaje się podstawowe parametry swojej sieci i otrzymuje się dość fachowo przygotowany skrypt. Nie próbowałem tak otrzymanego skryptu u siebie stosować, więc nie daję głowy że będzie działać, ale spróbować być może warto.

Ustawienia systemowe

Dodatkowe zabezpieczenia przed różnymi rodzajami ataków (na podstawie tekstu Karola Krysiaka ze strony www.net.pagina.pl).

Chodzi tutaj o ustawienie niektórych parametrów kernela - robi się to zmieniając zawartość niektórych plików systemowych z "1" na "0" lub odwrotnie - tutaj tylko prosta instrukcja, po szczegóły i wyjaśnienie należy udać się na strony Karola.

Ustawiać można ręcznie albo skryptami - najprościej dopisać do skryptu stawiającego firewall odpowiednie komendy o składni:

echo [0 lub 1] > [nazwa_pliku_wraz_ze_ścieżką]

Zawartości plików powinny być następujące:

/proc/sys/net/ipv4/icmp_echo_ignore_all
uwaga: przy tym ustawieniu komputer nie odpowiada na pingi !
1
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts1
/proc/sys/net/ipv4/conf/all/accept_source_route0
/proc/sys/net/ipv4/conf/all/accept_redirects0
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses1
/proc/sys/net/ipv4/conf/all/rp_filter;1
/proc/sys/net/ipv4/conf/all/log_martians1
/proc/sys/net/ipv4/tcp_syncookies1

Bardzo solidnie temat jest rozpracowany w serwisie SecurityFocus, w dziale "firewalls" - jest tam m.in. sześć przykładowych zestawów reguł: Security Focus - firewall rules

Problemy z instalacją

Do prawidłowego działania iptables musi być załadowane kilka modułów - przede wszystkim moduł ip_tables, mogą być potrzebne także moduły ip_conntrack i ip_conntrack_ftp. Jeśli czegoś brakuje, to iptables powiedzą przy próbie uruchomienia. Moduły ładuje się poleceniem:

modprobe [nazwa_modułu]

Jeśli przy próbie załadowania modułu ip_tables pojawia się komunikat "device or resource busy", to prawdopodobnie jest już załadowany moduł ip_chains. Sprawdzić to można poleceniem

lsmod

a usunąć

modprobe -r ip_chains

i wszystko powinno grać :-)

Przypominam też, że mając takie ustawienie jak w przykładach nie możemy świadczyć żadnych usług, również udostępniać empetrójek... Ale gnutella działa, i Gadu-Gadu również.