linux24-pf.pdf

(316 KB) Pobierz
file://E:\szopen\develop\www\mr0vka.eu.org\docs\tlumaczenia\lin
Filtrowanie pakietów w Linuksie 2.4
Rusty Russell, lista pocztowa netfilter@lists.samba.org
Wersja oryginalna: 1.26, 2002/01/24 13:42:53
Oryginał tego dokumentu znajduje się pod adresem: http://netfilter.filewatcher.org/
Tłumaczenie: Łukasz Bromirski, l.bromirski@mr0vka.eu.org
Wersja tłumaczenia: 2.2, $Date: 2002/08/22 21:29:41 $
Oryginał tego tłumaczenia znajduje się pod adresem: http://mr0vka.eu.org/docs/tlumaczenia/linux24-pf/index.html
Dokument ten opisuje zastosowanie narzędzia iptables w filtrowaniu niepożądanych pakietów, w linuksie z jądrem 2.4.
1. Wprowadzenie
Witam Szanownego czytelnika.
Zakładam, że wiesz co to adres IP, adres sieciowy, maska sieciowa, ruting i DNS. Jeśli nie, polecam przeczytanie HOWTO Network Concepts.
To HOWTO oscyluje na granicy delikatnego wprowadzenia (które sprawi, że poczujesz się zadowolony z siebie, ale niezabezpieczony przed Światem Rzeczywistym) i surowego,
pełnego opisu (które oszczędzi tylko największych twardzieli, a reszta będzie zmieszana, w stanie paranoi i poszukiwać będzie ciężkiego uzbrojenia).
Twoja sieć nie jest bezpieczna . Problem umożliwienia szybkiej i wygodnej wymiany informacji a jednocześnie ograniczenia jej tylko do właściwych zastosowań, jest porównywalny
do innych problemów takich jak zapewnienie wolność wypowiedzi i jednocześnie zapobieganiu wznoszenia okrzyków w stylu 'Pali się!' w zatłoczonym kinie. Ten problem nie
zostanie rozwiązany w tym HOWTO.
Zatem tylko ty możesz zadecydować jak wyglądać będzie kompromis. Spróbuję poinstruować cię w użytkowaniu dostępnych narzędzi, poinformuję o pewnych słabościach z których
trzeba sobie zdawać sprawę, a wszystko to w nadziei że użyjesz tych informacji dla dobrych, a nie złych celów. Kolejny problem porównywalny z tym powyżej.
(C) 2000 Paul `Rusty' Russell. Na licencji GNU GPL.
854938.001.png
2. Gdzie jest oficjalna strona WWW? Czy jest lista e-mail?
Są trzy oficjalne strony:
z Dzięki Filewatcher .
z Dzięki Zespołowi Samba i SGI .
z Dzięki Harald'owi Welte .
Możesz osiągnąć je na zasadzie równoważenia obciążenia przez DNS round-robin, wybierając adres http://www.netfilter.org/ i http://www.iptables.org .
Oficjalna lista pocztowa znajduje się na serwerze list Samba .
3. To co to jest Filtr Pakietów?
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.
3.1 Dlaczego mógłbym chcieć filtrować pakiety?
Kontrola. Bezpieczeństwo. Czujność.
Kontrola:
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).
Bezpieczeństwo:
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ń.
Czujność:
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.
3.2 Jak filtrować pakiety pod Linuksem?
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.
Zapisywanie reguł na stałe
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 ').
4. Kim u diabła jesteś i dlaczego bawisz się moim kernelem?
Jestem Rusty Russell; człowiek odpowiedzialny za ścianę ogniową IP Linuksa i jeszcze jeden koder który znalazł się we właściwym miejscu we właściwym czasie. Napisałem
ipchains (zajrzyj do sekcji Jak filtrować pakiety pod Linuksem? ) powyżej by sprawdzić kto tak naprawdę to wszystko stworzył) i nauczyłem się wystarczająco dużo by tym razem
filtrowanie pakietów wyszło dobrze. Tak sądzę.
 
Doskonała firma WatchGuard WatchGuard sprzedająca ściany ogniowe Firebox, zaoferowała że będzie płacić mi za nic, więc mogłem spędzać swój czas pisząc ten dokument i
zajmować się poprzednimi rzeczami. Przewidywałem że zajmie to 6 miesięcy, zajęło 12, ale na końcu czuję że zostało to zrobione Właściwie. Wiele razy przepisywane od początku,
padnięty twardy dysk, ukradziony laptop, parę uszkodzonych systemów plików i jeden zniszczony ekran, ale jest.
Póki jeszcze tu jestem, chciałbym wyklarować mylne wrażenia niektórych ludzi: nie jestem guru kernela. Wiem to wszystko, ponieważ moja praca spowodowała że kontaktowałem
się z ludźmi którzy są guru: Davidem S. Millerem, Aleksiejem Kuziecowem, Andi Kleenem, Alanem Coksem. Są zajęci uprawianiem głębokiej magii, a ja mogłem pobawić się na
płytkich wodach, tam gdzie jest bezpiecznie.
5. Bardzo krótki przewodnik Rusty'ego do filtrowania pakietów
Większość ludzi ma pojedyńcze połączenie PPP do Internetu, i nie chce by ktokolwiek mógł łączyć się do nich, lub do ściany ogniowej:
## Załaduj moduły śledzenia połączeń (niepotrzebne jeśli wbudowane w kernel)
# insmod ip_conntrack
# insmod ip_conntrack_ftp
## Stwórz łańcuch blokujący nowe połączenia, z wyjątkiem tych od środka
# iptables -N block
# iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT
# iptables -A block -j DROP
## Do łańcuchów INPUT i FORWARD dodaj skok do tego nowego łańcucha
# iptables -A INPUT -j block
# iptables -A FORWARD -j block
6. Jak pakiety podróżują przez filtry
Kernel rozpoczyna pracę z trzema listami reguł w tabeli filtrującej; nazywane sa one łańcuchami ściany ogniowej , lub po prostu łańcuchami . Te trzy nazwane zostały INPUT
( wejściowy ), OUTPUT ( wyjściowy ) i FORWARD ( przekazujący ).
Dla fanów ASCII-art, łańcuchy ułożone są w następujący sposób:
_____
Przychodzący / \ Wychodzący
-->[Decyzja ]--->|FORWARD|------->
[Rutingu ] \_____/ ^
| |
v ____
___ / \
/ \ |OUTPUT|
|INPUT| \____/
 
\___/ ^
| |
----> Proces lokalny ----
Trzy koła reprezentują trzy łańcuchy o których wspomniałem wyżej. Kiedy pakiet dociera do koła na diagramie, sprawdzany jest łańcuch reguł by zdecydować o losie pakietu. Jeśli
łańcuch mówi że należy odrzucić (DROP) pakiet, jest on odrzucany tutaj, ale jeśli łańcuch mówi by zaakceptować pakiet (ACCEPT), kontynuuje on swoją podróż po diagramie.
Łańcuch to lista reguł . Każda reguła mówi 'jeśli nagłówek pakietu wygląda tak, to zrobimy z tym pakietem następującą rzecz'. Jeśli reguła nie pasuje do pakietu, sprawdzana jest
następna. Na koniec, jeśli nie ma więcej reguł, kernel sprawdza politykę (ang. policy ) danego łańcucha. W systemie w którym dba się o bezpieczeństwo, polityka mówi zwykle
kernelowi by odrzucić (DROP) pakiet.
1. Kiedy pakiet dociera do maszyny (powiedzmy, przez kartę Ethernetową), kernel sprawdza najpierw adres przeznaczenia pakietu: nazywa się to routingiem.
2. Jeśli pakiet przeznaczony jest do tego kompuera, pakiet zostaje przepuszczony do łańcucha INPUT (wejściowego). Jeśli przejdzie go, otrzymuje go proces do którego był
adresowany.
3. W innym przypadku, jeśli kernel nie ma włączonego przekazywania (ang. forwarding ), lub nie wie jak przekazać pakiet, jest on odrzucany. Jeśli przekazywanie jest włączone
i pakiet jest przeznaczony do innego interfejsu sieciowego (jeśli w ogóle masz jeszcze jeden), pakiet przechodzi w prawo na naszym diagramie do łańcucha FORWARD
(przekazującego). Jeśli zostaje zaakceptowany (ACCEPT), zostanie wysłany dalej.
4. Na koniec, program pracujący na tym komputerze może również wysyłać własne pakiety. Przejdą one od razu do łańcucha OUTPUT (wyjściowego): jeśli stwierdzi on że
zaakceptuje pakiet (ACCEPT), pakiet przechodzi do właściwego interfejsu sieciowego.
7. Używanie iptables
iptables ma całkiem szczegółowy podręcznik ( man iptables ), do którego warto zajrzeć jeśli chodzi ci o coś konkretnego. Ci z was którzy znają ipchains mogą po prostu
zajrzeć do różnic pomiędzy iptables i ipchains ; oba narzędzia są bardzo podobne.
Istnieje wiele rzeczy które możesz zrobić przy użyciu iptables . Zaczynasz z trzema wbudowanymi łańcuchami INPUT , OUTPUT i FORWARD , których nie możesz skasować.
Spójrzmy na listę możliwych operacji na całych łańcuchach:
1. Stworzenie nowego łańcucha (-N).
2. Skasowanie pustego łańcucha (-X).
3. Zmiana polityki dla wbudowanego łańcucha (-P).
4. Wylistowanie reguł w łańcuchu (-L).
5. Wyczyszczenie łańcucha z reguł (-F).
6. Wyzerowanie liczników pakietów i bajtów we wszystkich regułach w łańcuchu (-Z).
Jest również parę sposobów na manipulowanie regułami w obrębie łańcucha:
1. Dodanie nowej reguły do łańcucha (-A).
2. Wstawienie nowej reguły na pewnej pozycji w łańcuchu (-I).
3. Zamiana reguły na pewnej pozycji w łańcuchu (-R).
 
Zgłoś jeśli naruszono regulamin