netfilter-faq.pdf

(246 KB) Pobierz
file://J:\netfilter-faq.html
mr0vka.eu.org
netfilter/iptables FAQ
Harald Welte, laforge@gnumonks.org
Wersja oryginalna: 1.30, 2002/01/14 09:04:47
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-faq.html
Dokument ten zawiera Odpowiedzi Na Najczęściej Zadawane Pytania, które do tej pory pojawiły się na liście pocztowej
netfilter. Komentarze / uzupełnienia / wyjaśnienia są oczywiście mile widziane, i powinny być kierowane do opiekuna
tego FAQ.
1. Pytania ogólne
Sekcja ta odpowiada na pytania ogólnie związane z netfilter, które pojawiają się bardzo często.
1.1 Skąd mogę ściągnąć netfilter/iptables?
Netfilter i IPtables są zintegrowane w jądrach linuksa serii 2.4.x. Proszę ściągnij źródła ostatniego kernela z
http://www.kernel.org/ lub jednego z jego mirrorów.
Narzędzie działające w przestrzeni użytkownika 'iptables' jest dostępne na stronie domowej netfilter, lub na jednym z
mirrorów: http://www.netfilter.org/ , http://www.iptables.org/ , http://netfilter.samba.org/ , http://netfilter.gnumonks.org/
lub http://netfilter.filewatcher.org/ .
1.2 Czy jest jakaś wersja netfilter dla Linuksa 2.2?
Nie, aktualnie nie ma. Ale, jeśli ktoś chciałby zacząć to pisać, nie powinno być to zbyt trudne z uwagi na jasny interfejs
do stosu sieciowego.
Proszę, poinformujcie nas o jakiejś pracy w tym zakresie.
1.3 Czy jest moduł do śledzenia połączeń i NATu dla ICQ?
Jeśli jesteś przyzwyczajony do maskarady z Linuksa 2.2, używałeś zawsze modułu ip_masq_icq module by uzyskać
bezpośrednie połączenie klient-klint dla ICQ.
Nikt nie przepisał tego modułu, ponieważ protokół ICQ jest zbyt brzydki :) Ale, jak sądzę jest to tylko kwestia czasu.
Rusty kiedyś stwierdził, że tylko protokoły z przynajmniej jednym darmowym klientem i jednym darmowym serwerem
będą integrowane do głównej dystrybucji netfilter. Jeśli chodzi o ICQ, są tylko darmowe klienty, więc nie pasuje on do
tych kryteriów (wolny jak wolność, nie jak wolne piwo, wg. definicji RMS)
1.4 Gdzie podziały się moduły ip_masq_vdolive / ip_masq_quake / ... ?
Niektóre z nich nie są już potrzebne, a niektóre nie zostały jeszcze przeniesione do netfilter. Netfilter zapewnia aktualnie
47140234.002.png
mr0vka.eu.org
pełne śledzenie połączeń, nawet dla UDP, i generalnie będzie starał się zmieniać pakiety tak niewiele jak to tylko będzie
możliwe, więc czasami programy "po prostu" pracują.
1.5 Co to jest ten patch-o-matic i jak mogę go używać?
Kernele 2.4.x są wersją stabilną, więc nie możemy tak po prostu dołączań swoje aktualne poprawki do głównej
dystrybucji. Cały nasz kod jest tworzony i testowany w netfilter patch-o-matic. Jeśli chcesz używać najnowszych funkcji
netfilter, będziesz musiał użyć jednego z patchy z patch-o-matic. Możesz znaleźć program patch-o-matic w najnowszej
paczce iptables (lub, oczywiście na CVS), którą ściągnąć można ze strony WWW netfilter.
patch-o-matic ma obecnie trzy dostępne opcje:
z make pending-patches ( nałóż zaległe łaty )
z make most-of-pom ( nałóż większość z opcji )
z make patch-o-matic
Pierwsza opcja ma na celu dołożenie wszystkich istotnych poprawek (które i tak zostały wysłane koordynatorom
kernela) na twój kernel. Druga, `most-of-pom` dodaje dodatkowo wszystkie nowe opcje, które mogą zostać dodane bez
konfliktów z już istniejącymi. Trzecia opcja jest dla prawdziwych ekspertów, którzy chcą przejrzeć wszystkie poprawki -
ale weźcie pod uwagę, że mogą nie być między sobą zgodne.
patch-o-matic ma miły interfejs. Wprowadź po prostu
make most-of-pom (lub pending-patches czy patch-o-matic, zajrzyj wyżej)
lub, jeśli źródła twojego kernela nie są w /usr/src/linux użyj
make KERNEL_DIR={katalog-ze-źródłami} most-of-pom
w głównym katalogu paczki iptables. patch-o-matic sprawdza każdy patch pod kątem możliwości zaaplikowania do
źródeł kernela. Jeśli uzna że można go użyć, zobaczysz znak zachęty, z poziomu którego możesz uzyskać więcej
informacji o patchu, zaaplikwać go, przejść do następnego, ...
Po więcej informacji dotyczących patch-o-matic, zajrzyj na stronę rozszerzeń netfilter, która znajduje się pod adresem
http://www.netfilter.org/documentation/index.html#HOWTO .
1.6 Gdzie mogę znaleźć ipnatctl i więcej informacji o nim?
ipnatctl był używany do ustawiania reguł NAT w przestrzeni użytkownika w bardzo wczesnych wersjach netfilter
(jeszcze w czasie prac z kernelami serii 2.3.x). Nie jest już potrzebny, więc nie udostępniamy go. Całą jego
funkcjonalność przejęło iptables. Obejrzyj NAT HOWTO na stronie domowej netfilter.
2. Problemy podczas procesu kompilacji
2.1 Nie mogę skompilować iptables-1.1.1 z kernelem >= 2.4.0-test4
To znana sprawa. Mechanizm rozpoznający które patche są już zaaplikowane źle działa. Użyj "make build" zamiast
"make".
Lepsze rozwiązanie: uaktualnij system do iptables-1.1.2 lub nowszych.
2.2 Nie mogę skompilować iptables 1.1.0 z ostatnimi kernelami (>=
2.3.99-pre8)
Wewnętrzne struktury w iptables zostały zmienione. Uaktualnij iptables do wersji >= 1.1.1
47140234.003.png
mr0vka.eu.org
2.3 Niektóre patche z patch-o-matic z iptables-1.2.1a nie działają z
kernelem >= 2.4.4
Proszę użyć najnowszej wersji iptables.
2.4 ipt_BALANCE, ip_nat_ftp, ip_nat_irc, ipt_SAME, ipt_NETMAP
nie chcą się skompilować
Najprawdopodobniej masz problemy ze skompilowaniem funkcji nazwanej ip_nat_setup_info .
Jeśli używasz iptables <= 1.2.2, MUSISZ zaaplikować łaty `dropped-table` i `ftp-fixes`.
Jeśli używasz iptables > 1.2.2 lub ostatniej wersji z CVS, proszę nie aplikuj patcha 'dropped-table', ponieważ jest
niekompatybilny z BALANCE, NETMAP, irc-nat, SAME i talk-nat.
2.5 Używam serii jądra Alana Cox'a 2.4.x-acXX i mam problemy
Podstawowy zespół netfilter bazuje na drzewie Linus'a, więc używasz wersji -ac na własne ryzyko.
3. Problemy w trakcie pracy
3.1 NAT: X dropping untracked packet Y Z aaa.aaa.aaa.aaa ->
224.bbb.bbb.bbb
Wiadomość taką generuje kod NAT, ponieważ pakiety multicastowe trafiają do tabeli NAT, a kod odpowiedzialny za
śledzenie połączeń nie potrafi ich obsłużyć. Jeśli nie wiesz co to jest multicast, lub w ogóle tego nie potrzebujesz, użyj:
iptables -t mangle -I PREROUTING -j DROP -d 224.0.0.0/8
3.2 NAT: X dropping untracked packet Y Z aaa.aaa.aaa.aaa ->
bbb.bbb.bbb.bbb
Mój syslog lub moja konsola pokazują taką wiadomość:
NAT: X dropping untracked packet Y Z aaa.aaa.aaa.aaa -> bbb.bbb.bbb.bbb
Wiadomość taką generuje kod NAT. Odrzuca pakiety, ponieważ by wykonać na nich NAT musi posiadać prawidłową
informację o połączeniu. Wiadomość taka jest drukowana dla wszystkich pakietów, których kod śledzący połączenia nie
był w stanie zidentyfikować.
Możliwe przyczyny to:
z osiągnięto maksymalny limit wpisów w bazie danych śledzenia połączeń
z nie można było zidentyfikować typu rozgłaszania (multicast, broadcast)
z sypie się kmem_cache_alloc (brak pamięci)
z odpowiedź na niepotwierdzone połączenie
z pakiet multicastowy (sprawdź poprzednie pytanie)
z pakiet icmp zbyt krótki
z pakiet icmp jest sfragmentowany
z zła suma kontrolna pakietu icmp
Jeśli chciałbyś prowadzić dużo bardziej szczegółowe logowanie tych pakietów (np. podejrzewasz że jest to zdalna próba
skanowania), użyj następującej reguły:
47140234.004.png
mr0vka.eu.org
iptables -t mangle -A PREROUTING -j LOG -m state --state INVALID
I tak, musisz wstawić tą regułę do tabeli przekształceń (ang. mangle ), ponieważ pakiety będą odrzucane przez NAT
zanim osiągną tabelę filtrowania.
3.3 Nie mogę używać netfilter z kodem mostującym Linuksa
Chcesz stworzyć kompletnie transparentną ścianę ogniową? Wspaniały pomysł!
Począwszy od wersji kernela 2.4.16 musisz dodać tylko łatkę do kernela, dostępną pod adresem
http://bridge.sourceforge.net/ .
3.4 Moduł IRC nie potrafi obsłużyć DCC RESUME
Cóż, to połowa prawdy. Tylko tabela NAT nie potrafi go obsłużyć. Jeśli użwasz filtrowania pakietów bez NAT wszystko
powinno działać.
3.5 Jak działa SNAT dla wielu adresów?
Netfilter stara się modyfikować pakiety minimalnie, na tyle ile to możliwe. Więc jeśli mamy maszynę po restarcie, i ktoś
za komputerem robiącym SNAT otwiera połączenie do lokalnego portu 1234, netfilter zmienia jedynie adres IP a port
zostaje ten sam.
Ale jeśli ktoś inny otworzy połączenie z tym samym portem źródłowym, netfilter musi zmienić i IP i port, jeśli ma tylko
jedno IP dla SNAT.
Jeśli są dostępne inne, ponownie zmienia tylko adres IP.
3.6 ip_conntrack: maximum limit of XXX entries exceeded
Jeśli zobaczysz powyższy komunikat w syslog, wygląda na to że baza danych śledzenia połączeń nie ma wystarczająco
dużo miejsca w twoim otoczeniu. Śledzenie połączeń domyślnie obsługuje tylko pewną liczbę jednoczesnych połączeń.
Liczba ta jest zależna od ilości pamięci operacyjnej (przy 64MB: 4096, 128MB: 8192, ...).
Możesz łatwo zwiększyć numer maksymalnie śledzonych połączeń, ale zwróć uwagę że każde połączenie zabiera około
350 bajtów pamięci nie wymienialnej!
By zwiększyć limit to dnp. 8192, napisz:
echo "8192" > /proc/sys/net/ipv4/ip_conntrack_max
3.7 Jak mogę wylistować wszystkie śledzone / maskaradowane
połączenia, tak jak przy użyciu 'ipchains -L -M' w 2.2.x ?
Istnieje plik w systemie plików /proc, nazywa się /proc/net/ip_conntrack . Możesz wydrukować go na wyjście
używając komendy
cat /proc/net/ip_conntrack
3.8 Jak wylistować wszystkie dostępne tabele IP?
Wszystkie dostępne tabele IP można wylistować przez
cat /proc/net/ip_tables_names
47140234.005.png
mr0vka.eu.org
3.9 iptables-save / iptables-restore z iptables-1.2 powodują segfault
Znany błąd. Uaktualnij się do najnowszej wersji z CVS lub używaj iptables >= 1.2.1 jak tylko będzie dostępne.
3.10 Komenda iptables -L bardzo długo listuje reguły
Dzieję się tak ponieważ iptables sprawdza DNS przy każdym adresie IP. Ponieważ każda reguła składa się z jednego lub
dwóch adresów, w najgorszym przypadku mamy dwa sprawdzenia na regułę.
Problem zaczyna się, gdy używasz prywatnych adresów IP (jak np. 10.x.x.x czy 192.168.x.x), a DNS nie jest w stanie
ich rozwinąć i w końcu się poddaje. Suma tych wszystkich time-out'ów może trwać _bardzo_ długo, wszystko zależy od
twojego zestawu reguł.
Użyj opcji -n (numerycznie) dla iptables, by zapobiec sprawdzaniu DNSu.
3.11 Jak mogę powstrzymać cel LOG przed logowaniem na konsolę?
Musisz prawidłowo skonfigurować swój syslogd: Cel LOG loguje do facility kern z priorytetem ostrzeżenia (ang.
warning , 4). Zajrzyj do podręcznika syslogd.conf by dowiedziec się więcej.
Domyślnie, wszystkie wiadomości kernela z priorytetem wyższym niż debug (7) wysyłane są na konsolę. Jeśli
podniesiesz go do 4, zamiast 7, zapobiegniesz wysyłaniu informacji z LOG na konsole.
Zwróć jednak uwagę, że powstrzyma to również inne, istotne wiadomości od pojawiania się na konsoli (nie wpływa to
na syslog).
3.12 Jak zbudować transparentne proxy przy użyciu squid'a i iptables?
Po pierwsze, potrzebujesz właściwej reguły DNAT lub REDIRECT. Użyj REDIRECT tylko jeśli squid pracuje na tej
samej maszynie. Na przykład:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.22.33:3128
Następnie, musisz właściwie skonfigurować squid'a. Możemy tu tylko dać krótkie wskazówki, zajrzyj do dokumentacji
squid'a po dalsze informacje.
Plik squid.conf dla Squid'a 2.3 potrzebuje następujących linijek:
http_port 3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Squid 2.4 potrzebuje dodatkwej linijki:
httpd_accel_single_host off
3.13 Jak mogę używać celu LOG / Jak i LOGować i DROPować?
Cel LOG jest tym co nazywamy "nie-ostatecznym celem", tzn. nie kończy on sprawdzania pakietu. Jeśli używasz celu
LOG, pakiet zostanie zalogowany, ale przeglądanie reguł odbywa się dalej.
Więc jak możesz zalogować i odrzucić pakiet jednocześnie? Nic prostszego, tworzysz osobny łańcuch który zawiera
dwie reguły:
iptables -N logdrop
47140234.001.png
Zgłoś jeśli naruszono regulamin