Filtr pakietów to takie oprogramowanie, które sprawdza nagłówki (ang. header) pakietów w trakcie jak przechodzą przez maszynę na której działa i decyduje o ich losie. Może zdecydować, że pakiet zostanie odrzucony (ang. DROP, tzn. tak jakby pakiet nigdy nie dotarł), zaakceptowany (ang. ACCEPT, tzn. pozwoli mu przejść), lub coś bardziej skomplikowanego.
W Linuksie, filtrowanie pakietów jest wbudowane w kernel (jako moduł lub po prostu wbudowane) i jest parę jeszcze sprytniejszych rzeczy które możesz zrobić, ale generalnie idea polega na sprawdzaniu nagłówków i decydowaniu o losie pakietów.
Kontrola. Bezpieczeństwo. Czujność.
kiedy używasz Linuksa by połaczyć twoją wewnętrzną sieć z inną siecią (powiedzmy z Internetem) masz okazję wpuścić trochę różnych typów ruchu i odrzucić inne. Na przykład, nagłówek pakietu posiada adres docelowy pakietu, więc możesz odrzucać pakiety które podróżują do określonych części sieci zewnętrznej. Innym przykładem może być to: używam Netscape do oglądania archiwów Dilbert'a. Jest tam masa reklam pochodzących z adresu doubleclick.net, więc Netscape traci czas by je ładować. Pouczenie filtra pakietów by nie wpuszczał pakietów podróżujących do i z tego adresu rozwiązuje ten problem (jednakże jest parę innych sposobów by zrobić to lepiej, sprawdź Junkbuster).
kiedy Twój Linuks jest jedynym komputerem pomiędzy chaosem Internetu i twoją ładną, uporządkowaną siecią, miło jest wiedzieć że możesz obłożyć restrykcjami to co nadchodzi do twych drzwi. Na przykład, możesz pozwolić by wszystko wychodziło z twojej sieci, ale możesz być zaniepokojony znanym atakiem 'Ping of Death' nadchodzącym od różnych złośliwych użytkowników sieci. Innym przykładem może być twoje życzenie, by nie zezwalać na telnet'owanie się na Twój komputer, mimo że wszystkie konta mają hasła; prawdopodobnie chcesz być (jak większość ludzi) raczej obserwatorem w Internecie a nie serwerem - po prostu nie dawać się nikomu do Ciebie dołączać, poprzez filtrowanie nadchodzących pakietów służących do ustanawiania połączeń.
czasami źle skonfigurowana maszyna w sieci lokalnej zadecyduje o skierowaniu paru pakietów do sieci zewnętrznej. Miło jest móc poinstruować filtr pakietów by dał Ci znać o takich anormalnych zachowaniach; może będziesz chciał coś z tym zrobić, albo jesteś po prostu ciekawy z natury.
Kernele Linuksa miały wbudowane filtrowanie pakietów od serii 1.1.
Pierwsza generacja, bazująca na ipfw z BSD, została przeniesiona przez
Alana Cox'a pod koniec 1994. Została ona rozbudowana przez Jos'a Vos'a
i innych dla Linuksa wersji 2.0; narzędzie działające w przestrzeni
użytkownika 'ipfwadm' kontrolowało reguły filtrujące. W połowie
1998, dla Linuksa 2.2, zmieniłem dosyć mocno kernel, z pomocą Michael'a
Neuling'a, i wprowadziłem narzędzie również działające w przestrzeni
użytkownika nazwane 'ipchains'. Ostatecznie, w połowie 1999 dla
Linuksa 2.4 stworzono kolejne narzędzie 'iptables'. Jest to
właśnie to iptables na którym skoncentrowane jest to HOWTO.
Potrzebujesz kernel z infrastrukturą netfilter: netfilter to ogólny
szkielet w kernelu Linuksa do którego mogą dołączać się inne moduły
(takie jak moduł iptables). Oznacza to że potrzebujesz kernel w wersji
2.3.15 lub późniejszej, i w czasie konfiguracji kernela musisz
zaznaczyć 'Y' przy opcji 'CONFIG_NETFILTER'.
Narzędzie iptables wstawia i kasuje reguły z tabeli
filtrowania pakietów kernela. Oznacza to, że cokolwiek do niej
wstawisz, zostanie stracone po restarcie; zajrzyj do
sekcji w której opisujemy zapisywanie reguł
po informacje jak upewnić się że po kolejnym starcie Linuks
odtworzy je.
iptables zastępuje ipfwadm i ipchains: zajrzyj
do
sekcji opisującej używanie ipfwadm i ipchains
po informacje jak bezboleśnie uniknąć przesiadania się na iptables
jeśli używasz jednego z tych narzędzi.
Twoje aktualne ustawienia ściany ogniowej zapisane są w kernelu i w
związku z tym znikną po restarcie. Możesz wypróbować skrypty
iptables-save i iptables-restore by odpowiednio
zapisać je do i odtworzyć z pliku.
Innym sposobem może być umieszczenie komend wymaganych by ustawić
twoje reguły w skrypcie wykonywanym w czasie startu. Upewnij się, że zrobi
on coś inteligentnego w wypadku gdyby coś poszło nie tak
(zwykle wywołanie 'exec /sbin/sulogin').