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.
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:
--ahspi [!] spi[:spi]-> match spi (zakres)
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:
--espspi [!] spi[:spi]-> match spi (zakres)
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.
Ł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:
[!] --iplimit-above n- pasuje jeśli ilośæ istniejących połączeñ nie jest wyższa niż n
--iplimit-mask n- grupuje komputery przez użycie maski
Ł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:
--ssrr- pasuje do pakietów z ustawioną flagą `strict source routing'
--lsrr- pasuje do pakietów z ustawioną flagą `loose source routing'
--no-srr- pasuje do pakietów bez ustawionej flagi `source routing'
--rr- pasuje do pakietów z ustawioną flagą `record route flag'
[!] --ts- pasuje do pakietów z ustawioną flagą `timestamp'
[!] --ra- pasuje do pakietów z ustawioną flagą `router-alert'
[!] --any-opt- pasuje do pakietów z ustawioną przynajmniej jedną opcją (lub bez opcji IP jeśli użyje siê negacji (!)).
Ł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:
[!] --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.
Ł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:
--source-ports port[,port:port,port...]- testuje porty źródłowe
--sports port[,port:port,port...]- testuje porty źródłowe
--destination-ports port[,port:port,port...]- testuje porty docelowe
--dports port[,port:port,port...]- testuje porty docelowe
--ports port[,port:port,port]- testuje zarówno porty źródłowe jak i docelowe
Ł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:
--every Nth- pasuje do n-tego pakieto
[--counter] num- użyj licznika 0-15 (domyślnie:0)
[--start] num- zainicjuj licznik wartością `num'; musi byæ pomiêdzy 0 a n-ty - 1
[--packet] num- pasuje do pakietu numer `num'; musi byæ pomiêdzy 0 a n-ty - 1; jeśli `--packet' używany jest jako licznik, musi byæ n reguł `--packet', pokrywających wszystkie wartości pomiêdzy 0 a (n-ty - 1) włącznie
Ł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:
--pkt-type [!] packettype- pasuje do pakietu, który jest pakietem typu
host- do nas
broadcast- do wszystkich
multicast- do grupy
Ł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.
Ł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:
[--psd-weight-threshold próg]- waga progu detekcji skanowania portów
[--psd-delay-threshold zwłoka]- waga progu zwłoki skanowania portów
[--psd-lo-ports-weight lo]- waga uprzywilejowanych portów
[--psd-hi-ports-weight hi]- waga wysokich portów
Ł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:
[--average] procent- prawdopodobieñstwo w procentach dopasowania. Jeśli zostanie pominiête, przyjmowane jest prawdopodobieñstwo 50%. Wartośæ musi byæ w przedziale 1-99.
Ł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:
--realm [!] wartośæ[/maska]- dopasuj do sfery
Ł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)
{
}
Ł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:
--string [!] ciąg znaków- dopasuj ciąg znaków w pakiecie
Ł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 :
--timestart value- minimalny czas w formacie HH:MM
--timestop value- maksymalny czas w formacie HH:MM
--days listofdays- lista dni (ważna wielkośæ liter)
Ł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:
--ttl-eq wartośæ- TTL równy wartości
--ttl-lt wartośæ- TTL mniejszy niż wartośæ
--ttl-gt wartośæ- TTL wiêkszy niż wartośæ