Rozszerzenia Netfilter HOWTO.pdf

(284 KB) Pobierz
file://J:\netfilter-extensions.html
mr0vka.eu.org
Rozszerzenia Netfilter HOWTO
Fabrice Marie fabrice@celestix.com lista pocztowa netfilter-
devel@lists.samba.org
Wersja oryginalna: 1.20
Oryginał tego dokumentu znajduje się pod adresem: http://netfilter.samba.org/
Tłumaczenie: Łukasz Bromirski, l.bromirski@mr0vka.eu.org
Wersja tłumaczenia: 1.1, $Date: 2002/08/22 21:29:41 $
Oryginał tego tłumaczenia znajduje się pod adresem: http://mr0vka.eu.org/tlumaczenia/netfilter-extensions.html
Dokument ten opisuje jak zainstalować i używać rozszerzeń do iptables dla infrastruktury netfilter.
1. Wprowadzenie
Witam. Mam świetną okazję by podziękować wielu ludziom za całą masę czasu spędzoną przy kodowaniu, testowaniu,
zgłaszaniu błędów i używaniu netfilter. Dzięki wam wszystkim !!
Ten dokument zakłada, że przeczytałeś i zrozumiałeś dokument Rusty'ego Filtrowanie pakietów w Linuksie 2.4
HOWTO . Zakładam również, że wiesz jak prawidłowo skompilować i zainstalować kernel.
Dystrybucja iptables zawiera pewne rozszerzenia, które nie są używane przez zwykłych użytkowników i tak
naprawdę są nadal w jakimś stopniu eksperymentalne, lub czekają na wprowadzenie do kernela. Zwykle nie kompiluje
się ich, chyba, że jasno sobie tego zażyczysz.
Najnowsza wersja tego dokumentu powinna być dostępna pod adresem
http://www.netfilter.org/documentation/index.html#HOWTO .
Celem tego HOWTO jest pomoc ludziom, którzy zaczynają pracę z rozszerzeniami netfilter, przez wyjaśnienia jak je
zainstalować a następnie używać.
(C) 2001 Fabrice MARIE. Na licencji GNU GPL.
2. Patch-O-Matic
2.1 Co to jest Patch-O-Matic ?
Plik Makefile iptables zawiera funkcjonalność nazwaną `patch-o-matic' (lub `p-o-m'). p-o-m kieruje twoją drogą przez
proces selekcji łat, które możesz chcieć zaaplikować, oraz automatycznie dodaje je do kernela.
Po pierwsze, powinieneś ściągnąć najnowsze drzewo CVS, by być pewnym że pracujesz z najnowszymi wersjami
rozszerzeń. By to zrobić, wykonaj:
# cvs -d :pserver:cvs@pserver.samba.org:/cvsroot login
# cvs -z3 -d :pserver:cvs@pserver.samba.org:/cvsroot co netfilter
Stworzy to główny katalog `netfilter/' a następnie ściągnie do niego wszystkie potrzebne pliki.
Upewnij się, że źródła twojego kernela są w `/usr/src/linux/'. Jeśli z jakiś powodów kernel, który będziesz łatał nie
47140307.002.png
mr0vka.eu.org
znajduje się w tym katalogu, musisz ustawić zmienną środowiskową KERNEL_DIR na katalog zawierający źródła
kernela:
# export KERNEL_DIR=/ścieżka/do/linuksa
Upewnij się również, że wykonałeś sprawdzenie zależności ( ang. dependencies ). Jeśli nie jesteś pewien:
# cd /usr/src/linux/
# make dep
Możesz teraz przejść do katalogu netfilter, wejść do katalogu `userspace/' i wykonać p-o-m.
2.2 Praca z Patch-O-Matic
Uruchommy w katalogu `userspace/' p-o-m :
# make patch-o-matic
Welcome to Rusty's Patch-o-matic!
Each patch is a new feature: many have minimal impact, some do not.
Każda łata to nowa funkcjonalność: wiele z nich wnosi niewielkie zmiany, ale niektóre
Almost every one has bugs, so I don't recommend applying them all!
Prawie każda ma jakieś błędy, więc nie rekomenduję nakładania ich w ogóle!
-------------------------------------------------------
Already applied: 2.4.1 2.4.4
Już nałożone: 2.4.1 2.4.4
Testing... name_of_the_patch NOT APPLIED ( 2 missing files)
Testuje... nazwa_łatki NIE NAŁOŻONA ( znaleziono 2 brakujące pliki )
The name_of_the_patch patch:
nazwa_łatki:
Here usually is the help text describing what
Tutaj znajduje się zwykle tekst objaśniający
the patch is for, what you can expect from it,
do czego jest łata, czego możesz się po niej spodziewać,
and what you should not expect from it.
a czego nie.
Do you want to apply this patch [N/y/t/f/q/?]
Czy chcesz nałożyć łatkę
p-o-m przejdzie przez wszystkie łaty. Jeśli zostały już nałożone, zobaczysz napis `Already applied:' w pierwszej linii.
Jeśli nie, wyświetli nazwę łaty z krótkim objaśnieniem. p-o-m poinformuje również o tym, co się dzieje: `NOT
APPLIED ( n missing files)' oznacza po prostu, że łaty jeszcze nie nałożono, a `NOT APPLIED ( n rejects out of n
hunks)' oznacza generalnie, że:
1. Łata nie może być nałożona, lub
2. że łata już została włączona do kernela, który próbujesz łatać. re trying to patch.
Na koniec, zapyta o twoją decyzję - łatać czy nie.
z Naciśnij po prostu Enter jeśli nie chcesz jej aplikować.
z Naciśnij `y' jeśli chcesz by p-o-m przetestował łatę i zaaplikował ją; jeśli test się nie powiedzie, poinformuje o
tym i zapyta ponownie o decyzję; jeśli wszystko pójdzie dobrze, zobaczysz nazwę łatki i tekst `Already Applied'.
z Naciśnij `t' jeśli chcesz tylko przetestować łatę.
z Naciśnij `f' by p-o-m wymusił zainstalowanie łaty.
z Możesz również nacisnąć `q', jeśli chcesz opuścić p-o-m.
Dobrą zasadą jest przeczytanie opisu łaty zanim się ją nałoży. Ponieważ obecnie jest bardzo dużo oficjalnych łat dla
patch-o-matic (i prawdopodobnie jeszcze więcej nieoficjalnych) absolutnie nie zalecam stosowania ich wszystkich !
Powinieneś poważnie przemyśleć swój wybór i nałożyć tylko te, których faktycznie potrzebujesz, nawet jeśli oznacza to
rekompilację netfilter gdy będziesz potrzebował więcej łat.
Stworzono nową wersję patch-o-matic, która pokazuje tylko łaty o których wiadomo, że nałożą się bezproblemowo, lub
47140307.003.png
mr0vka.eu.org
przynajmniej nie zniszczą efektu innych łat. By ją wywołać, napisz :
# make most-of-pom
Działa to tak samo jak patch-o-matic, jeśli chodzi o łatanie. Zaoszczędzisz sobie po prostu oglądania łat tylko dla
programistów.
2.3 A co dalej ?
W momencie gdy nałożyłeś już wszystkie łaty, które chciałeś, następnym krokiem będzie rekompilacja kernela i
zainstalowanie go. To HOWTO tego nie objaśni, przeczytaj Linux Kernel HOWTO .
Podczas konfiguracji swojego kernela, zauważysz nowe opcje w `Networking Options -> Netfilter Configuration'.
Wybierz opcje, których potrzebujesz, przekompiluj i zainstaluj nowy kernel.
Jeśli już się to stało, możesz zainstalować paczkę `iptables' z katalogu `userspace/' w ten sposób:
# make all install
I to wszystko! Twoje nowe iptables zostało właśnie zainstalowane! Teraz czas na zabawę z nową funkcjonalnością.
3. Nowe testy netfilter
W tej sekcji postaram się omówić użycie nowych testów. Łaty wymieniane będą w kolejności alfabetycznej. Nie
poruszymy łat, które powodują uszkadzanie innych łat, choć być może kiedyś tak się stanie.
Ogólnie rzecz biorąc, możesz uzyskać pomoc dla testów wpisując:
# iptables -m test_o_który_ci_chodzi --help
Wyświetli to normalną pomoc iptables, oraz dodatkowe informacje dotyczące `testu_o_który_ci_chodzi' na końcu.
3.1 Łata ah-esp
Przygotowana przez Yon Uriarte <yon@astaro.de> dodaje dwa nowe testy:
z `ah' : pozwala dopasowywać pakiety AH na podstawie Indeksu Parametrów Bezpieczeństwa ( ang. Security
Parameter Index, SPI )
z `esp': pozwala dopasowywać pakiety ESP na podstawie ich SPI
Łata będzie użyteczna dla ludzi używających IPSEC, którzy chcą kontrolować połączenia na podstawie ich SPI.
Na przykład, by odrzucić pakiety AH które mają SPI równe 500:
# iptables -A INPUT -p 51 -m ah --ahspi 500 -j DROP
# iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP ipv6-auth-- anywhere anywhere ah spi:500
Opcje dostępne dla testu `ah' to:
z --ahspi [!] spi[:spi]
-> match spi (zakres)
Test `esp' działa dokładnie tak samo:
47140307.004.png
mr0vka.eu.org
# iptables -A INPUT -p 50 -m esp --espspi 500 -j DROP
# iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP ipv6-crypt-- anywhere anywhere esp spi:500
Opcje dostępne dla testu `esp' to:
z --espspi [!] spi[:spi]
-> match spi (zakres)
Nie zapomnij podać właściwego protokołu, czyli `-p 50' lub `-p 51' ( dla odpowiednio `esp' i `ah' ), ponieważ w innym
przypadku nie powiedzie się dopisanie reguły do łańcucha.
3.2 Łata iplimit
Łata przygotowana przez Gerd Knorr <kraxel@bytesex.org> dodaje nowy test, pozwalający na ograniczanie
jednoczesnych połączeń TCP z konkretnej sieci lub komputera.
Na przykład, ograniczmy ilość jednoczesnych połączeń HTTP wykonywanych przez pojedynczy adres IP do 4:
# iptables -A INPUT -p tcp --syn --dport http -m iplimit --iplimit-above 4 -j REJECT
# iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- anywhere anywhere tcp dpt:http flags:SYN,RST,ACK/SYN #conn/32
Możesz również ograniczyć liczbę jednoczesnych połączeń na przykład dla całej klasy A:
# iptables -A INPUT -p tcp --syn --dport http -m iplimit --iplimit-mask 8 --iplimit-a
# iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- anywhere anywhere tcp dpt:http flags:SYN,RST,ACK/SYN #conn/8 >
Opcje dostępne dla testu `iplimit' to:
z [!] --iplimit-above n
- pasuje jeśli ilość istniejących połączeń nie jest wyższa niż n
z --iplimit-mask n
- grupuje komputery przez użycie maski
3.3 Łata ipv4options
Łata autorstwa Fabrice MARIE <fabrice@celestix.com> dodaje nowy test, pozwalający dopasowywać pakiety na
podstawie ustawionych w nich opcjach IP.
Na przykład, odrzućmy wszystkie pakiety z ustawioną opcją zapisz trasę (ang. record-route ) lub stempel czasu
(ang. timestamp ):
# iptables -A INPUT -m ipv4options --rr -j DROP
# iptables -A INPUT -m ipv4options --ts -j DROP
# iptables --list
Chain INPUT (policy ACCEPT)
47140307.005.png
mr0vka.eu.org
target prot opt source destination
DROP all -- anywhere anywhere IPV4OPTS RR
DROP all -- anywhere anywhere IPV4OPTS TS
Opcje dostępne dla testu `ipv4options' to:
z --ssrr
- pasuje do pakietów z ustawioną flagą `strict source routing'
z --lsrr
- pasuje do pakietów z ustawioną flagą `loose source routing'
z --no-srr
- pasuje do pakietów bez ustawionej flagi `source routing'
z --rr
- pasuje do pakietów z ustawioną flagą `record route flag'
z [!] --ts
- pasuje do pakietów z ustawioną flagą `timestamp'
z [!] --ra
- pasuje do pakietów z ustawioną flagą `router-alert'
z [!] --any-opt
- pasuje do pakietów z ustawioną przynajmniej jedną opcją (lub bez opcji IP jeśli użyje się negacji (!)).
3.4 Łata length
Łata autorstwa James Morris <jmorris@intercode.com.au> dodaje nowy test, pozwalający dopasowywać pakiety na
podstawie ich długości.
Na przykład, odrzućmy wszystkie pingi o długości większej niż 85 bajtów:
# iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 85:0xffff -j
# ptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere icmp echo-request length
Opcje dostępne dla testu `length' to:
z [!] --length długość[:długość]
- testuje pakiety o określonej długości lub mieszczące się w podanym zakresie wielkości (włącznie)
Wartości, których nie podano są dodawane automatycznie. Minimalna wartość to 0, maksymalna 65535.
3.5 Łata mport
Łata autorstwa Andreas Ferber <af@devcon.net> dodaje nowy test, pozwalający na podanie zestawu pojedynczych
portów i ich zakresów, dla protokołów TCP i UDP.
Na przykład, chcąc zablokować ftp, ssh, telnet i http w jednej linii możesz napisać:
# iptables -A INPUT -p tcp -m mport --ports 20:23,80 -j DROP
47140307.001.png
Zgłoś jeśli naruszono regulamin