Nastny Poprzedni Spis Trei

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:

Ł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:

Test `esp' działa dokładnie tak samo:

# 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:

Nie zapomij 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 pojedyñczy 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 > 4 reject-with icmp-port-unreachable

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-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/8 > 4 reject-with icmp-port-unreachable

Opcje dostêpne dla testu `iplimit' to:

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)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            IPV4OPTS RR
DROP       all  --  anywhere             anywhere            IPV4OPTS TS

Opcje dostêpne dla testu `ipv4options' to:

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 DROP

# ptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  anywhere             anywhere           icmp echo-request length 85:65535

Opcje dostêpne dla testu `length' to:

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 pojedyñczych 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

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere           mport ports ftp-data:telnet,http

Opcje dostêpne dla testu `mport' to:

3.6 Łata nth

Łata autorstwa Fabrice MARIE <fabrice@celestix.com> dodaje nowy test, sprawdzający czy dany pakiet nie jest n-tym pasującym do reguły.

Na przykład, jeśli chcesz odrzucaæ co drugi ping, napisz:

# iptables -A INPUT -p icmp --icmp-type echo-request -m nth --every 2 -j DROP

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  anywhere             anywhere           icmp echo-request every 2th 

Rozszerzenie dodane przez Richarda Wagnera <rwagner@cloudnet.com> umożliwia prosty i szybki sposób na wykonanie rozkładania obciążenia zarówno dla połączeñ wychodzących jak i wchodzących.

Na przykład, jeśli chcesz rozłożyæ obciążenie pomiêdzy trzy adresy: 10.0.0.5, 10.0.0.6 i 10.0.0.7, możesz napisaæ:

# iptables -t nat -A POSTROUTING -o eth0 -m nth --counter 7 --every 3 --packet 0 -j SNAT --to-source 10.0.0.5
# iptables -t nat -A POSTROUTING -o eth0 -m nth --counter 7 --every 3 --packet 1 -j SNAT --to-source 10.0.0.6
# iptables -t nat -A POSTROUTING -o eth0 -m nth --counter 7 --every 3 --packet 2 -j SNAT --to-source 10.0.0.7

# iptables -t nat --list
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  anywhere             anywhere           every 3th packet #0 to:10.0.0.5 
SNAT       all  --  anywhere             anywhere           every 3th packet #1 to:10.0.0.6 
SNAT       all  --  anywhere             anywhere           every 3th packet #2 to:10.0.0.7 

Opcje dostêpne dla celu `nth' to:

3.7 Łata pkttype

Łata autorstwa Michala Ludviga <michal@logix.cz> dodaje nowy test, pozwalający dopasowywaæ pakiety na podstawie ich typu: host/broadcast/multicast.

Jeśli na przykład chcesz odrzucaæ wszystkie pakiety broadcast'owe:

# iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere           PKTTYPE = broadcast 

Opcje dostêpne dla celu `pkttype' to:

3.8 Łata pool

Łata autorstwa Patricka Schaafa <bof@bof.de>. Joakim Axelsson i Patrick są w trakcie przepisywania go od nowa, wiêc prawdopodobnie zamienią tą sekcjê niedługo tym co tak naprawdê stworzyli.

3.9 Łata psd

Łata autorstwa Dennisa Koslowskiego <dkoslowski@astaro.de> dodaje nowy test, pozwalający wykryæ skanowanie portów.

W swej najprostszej postac, psd może byæ użyty tak:

# iptables -A INPUT -m psd -j DROP

# iptables --list
Chain INPUT (policy ACCEPT)
target  prot opt source    destination         
DROP    all  --  anywhere  anywhere    psd weight-threshold: 21 delay-threshold: 300 lo-ports-weight: 3 hi-ports-weight: 1

Opcje dostêpne dla testu `psd' to:

3.10 Łata random

Łata autorstwa Fabrice MARIE <fabrice@celestix.com> dodaje nowy test, pozwalający na dopasowywanie losowych pakietów na podstawie podanego prawdopodobieñstwa.

Na przykład, jeśli chcesz odrzucaæ połowê pingów losowo, możesz napisaæ:

# iptables -A INPUT -p icmp --icmp-type echo-request -m random --average 50 -j DROP

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source       destination         
DROP       icmp --  anywhere     anywhere        icmp echo-request  random 50% 

Opcje dostêpne dla testu `random' to:

3.11 Łata realm

Łata autorstwa Sampsa Ranta <sampsa@netsonic.fi> dodaje nowy test, umożliwiający wykorzystanie kluczy sfery (ang.realm) pochodzących z rutingu jako testów podobnych do tych, z klasyfikatora pakietów.

Na przykład, by logowaæ wszystkie wychodzące pakiety do sfery 10, możesz napisaæ:

# iptables -A OUTPUT -m realm --realm 10 -j LOG

# iptables --list
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere           REALM match 0xa LOG level warning

Opcje dostêpne dla testu `realm' to:

3.12 Łata record-rpc

Łata autorstwa Marcelo Barbosa Lima <marcelo.lima@dcc.unicamp.br> dodaje nowy test, umożliwiający sprawdzanie, czy źródło pakietu żądało tego portu już wcześniej przy użyciu portmapper'a, czy jest to nowe żądanie typu GET do portmapper'a; dziêki temu możliwe jest filtrowanie wywołañ RPC.

By użyæ śledzenia połączeñ RCP, napisz:

# iptables -A INPUT -m record_rpc -j ACCEPT

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination 
ACCEPT     all  --  anywhere             anywhere

Test nie ma żadnych opcji.

Nie przejmuj siê, że informacje o teście nie są drukowanie. Po prostu funkcja print() tego testu jest pusta:

/* Prints out the union ipt_matchinfo. */
static void
print(const struct ipt_ip *ip,
      const struct ipt_entry_match *match,
      int numeric)
{
}

3.13 Łata string

Łata autorstwa Emmanuela Rogera <winfield@freegates.be> dodaje nowy test, umożliwiający dopasowywanie ciągów znaków w dowolnym miejscu pakietu.

Jeśli na przykład chcesz wyłapywaæ ciąg znaków `cmd.exe' i kolejkowaæ je do systemu IDS w przestrzeni użytkownika, napisz:

# iptables -A INPUT -m string --string 'cmd.exe' -j QUEUE

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
QUEUE      all  --  anywhere             anywhere           STRING match cmd.exe 

Proszê jednak używaæ tego testu z uwagą. Wiele ludzi chce użyæ tego celu do zatrzymania robaków, używając celu DROP. Jest to poważny błąd i zostanie ominiêty przez każdy sposób unikania wykrycia przez IDS.

Wielu ludzi używało tej łaty do powstrzymania pewnych metod HTTP, takich jak POST czy GET, przez odrzucanie każdego pakietu HTTP zawierającego ciąg znaków POST. Proszê zrozumieæ, że lepiej tą pracê wykona proxy filtrujące. Co wiêcej, dokument HTML zawierający słowo POST również zostanie odrzucony. Łatê stworzono aby można było kolejkowaæ ciekawe pakiety do przestrzeni użytkownika, nic wiêcej.

Opcje dostêpne dla testu `string' to:

3.14 Łata time

Łata autorstwa Fabrice MARIE <fabrice@celestix.com> dodaje nowy test, pozwalający sprawdzaæ pakiety na podstawie czasu ich przyjścia lub opuszczania maszyny.

Na przykład, by zaakceptowaæ pakiety które przybywają pomiêdzy ósmą rano a osiemnastą wieczorem od poniedziałku do piątku, możesz napisaæ:

# iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT

# iptables --list 
Chain INPUT (policy ACCEPT)
target     prot opt source           destination
ACCEPT     all  --  anywhere         anywhere        TIME from 8:0 to 18:0 on Mon,Tue,Wed,Thu,Fri 

Opcje dostêpne dla testu `time' to: Supported options for the time match are :

3.15 Łata ttl

Łata autorstwa Haralda Welte <laforge@gnumonks.org> dodaje nowy cel, który pozwala dopasowywaæ pakiet na podstawie jego TTL.

Jeśli na przykład chcesz logowaæ pakiety z TTL mniejszym niż 5, napisz:

# iptables -A INPUT -m ttl --ttl-lt 5 -j LOG

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
LOG        all  --  anywhere             anywhere           TTL match TTL < 5 LOG level warning

Opcje dostêpne dla testu `ttl' to:


Nastny Poprzedni Spis Trei