<?xml version='1.0' encoding='ISO-8859-2'?>
<!DOCTYPE article PUBLIC '-//OASIS//DTD DocBook XML V4.1.2//EN'>

<article>

<articleinfo>

<title>netfilter/iptables FAQ</title>
<author>
<firstname>Harald Welte &lt;laforge@netfilter.org&gt; ,
Tłumaczenie: Maciej Sołtysiak</firstname>
</author>
<pubdate>Version $Revision: 566 $, $Date: 2003-12-23 20:18:45 +0100 (mar, 23 dic 2003) $,
Tłumaczenie: Środa 15 Października 2003 $</pubdate>

<abstract>

<para>
Ten dokument zawiera najczęściej zadawane pytania (Frequently Asked Questions) występujące na liście
dyskusyjnej netfilter. Komentarze / dodatki / objaśnienia są mile widziane
i powinny być kierowane do utrzymującego FAQ.
</para>

</abstract>

</articleinfo>

<sect1>
<title>Pytania ogólne</title>

<para>
Ten rozdział zawiera ogólne pytania dotyczące netfiltra (i nie tylko) jakie
napotkaliśmy na liście dyskusyjnej.
</para>

<sect2>
<title>Skąd mogę wziąć netfilter/iptables?</title>

<para>
Netfilter i IPtables są zintegrowane z jądrami serii 2.4.x.
Pobierz ostatnie jądro z <ulink
url="http://www.kernel.org/"
>&#65533;</ulink
> lub z jednego z
mirrorów.
</para>

<para>
Narzędzie przestrzeni użytkownika (userspace) 'iptables' jest dostępne na
stronach domowych i mirrorach :
<ulink
url="http://www.netfilter.org/"
>&#65533;</ulink
>,
<ulink
url="http://www.iptables.org/"
>&#65533;</ulink
>.
</para>

</sect2>

<sect2>
<title>Czy jest wersja netfiltra na Linuksa 2.2?</title>

<para>
Nie, nie ma. Ale jeśli ktoś chce zacząć, nie powinno to być zbyt trudne z
uwagi na przejrzysty interface do stosu sieci.
</para>

<para>
Proszę informujcie nas o pracy w tej dziedzinie.
</para>

</sect2>

<sect2>
<title>Czy jest moduł ICQ conntrack/NAT?</title>

<para>
Jeśli jesteś przyzwyczajony do maskarady na Linuksach 2.2, zawsze używałeś
modułu ip&lowbar;masq&lowbar;icq by działaly bezpośrednie połączenia ICQ klient-klient.
</para>

<para>
Nikt nie zaimplementował ponownie tego modułu do netfiltra, ponieważ
protokół ICQ jest ohydny :) Ale myślę, że to kwestia czasu zanim będzie
dostępny.
</para>

<para>
Rusty kiedyś wskazał na to, że tylko moduły dla protokołów z przynajmniej
jednym wolnym klientem i jednym wolnym serwerem będą integrowane do
głównej dystrybucji netfiltra. Co do ICQ, darmowi są tylko klienci, więc
kryteria odrzucają ten moduł. (wolnym w sensie swobody, nie jak wolny żółw
czy darmowy, tj. definicja RMS - Richarda M. Stallmana)
</para>

</sect2>

<sect2>
<title>Co się stało z modułami ip&lowbar;masq&lowbar;vdolive / ip&lowbar;masq&lowbar;quake?</title>

<para>
Niektóre z nich nie są wymagane, a niektóre nie zostały jeszcze przeniesione
do netfiltra.  Netfilter wykonuje pełne śledzenie połączeń (connection
tracking) nawet dla UDP i ma zasadę by nie przeszkadzać pakietom w miarę
możliwości, więc czasami to 'po prostu działa'.
</para>

</sect2>

<sect2>
<title>O co chodzi z patch-o-matic i jak to się używa?</title>

<para>
Jądra 2.4.x są stabilną wersją, więc nie możemy ot tak wysyłać aktualnego
kodu do głównego jądra.  Cały kod jest rozwijany i testowany najpierw w
netfilter patch-o-matic.  Jeśli chcesz używać którejś z nowych funkcji
netfiltra, będziesz musiał zastosować jedną lub kilka łat z
patch-o-matic.  Możesz znaleźć patch-o-matic w najnowszym pakiecie
netfiltra (lub oczywiście w CVS) i ściągnąć ze strony domowej netfiltra.
</para>

<para>
patch-o-matic ma teraz trzy różne opcje:

<itemizedlist>
<listitem>

<para>
make pending-patches
</para>
</listitem>
<listitem>

<para>
make most-of-pom
</para>
</listitem>
<listitem>

<para>
make patch-o-matic
</para>
</listitem>

</itemizedlist>

</para>

<para>
Pierwszy jest po ty by upewnić się czy wszystkie ważne poprawki (które
zostały wysłane do utrzymujących jądro) są w jądrze. Drugi `most-of-pom`
dodatkowo pyta o nowe łaty, które można zastosować bez konfliktów. Trzecia
opcja `patch-o-matic` jest dla prawdziwych ekspertów którzy chcą widzieć
wszystkie łatki - ale miej świadomość, mogą powodować konflikty.
</para>

<para>
patch-o-matic ma fajny interfejs użytkownika. Po prostu wpisz
</para>

<para>

<screen>
make most-of-pom (lub pending-patches lub patch-o-matic, spójrz wyżej)
</screen>

</para>

<para>
lub, jeśli źródła jądra nie są w <literal remap="tt">/usr/src/linux</literal> to użyj
</para>

<para>

<screen>
make KERNEL_DIR={ścieżka-do-jądra} most-of-pom
</screen>

</para>

<para>
w najwyższym katalogu pakietu netfilter.  patch-o-matic sprawdza czy
każda łatka zaaplikowałaby się w źródle jądra jakie masz zainstalowane.
Jeśli tak, zobaczysz opcje: możesz przeczytać więcej o łacie,
zastosować go lub przejść do następnego ...
</para>

<para>
Więcej informacji na temat patch-o-matic jest w netfilter extensions HOWTO.
<ulink
url="http://www.netfilter.org/documentation/index.html#HOWTO"
>&#65533;</ulink
>
</para>

</sect2>

<sect2>
<title>Gdzie znajdę ipnatctl i więcej informacji na ten temat?</title>

<para>
ipnatctl był używany by postawić regułki NAT z przestrzeni użytkownika
(userspace) w początkowych wersjach rozwojowych netfiltra podczas jąder 2.3.x.
Nie jest już potrzebny, zatem nie jest dostępny. Cała jego funkcjonalność
jest w iptables. Zerknij w NAT HOWTO na stronach domowych netfiltra.
</para>

</sect2>

<sect2>
<title>Czy iptables/ip6tables jest w stanie zrobić IPv6 NAT?</title>

<para>
Nie, rdzeń NAT nie obsługuje transjacji IPv6 lub IPv6/IPv4 jakiegokolwiek
rodzaju.
</para>

</sect2>

<sect2>
<title>Czy są plany obsługi SIP?</title>

<para>
SIP (Session Initiation Protocol) jest dość złożony, szczególnie w
transmisji poprzez firewalle i urządzenia NAT.  Wstępną propozycją była
komunikacja pośrednika (proxy) poprzez FCP (Firewall Control Protocol) przy
użyciu filtra pakietów.  Została założona grupa robocza IETF MIDCOM, a
tymczasem ludzie chcą używać SIP.
</para>

<para>
Zespół netfilter/iptables nie ma zasobów by zaimplementować obsługę SIP
dla conntrack/NAT, jednak zawsze jesteśmy otwarci dla sponsorów :)
</para>

</sect2>

<sect2>
<title>Czy netfilter/iptables wspiera failover/HA?
Does netfilter/iptables support failover/HA?</title>

<para>
Odpowiedź jest prosta 'tak' i 'nie'.
</para>

<para>
Jeśli masz na myśli pełny failover, podczas którego cała informacja o stanie
jest zachowana: <emphasis remap="bf">Nie bardzo</emphasis>. Synchronizacja stanu między węzłami
jest trudnym procesem.  Harald (z netfilter core team) opublikowal dokument
na ten temat, ale nie znalazł sponsora by ufundować rozwój.  Tymczasem,
mozesz użyć naszego 'connection pickup', która &lsqb;po failoverze] próbuje
podchwycić już ustanowione połączenia: <emphasis remap="bf">Może być wystarczające w
zależności od wymagań</emphasis>.
</para>

<para>
Jeśli chcesz przechować połączenia NAT: <emphasis remap="bf">Nie</emphasis>.
</para>

<para>
Jeśli filtrujesz bez przechowywania stanu (stateless): <emphasis remap="bf">Tak</emphasis>
</para>

</sect2>

</sect1>

<sect1>
<title>Problemy podczas kompilacji</title>

<sect2>
<title>Nie mogę skompilować iptables-1.1.1 z jądrem &gt;= 2.4.0-test4</title>

<para>
To znany problem. Mechanizm wykrywania które łaty zastosować jest zepsuty.
Spróbuj "make build" zamiast "make". 
</para>

<para>
Lepsze rozwiązanie: zaktualizuj do iptables-1.1.2 lub późniejszych.
</para>

</sect2>

<sect2>
<title>Nie mogę skompilować iptables 1.1.0 z ostatnimi jądrami (&gt;= 2.3.99-pre8)</title>

<para>
Wewnętrzne struktury w iptables zmieniły się. Uaktualnij iptables do &gt;= 1.1.1
</para>

</sect2>

<sect2>
<title>Niektóre łaty patch-o-matic z iptables-1.2.1a nie działają z jądrem &gt;= 2.4.4</title>

<para>
Proszę użyj iptables-1.2.2 lub netfilter CVS.
</para>

</sect2>

<sect2>
<title>ipt&lowbar;BALANCE, ip&lowbar;nat&lowbar;ftp, ip&lowbar;nat&lowbar;irc, ipt&lowbar;SAME, ipt&lowbar;NETMAP nie kompilują się</title>

<para>
Najprawdopodobniej doświadczasz problemów z funkcją zwaną
<literal remap="tt">ip&lowbar;nat&lowbar;setup&lowbar;info</literal>. 
</para>

<para>
Jeśli używasz iptables &lt;= 1.2.2, <emphasis remap="bf">MUSISZ</emphasis> zastosować łaty 'dropped-table' i 'ftp-fixes'.
</para>

<para>
Jeśli używasz iptables &gt; 1.2.2 lub świeży CVS, proszę <emphasis remap="bf">nie</emphasis> stosuj
`dropped-table', gdyż jest niekompatybilny z BALANCE, NETMAP, irc-nat, SAME
i talk-nat.
</para>

</sect2>

<sect2>
<title>Mam problemy z jądrem z łatami Alana Coxa 2.4.x-acXX</title>

<para>
Główny zespół netfiltra opiera rozwój na jądrach Linusa, więc serii -ac
używaj na własne ryzyko.
</para>

</sect2>

<sect2>
<title>ERROR: Invalid option KERNEL&lowbar;DIR=/usr/src/linux-2.4.19</title>

<para>
Założę się, że usiłujesz uruchomić coś podobnego do :

<screen>
# ./runme pending KERNEL_DIR=/usr/src/linux-2.4.19
</screen>

</para>

<para>
Ale bash/sh nie jest jak make a zmienna nie moze byc podana jako parametr.
Musisz ustawic zmienna przed uruchomieniem skryptu runme :
</para>

<para>

<screen>
# KERNEL_DIR=/usr/src/linux-2.4.19 ./runme pending
</screen>

</para>

</sect2>

</sect1>

<sect1>
<title>Problemy podczas pracy</title>

<sect2>
<title>NAT: X dropping untracked packet Y Z aaa.aaa.aaa.aaa -&#62; 224.bbb.bbb.bbb</title>

<para>
Ta wiadomość jest drukowana przez kod NAT, ponieważ pakiety multicastowe
trafiają do tabeli NAT, a connection tracking nie obsługuje teraz multicastów.
Jeśli nie masz pojęcia co to jest multicast lub zupełnie nie potrzebujesz tego,
używaj:

<screen>
iptables -t mangle -I PREROUTING -j DROP -d 224.0.0.0/8
</screen>

</para>

</sect2>

<sect2>
<title>NAT: X dropping untracked packet Y Z aaa.aaa.aaa.aaa -&#62; bbb.bbb.bbb.bbb</title>

<para>
Mój syslog lub konsola pokazuje wiadomość:

<screen>
NAT: X dropping untracked packet Y Z aaa.aaa.aaa.aaa -&#62; bbb.bbb.bbb.bbb
</screen>

</para>

<para>
Ta wiadomość jest drukowana przez kod NAT. Zrzuca pakiety, ponieważ by NATować
potrzebuje mieć poprawne informacje o stanie połączenia. Ta wiadomość jest
drukowana dla wszystkich pakietów, dla których connection tracking nie mógł
uzyskać informacji o stanie połączenia.
</para>

<para>
Prawdopodobne powody to:

<itemizedlist>
<listitem>

<para>
osiągnięto maksymalną liczbę wpisów w bazie śledzonych połączeń
</para>
</listitem>
<listitem>

<para>
nie można określić pakietu odpowiadającego na połączenie (multicast, broadcast)
</para>
</listitem>
<listitem>

<para>
kmem&lowbar;cache&lowbar;alloc zawodzi (brak pamięci)
</para>
</listitem>
<listitem>

<para>
odpowiedź na niepotwierdzone połączenie
</para>
</listitem>
<listitem>

<para>
pakiet multicastowy (zobacz poprzednie pytanie)
</para>
</listitem>
<listitem>

<para>
pakiet icmp jest za krótki
</para>
</listitem>
<listitem>

<para>
pakiet icmp jest sfragmentowany
</para>
</listitem>
<listitem>

<para>
pakiet icmp ma złą sumę kontrolną
</para>
</listitem>

</itemizedlist>

</para>

<para>
Jeśli chcesz bardziej szczegółowo logować te pakiety (tj. jeśli
podejrzewasz, że to zdalna sonda (remote probe) / pakiety skanujące), użyj następującej
regułki:

<screen>
iptables -t mangle -A PREROUTING -j LOG -m state --state INVALID
</screen>

</para>

<para>
Tak, musisz wstawić regułkę w tabeli mangle, ponieważ pakiety są zrzucane
przez kod NAT zanim dotrą do tabeli filter.
</para>

</sect2>

<sect2>
<title>ip&lowbar;conntrack: max number of expected connections N of M reached for aaa.aaa.aaa.aaa -&#62; bbb.bbb.bbb.bbb</title>

<para>
Mój syslog lub konsola regularnie pokazuje mi napis w stylu:

<screen>
ip_conntrack: max number of expected connections N of M reached for aaa.aaa.aaa.aaa -&#62; bbb.bbb.bbb.bbb
</screen>

</para>

</sect2>

<sect2>
<title>foo</title>

<para>
Zasadniczo nie ma się czym przejmować, szczególnie gdy <literal remap="tt">N</literal> i
<literal remap="tt">M</literal> sa <literal remap="tt">1</literal>, a po tej wiadomości jest <literal remap="tt">, reusing</literal>.
W szczególności wersje jądra (2.4.19&lt;=x&lt;=2.4.21-pre3), ten
komunikat był drukowany dla FTP - I faktycznie może się zdarzyć podczas
normalnego działania FTP.
</para>

<para>
Z nadchodzącymi wersjami jądra (&gt;=2.4.21-pre4) ta wiadomość nie jest
drukowana by nie mylić użytkownika.  Jeśli nadal otrzymujesz takie
wiadomości, skontaktuj się z listą: <ulink
url="http://lists.netfilter.org/mailman/listinfo/netfilter-devel"
>&#65533;</ulink
>.
</para>

</sect2>

<sect2>
<title>Nie udaje mi się użyć netfiltra razem z Linux bridging code</title>

<para>
Więc chcesz zbudować całkowicie przezroczysty firewall?  Świetny pomysł!
Niestety bridging code pomija normalny stos sieci włącznie z netfilterem.
</para>

<para>
Ale ktoś pisze nowy bridging code, zerknij na <ulink
url="http://bridge.sourceforge.net/"
>&#65533;</ulink
>
</para>

<para>
Zauważ, że wsparcie dla bridge'ującego firewalla jest uważane za skrajnie
eksperymentalne.
</para>

</sect2>

<sect2>
<title>Moduł IRC nie obsługuje DCC RESUME</title>

<para>
Jest to połowiczna prawda. Tylko moduł NAT nie jest w stanie obsłużyć ich.
Jeśli jest to firewall bez NAT, powinno działać.
Łatki mile widziane.
</para>

</sect2>

<sect2>
<title>Jak działa SNAT do wielu adresów?</title>

<para>
Netfilter stara się jak najmniej zmieniać pakiety. Więc jeśli mamy
świeżo-przeładowaną maszynę i ktoś za SNAT'em otwiera połączenie z loklanym
portem 1234, netfilter tylko zmienia adres IP a port zostaje ten sam.
</para>

<para>
Jak tylko ktoś inny otworzy inne połączenie z tym samym źródłowym portem,
netfilter musiałby zmienić IP i port jeśli ma tylko jeden IP dla SNAT.
</para>

<para>
Ale jeśli jest dostępny więcej niż jeden, <emphasis remap="bf">ponownie</emphasis> tylko musi
zmieniać część IP.
</para>

</sect2>

<sect2>
<title>ip&lowbar;conntrack: maximum limit of XXX entries exceeded</title>

<para>
Jeśli zauważysz następujące wpisy w syslogu, wygląda na to, że baza danych
conntrack nie ma wystarczającego miejsca na twoje środowisko. Connection
tracking domyślnie obsługuje do pewnego poziomu liczbę współbieżnych połączeń.
Ta liczba zależy od rozmiaru pamięci (przy 64MB: 4096, 128MB: 8192, ...).
</para>

<para>
Możesz z łatwością zwiększyć maksymalną liczbę rejestrowanych połączeń, ale
miej na uwadze, że każde połączenie zjada około 350 bajtów nieswappowalnej
pamięci jądra.
</para>

<para>
By zwiększyć ten limit do np 8192, wpisz:
</para>

<para>

<screen>
echo "8192" &#62; /proc/sys/net/ipv4/ip_conntrack_max
</screen>

</para>

<para>
By zoptymalizować wydajność, zwiększ też ilość koszyków funkcji hashującej
używając parametru <literal remap="tt">hashsize</literal> podczas ładowania modułu <literal remap="tt">ip&lowbar;conntrack.o</literal>.
Zwróć uwagę na fakt, iż przez cechy obecnego algorytmu haszującego, parzysta
liczba koszyków funkcji haszującej (i w szczególności potęgi liczby 2) są
złym rozwiązaniem.
</para>

<para>
Przykład (z 1023 koszykami):

<screen>
modprobe ip_conntrack hashsize=1023
</screen>

</para>

</sect2>

<sect2>
<title>Jak wylistować śledzone / maskaradowane połączenia, podobnie jak 'ipchains -L -M' w 2.2.x</title>

<para>
Jest plik w filesystemie proc, zwany <literal remap="tt">/proc/net/ip&lowbar;conntrack</literal>. 
Możesz wyświetlić jego zawartość pisząc:
</para>

<para>

<screen>
cat /proc/net/ip_conntrack
</screen>

</para>

</sect2>

<sect2>
<title>Jak wylistować dostępne tabele IP?</title>

<para>
Wszystkie dostępne tabele IP są w:

<screen>
cat /proc/net/ip_tables_names
</screen>

</para>

</sect2>

<sect2>
<title>iptables-save / iptables-restore z iptables-1.2 wywala segfaulty</title>

<para>
Znany błąd.  Uaktualnij do najświeższego CVS lub użyj iptables &gt;= 1.2.1
jak tylko będzie dostępne.
</para>

</sect2>

<sect2>
<title>Mijają wieki zanim iptables -L wyświetli regułki</title>

<para>
To dlatego, że iptables robi DNS lookup dla każdego adresu. Jako że każda
regułka składa się z dwu adresów, w najgorszym przypadku wychodzi na 2
DNS lookupy na regułkę.
</para>

<para>
Problem jest, jeśli używasz prywatnych adresów IP (10.x.x.x lub 192.168.x.x),
DNS nie jest w stanie rozwiązać nazwy hosta i czekamy na timeout. Suma
wszystkich timeoutów może być bardzo duża, w zależności od zestawu regułek.
</para>

<para>
Używaj opcji -n (numeric) w iptables by pominąć reverse DNS lookups.
</para>

</sect2>

<sect2>
<title>Jak zrobić by target LOG nie logował na konsolę?</title>

<para>
Musisz skonfigurować syslogd odpowiednio:
Target LOG loguje do facility kern przy priorytecie warning (4).
Zobacz strony man od syslogd.conf by przeczytać więcej o facilities i
priorytetach.
</para>

<para>
Domyślnie, wszystkie wiadomości na priorytecie bardziej poważnym niż debug (7)
są wysyłane na konsole. Jeśli zwiększysz to do 4, zamiast 7, sprawisz, że
logi nie będą się pojawiały na konsoli.
</para>

<para>
Miej na uwadze, że to także pociąga za sobą inne ważne logi i nie pojawią
się na konsoli (to nie wpływa na syslog).
</para>

</sect2>

<sect2>
<title>Jak zbudować transparent proxy używając squida i iptables?</title>

<para>
Na początku, oczywiście, potrzebujesz odpowiedniej regułki DNAT lub REDIRECT.
Użyj REDIRECT tylko gdy squid chodzi na tej samej maszynie co NAT. Przykład:

<screen>
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.22.33:3128
</screen>

</para>

<para>
Potem, musisz skonfigurować odpowiednio squida. Możemy tylko dać
krótkie wskazówki, odsyłam do dokumentacji squida po szczegóły.
</para>

<para>
squid.conf dla Squid 2.3 powinien wyglądać podobnie do tego:

<screen>
http_port 3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy  on
httpd_accel_uses_host_header on
</screen>

Squid 2.4 potrzebuje <emphasis remap="bf">dodatkowej</emphasis> linii:
</para>

<para>

<screen>
httpd_accel_single_host off
</screen>

</para>

</sect2>

<sect2>
<title>Jak używać target LOG / Jak mogę LOGowac i DROPowac?</title>

<para>
Target LOG jest czymś co nazywamy "niekończący target", tj. nie kończy
podróży pakietu.  Jeśli użyjesz target LOG, pakiet będzie zalogowany i
podróż będzie kontynuowana od następnej regułki.
</para>

<para>
Więc jak mam logować i zrzucać pakiet jednocześnie? Nic prostszego, możesz
stworzyć własny łańcuch, zawierający te dwie regułki:
</para>

<para>

<screen>
iptables -N logdrop
iptables -A logdrop -j LOG
iptables -A logdrop -j DROP
</screen>

</para>

<para>
Teraz za każdym razem jak będziesz chciał logować i zrzucić pakiet, możesz
po prostu użyć "-j logdrop".
</para>

</sect2>

<sect2>
<title>Jak mogę zatrzymać robaka XYZ używajać netfiltra ?</title>

<para>
Krótka odpowiedz brzmi: nie da się tego zrobić prawidłowo używając
netfiltra. Większość robaków używa prawidłowych protokołów wyższej warstwy
(tj. HTTP, SMTP (np. VB script w załączniku listu), lub wykorzystuje
jakąkolwiek inną znaną dziurę w demonie obsługującym protokół). Mówiąc
protokół wyższych wartsw, mamy na myśli ponad TCP/IP. Jako że iptables nie
rozumie protokołów wyższych wartsw, jest prawie nie możliwe filtrowanie ich
prawidłowo. Do tego potrzeba proxy filtrujących na poziomie aplikacji.
</para>

<para>
Proszę nie używaj matchu string z patch-o-matic zamiast takiej aplikacji.
Nie da rady sobie z fragmentowanymi pakietami (tj. zapytanie HTTP rozbite na
dwa pakiety TCP), z technikami unikania systemów IDS, itd... zostałeś
ostrzeżony! Match string jest przydatny ale w innych celach.
</para>

</sect2>

<sect2>
<title>jądro loguje: Out of windows data xxx</title>

<para>
Używasz łaty tcp-window-tracking z patch-o-matic, którego kod śledzi czy
pakiety dopuszczonych strumieni TCP mają zgodne numery
sekwencji/potwierdzenia (sequence/acknowledgement), rozmiary segmentów, itd.
pakietów. Kiedy wykryje, że pakiet jest nieakceptowalny (out of the window),
zaznacza go jako INVALID i drukuje komunikat.
</para>

<para>
Nowsze wersje logują pakiet i dokładny warunek, którego nie spełnił:

<itemizedlist>
<listitem>

<para>
ACK is under the lower bound (prawdopodobnie zbyt opóźniony ACK)
</para>
</listitem>
<listitem>

<para>
ACK is over the upper bound (potwierdzane dane jeszcze nie dotarły)
</para>
</listitem>
<listitem>

<para>
SEQ is under the lower bound (retransmitowano dane już potwierdzone)
</para>
</listitem>
<listitem>

<para>
SEQ is over the upper bound (ponad oknem odbiorczym)
</para>
</listitem>

</itemizedlist>

</para>

<para>
Także, w nowszych wersjach logowanie można całkowicie wyłączyć poprzez
sysctl

<screen>
echo 0 &#62; /proc/sys/net/ipv4/netfilter/ip_ct_tcp_log_out_of_window
</screen>

</para>

</sect2>

<sect2>
<title>Dlaczego system śledzenia połączeń (connection tracking) śledzi połączenia UNREPLIED (bez odpowiedzi) z dużym timeoutem?</title>

<para>
Wpierw, sprawdzy czy nie używasz jądra 2.4.20.  Jeśli tak, zaplikuj
natychmiast patch spod adresu: <ulink
url="https://bugzilla.netfilter.org/cgi-bin/bugzilla/showattachment.cgi?attach_id=8"
>&#65533;</ulink
>! The 2.4.20 kernel did contain a bug resulting in lots of bogus UNREPLIED conntrack entries (see <ulink
url="https://bugzilla.netfilter.org/cgi-bin/bugzilla/show_bug.cgi?id=56"
>&#65533;</ulink
>).
</para>

<para>
Sprawdziłeś /proc/net/ip&lowbar;conntrack i znalazłeś wpisy połączeń w stanie
UNREPLIED o bardzo wysokim czasie (aż do pięciu dni) i zastanawiasz się
dlaczego marnujemy wpisy conntrack (które oczywiście nie są połączeniami)?
</para>

<para>
Odpowiedź jest prosta: wpisy UNREPLIED są tymczasowe, tj. jak tylko
zabraknie miejsca (osiągniemy /proc/sys/net/ipv4/ip&lowbar;conntrack&lowbar;max), kasujemy
stare wpisy UNREPLIED. Innymi słowy zamiast trzymać puste wpisy, wolimy
trzymać prawdopodobnie cenne informacje dopóki wolne wpisy są naprawdę
potrzebne.
</para>

</sect2>

<sect2>
<title>Dlaczego nie zaimplementowano opcji 'iptables -C' (--check) ?</title>

<para>
Po pierwsze dlatego, że jesteśmy leniwi ;). A szczerze mówiąc, implementacja
opcji check jest prawie niemożliwa jak tylko zaczynamy stateful firewalling.
Tradycyjne firewalle nie przetrzymujące informacji o stanie połączenia
(są stateless) opierają swoje decyzje tylko w oparciu o informacje zawarte
w nagłówkach pakietów. A że śledzeniem połączeń (i regułami opartymi o '-m
state'), decyzja o filtrowaniu zależy od nagłówka+dane, a także od
nagłówka+dane poprzednich pakietów danego połączenia.
</para>

</sect2>

<sect2>
<title>Czemu nie mogę użyć REJECT w łańcuchach PREROUTING ?</title>

<para>
REJECT stosuje się do filtrowania. Tabela filter ma łańcuchy
INPUT/OUTPUT/FORWARD, zatem REJECT może być użyty tylko w tych łańcuchach
(i pod-łańcuchach, rzecz jasna).
</para>

<para>
Użytkownicy Netfiltra nie filtrują pakietów w tabelach nat lub mangle.
</para>

</sect2>

<sect2>
<title>'iptables: Invalid argument' po aktualizacji jądra (tabela nat)</title>

<para>
Własnie zaktualizowałeś jądro i nagle niektóre komendy (szczególnie
w tabeli 'nat'), powodują ten komunikat, np:

<screen>
# iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE
iptables: Invalid argument
</screen>

</para>

<para>
To się zdarza gdy rozmiary struktur między przestrzenia jądra a użtykownika
się zmieniają. Będziesz musiał ponownie skompilować program przestrzeni
użtykownika używając plików nagłowkowych swojego nowego jądra.  To się
zdarza tylko gdy zaaplikowałes (ty, lub dostawca twojego jądra) niektóre
łaty do starego lub tylko do nowego jądra.  Nie powinno to się zdarzać
z waniliowymi jądrami z kernel.org. Jeśli jednak, poinformuj proszę o tym
listę netfilter-devel.
</para>

</sect2>

<sect2>
<title>Dlaczego nie mogę używać REJECT w łańcuchu PREROUTING?</title>

<para>
Target REJECT służy do filtrowania. Tabela filter ma łańcuchy
INPUT/OUTPUT/FORWARD, zatem REJECT może być tylko używany w tych łańcuchach
(i podłańcuchach, naturalnie).
</para>

<para>
Użytkownicy netfiltra nie filtrują pakietów w tabeli nat czy mangle.
</para>

</sect2>

</sect1>

<sect1>
<title>Pytania o rozwój netfiltra</title>

<sect2>
<title>Nie rozumiem jak używać target QUEUE z przestrzeni użytkownika (userspace)</title>

<para>
Biblioteka zwana libipq jest dostarczona do obsługi pakietów z przestrzeni
użytkownika. (userspace).
Jest dokumentacja do tego w postaci stron w manualu. Musisz skompilować i
zainstalować komponenty rozwojowe iptables:

<screen>
make install-devel
</screen>

</para>

<para>
potem zobacz libipq(3).
</para>

<para>
Może także będziesz zainteresowany implementacją libipq dla Perla, Perlipq w:
<ulink
url="http://www.intercode.com.au/jmorris/perlipq/"
>&#65533;</ulink
>.  Sama implementacja
jest przykładem użycia biblioteki.
</para>

<para>
Inne przykłady kodu:
</para>

<para>

<itemizedlist>
<listitem>

<para>
testsuite/tools/intercept.c z CVS netfiltra
</para>
</listitem>
<listitem>

<para>
ipqmpd (zobacz <ulink
url="http://www.gnumonks.org/projects/"
>&#65533;</ulink
>)
</para>
</listitem>
<listitem>

<para>
nfqtest, część netfilter-tools (zobacz <ulink
url="http://www.gnumonks.org/projects/"
>&#65533;</ulink
>)
</para>
</listitem>
<listitem>

<para>
Jerome Etienne's WAN simulator (zobacz <ulink
url="http://www.off.net/~jme/"
>&#65533;</ulink
>)
</para>
</listitem>

</itemizedlist>

</para>

</sect2>

<sect2>
<title>Moja aplikacja oparta na libipq zgłasza "Failed to receive netlink message: No buffer space available"</title>

<para>
Oznacza to, że bufor gniazda (socket) Netlink po stronie jądra wyczerpał pamięć;
aplikacja przestrzeni użytkownika nie jest w stanie obsłużyć ilości danych
dostarczonych z jądra.
</para>

<para>
<quote
><emphasis>Czy jest możliwe by zwiększyć bufory jądra bym nie wpadał na ten
problem?</emphasis></quote
>
</para>

<para>
Tak, są to standardowe gniazda (sockety) Netlink i możesz dostroić rozmiary buforów
wejściowych (receive buffer) poprzez /proc/sys/net/core, sysctl lub używać
opcji gniazda (socketa) SO&lowbar;RCVBUF na deskryptorze pliku.
</para>

<para>
Możesz także spróbować zapewnić by aplikacja czytała dane najszybciej jak to
jest możliwe. Jeśli nie potrzebujesz całego pakiety, spróbuj kopiować mniej
danych do przestrzeni użytkownika (zobacz ipq&lowbar;set&lowbar;mode(3)).
</para>

</sect2>

<sect2>
<title>Chcę wnieść wkład w źródła, ale nie wiem jak</title>

<para>
Główny zespół netfiltra utrzymuje listę TODO, która zawiera porządane
zmiany / nowe cechy. Możesz pobrać tę listę poprzez anonimowy CVS,
instrukcje są na stronie głównej netfiltra. Ewentualnie możesz także
pobrać przez CVSweb <ulink
url="http://cvs.netfilter.org/cgi-bin/cvsweb/netfilter/TODO/"
>&#65533;</ulink
>
</para>

</sect2>

<sect2>
<title>Naprawiłem błąd lub napisałem nowy moduł. Co mam zrobić?</title>

<para>
Jeśli chcesz to opublikować, wyślij to listy dyskusyjnej netfilter-devel.
Instrukcja jak zostać subskrybentem jest w <ulink
url="http://lists.netfilter.org/mailman/listinfo/netfilter-devel/"
>&#65533;</ulink
>.
</para>

<para>
Prawidłowy sposób wysyłania łat:

<itemizedlist>
<listitem>

<para>
 Temat zaczynający się od <emphasis remap="bf">[PATCH]</emphasis>
</para>
</listitem>
<listitem>

<para>
 Załączone prosto w ciele wiadomości, bez MIME.
</para>
</listitem>
<listitem>

<para>
 wpis cvs-checkin/Changelog poza diffem.
</para>
</listitem>
<listitem>

<para>
 forma `diff -u old new', spoza katalogu root pakietu (tj. może być stosowany z -p1 będąc pod odtarowanym katalogiem.
</para>
</listitem>

</itemizedlist>

</para>

<para>
Jeśli napisałeś nowe rozszerzenie, lub dodałeś nowe opcje do starego
rozszerzenia, zwykle dobrze jest zaktualizować także
netfilter-extension-HOWTO by włączyć opis nowej funkcjonalności. Dodatkowo,
przyciągnie to więcej użytkowników do rozszerzenia i pozwoli na uzyskanie
więcej informacji od użytkowników.
</para>

</sect2>

</sect1>

</article>

