linuxpub.pl
Powrót Powrót 
 
1    2     
 Następna Następna
Wyślij znajomemu Drukuj

Filtrowanie pakietów w Linuksie 2.4
Iptables

Rusty Russell, lista pocztowa netfilter@lists.samba.org
v1.0.1 Poniedziałek, 1 Maja 18:09:31 CST 2000
Oryginał tego dokumentu znajduje się pod adresem:
http://netfilter.samba.org/unreliable-guides/packet-filtering-HOWTO/index.html

Wersja polska: Łukasz Bromirski
v1.0, 20 maj 2001, 10:20:00 GMT+1
Oryginał tego tłumaczenia znajduje się pod adresem:
http://www.prosys.com.pl/~szopen/tlumaczenia/iptables.html

Dokument ten opisuje zastosowanie narzędzia iptables w filtrowywaniu niepożądanych pakietów, w systemach Linuks z jądrem 2.4


1. Wprowadzenie

Witam Szanownego czytelnika.

Zakładam, że wiesz co to adres IP, adres sieciowy, maska sieciowa, routing i DNS. Jeśli nie, polecam przeczytanie HOWTO Network Concepts. To HOWTO oscyluje na granicy delikatnego wprowadzenia (które pozostawi cię mile zadowolonego, ale niezabezpieczonego 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 i 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. Licenced under the GNU GPL.

2. Gdzie jest oficjalna strona WWW? Czy jest lista e-mail?

Oficjalna strona znajduje się pod trzema adresami:

o Dzięki Filewatcher http://netfilter.filewatcher.org.

o Dzieki The Samba Team i SGI http://www.samba.org/netfilter.

o Dzięki Jim'owi Pick'owi http://netfilter.kernelnotes.org.

Informacje o oficjalnej liście e-mail dotycząca netfilter znajdziesz pod adresem http://lists.samba.org.

3. Więc co to jest Filtr Pakietów?

Filtr pakietów to takie oprogramowanie, które sprawdza nagłówki pakietów w trakcie jak docierają do maszyny na której działa i decyduje o ich losie. Może zdecydować, że pakiet zostanie odrzucony (DROP, tzn. tak jakby pakiet nigdy nie dotarł), zaakceptowany (ACCEPT, tzn. pozwoli mu się 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 chodzi o sprawdzanie nagłówków i decydowanie o ich losie.

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).

  • 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 sieci, ale możesz być zaniepokojony znanym atakiem 'Ping of Death' nadchodzącym od różnych złośliwych zawadiaków. 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 takich przypadków.


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 Vos'a i innych dla Linuksa wersji 2.0; narzędzie 'ipfwadm' kontrolujące reguły filtrujące, działało w przestrzeni użytkownika. 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 rozmawia z kernelem i mówi mu jakie pakiety filtrować. I dopóki nie jesteś programistą, albo zbyt ciekawski, tyle informacji będzie ci potrzeba by zajmować się filtrowaniem pakietów.

3.2.1. iptables

iptables wstawia i kasuje reguły z tabeli filtrowania kernela. Oznacza to, że cokolwiek ustawisz, zostanie stracone po restarcie; zajrzyj do sekcji 3.2.2. by sprawdzić jak upewnić się że po restarcie maszyny ustawienia zostaną przywrócone.

iptables zastępuje ipfwadm i ipchains; zajrzyj do sekcji 8. by sprawdzić jak możliwe bezboleśnie uniknąć użwana iptables jeśli nadal używasz któregoś z tych starszych narzędzi.

3.2.2. Zapisywanie reguł na stałe

Twoje aktualne ustawienia ściany ogniowej zapisane są w kernelu i w związku z tym znikną po restarcie. Napisanie narzędzi iptables-save i iptables-restore jest na mojej liście do zrobienia. Kiedy już będą istniały, będą cool, obiecuję.

W międzyczasie, umieść swoje komendy ustawiające reguły w skrypcie inicjalizacyjnym. Upewnij się, że zrobi on coś inteligentnego w wypadku gdyby coś poszło nie tak (zwykle wywołanie 'exec /sbin/sulogin').

4. Kim do cholery jesteś i dlaczego bawisz się moim kernelem?

Jestem Rusty; 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 3.2. 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. Mam nadzieję.

Firma WatchGuard http://www.watchguard.com doskonała firma sprzedająca ściany ogniowe Firebox, zaoferowała że zapł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...i 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: David S. Miller, Aleksiej Kuziecow, Andi Kleen, Alan Cox. Są oni 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 ł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: (UWAGA: Wygląda to zupełnie inaczej niż w kernelach 2.0 i 2.2!)

       _____ 
Incoming     /    Outgoing 
  -->[Routing ]--->|FORWARD|-------> 
   [Decision]  _____/  ^ 
    |      | 
    v      ____ 
    ___      /  
    /      |OUTPUT| 
   |INPUT|     ____/ 
    ___/      ^ 
    |      | 
    ----> Local Process ---- 

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 na zasadę (policy) danego łańcucha. W systemie w którym dba się o bezpieczeństwo, zasada 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 rzepuszczony do łańcucha INPUT. Jeśli przejdzie go, proces do którego miał dotrzeć otrzyma go.

3. W innym przypadku, jeśli kernel nie ma włączonego przekazywania (forwardingu), 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. Jeśli zostaje zaakceptowan (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: 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), jeśli chodzi ci o detale. Ci z was których znają ipchains mogą po prostu zajrzeć do sekcji 10; oba narzędzia są bardzo podobne.

Jest jednak parę innych 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 zasady dla wbudowanego łańcucha (-P).

4. Wylistowanie reguł w łańcuchu (-L).

5. Wyczyszczenie reguł z łańcucha (-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 środku łańcuchów:

1. Dodanie nowej reguły do łańcucha (-A).

2. Wstawienie nowej reguły na wskazanej pozycji w łańcuchu (-I).

3. Wymiana reguły na wskazanej pozycji w łańcuchu (-R).

4. Skasowanie reguły na wskazanej pozycji w łańcuchu (-D).

5. Skasowanie pierwszej pasującej reguły z łańcucha (-D).

7.1. Co zobaczysz gdy wystartujesz komputer

iptables może być modułem, (nazywa się 'iptable_filter.o'), który powinien być automatycznie ładowany gdy po raz pierwszy uruchomisz iptables. Może być również skompilowany w kernelu.

Zanim nie zostaną wykonane jakieś komendy (zwróć uwagę, że niektóre dystrybucje wykonują już operacje z iptables w skryptach startowych) nie ma ponieważ wiemy że jest to jedyna reguła w łańcuchu wejściowym, możemy użyć numerowania reguł, tak jak poniżej:

# iptables -D INPUT 1
#

Co spowoduje skasowanie reguły numer 1 w łańcuchu wejściowym (INPUT).

Drugi sposób to dokładne przepisanie odpowiednika poleceń po opcji -A, ale zamiast opcji -A podajemy opcję -D. Przydaje się to w przypadku gdy masz skomplikowany zestaw reguł i nie chce ci się liczyć ich wszystkich by dojść do tego że to reguła numer 37 której chcesz się pozbyć. W tym wypadku użyjemy:

# iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
#

Składnia polecenia -D musi dokładnie odpowiadać opcjom które podałeś przy poleceniu -A (lub -I czy -R). Jeśli istnieje wiele identycznych reguł w tym samym łańcuchu, tylko pierwszy pasujący zostanie wykasowany.


 


Do góry Do góry 
 
Powrót Powrót 
1    2     
 Następna Następna
Wyślij znajomemu Drukuj
Dodaj komentarz
Temat: *
Treść: *
Podpis: *
Adres e-mail: Nie publikuj adresu na stronie
Powiadom mnie
jeżeli ktoś doda komentarz:
(Musisz podać adres emial aby skorzytsać z tej opcji)
 
* - pola obowiązkowe

Komentarze powinny być zgodne ogólnie przyjętymi normami moralnymi oraz zasadami netykiety.
Zabronione jest umieszczanie obraźliwych, niecenzuralnych wypowiedzi. Niedozwolone jest również
wykorzystywanie serwisu do celów komercyjnych bez wiedzy i zgody administratora.
Komentarze które naruszą powyższe warunki będą usuwane.

Za treści pozostawione przez osoby odwiedzające nasze serwisy, zespół linuxpub.pl nie ponosi odpowiedzialności.
 
Wiadomości | Archiwalne wiadomości | Faq | Felietony | Podstawy | Konfiguracja | Administracja | Programowanie | Licencja GNU/GPL
2000 - 2008 Copyright (c) linuxpub.pl, epub.pl | Zgłoś błąd