Pokud bychom chtěli použít pravidla na nějaký rozsah adres, určitě bychom použili rozšíření iprange, kterým určíme zdrojový či cílový rozsah ( --src-range
, --dst-range
). Počáteční a cílová adresa se odděluje pomlčkou. Možná jsem se v minulém díle zapomněl zmínit o tom, že můžeme v případě --dport
(ale i v multiportu) zadávat rozsah portů oddělených dvojtečkou. Takže se v následujícím příkladu se podíváme, jak z IP adres 192.168.0.1 až 192.168.0.10 povolit porty 50 až 55.
iptables -A INPUT -p tcp --dport 50:55 -m iprange --dst-range 192.168.0.1-192.168.0.10 -j ACCEPT
Rozšíření mac má jediný parametr --mac-source
. Jak už název napovídá, slouží k definování příchozí MAC adresy. Využít to můžeme například tehdy, pokud nechceme, aby v naší síti měnili uživatelé svoji IP adresu, a tak jim ji dáme napevno podle MAC. Neříkám, že to je dokonalá ochrana, protože si ji můžou taky změnit, ale na druhou stranu většina normálních lidí se měněním IP adresy obtěžovat nebude.
iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -i eth0 -s 192.168.0.2 -j ACCEPT
Pro ICMP protokol existuje stejnojmenné rozšíření, které nám specifikuje druh icmp paketu --icmp-type
. Je to celkem dlouhý seznam, a tak uvedu jenom ty nejpoužívanější echo-request (ping) či echo-reply (pong). Pokud potřebujete definovat jiné, použijte help iptables -p icmp -h
.
Další velmi důležitou částí, kterou při stavbě firewallu určitě použijete, je limit. Docela nepříjemnou situací může být, pokud někdo zahltí váš server příliš mnoha požadavky o odpověď. V praxi si to můžete ověřit: Vezměte si nějakou starší mašinu na 100 Mbps síti, a třeba ze 2 počítačů pusťte ping flood ( ping -f 192.168.0.1
). A uvidíte, nakolik se z těch 100 Mbps rychlost srazila dolů … Jako parametry uvádíme --limit
, což je časová jednotka: sekunda, minuta, hodina nebo den. A další --limit-burst
, kde definujeme počet paketů. Takže příklad, jak omezíme 10 odpovědí na ping za sekundu (což je pro běžné potřeby víc jak dost), by byl:
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 10 -j ACCEPT
Pomocí STATE definujeme stav spojení, můžeme zadávat více voleb oddělených čárkou. Hodí se to zejména při použití stavového firewallu, např. máme povolené FTP port 21, ale ostatní jsou zakázané implicitně ve fw, a tak abychom ho vůbec mohli používat, povolíme stav RELATED, který existující konexi umožní použít i jiné porty, na kterých se „dohodli”, přestože nemusí být zrovna otevřené, viz případ FTP. ESTABLISHED zase umožní komunikovat na již navázaném spojení, tak, jak si to řídí obě strany. INVALID je stav, kdy paket nemůže být identifikován nebo je vadný, či není známá žádná konexe, ke které patří. NEW je, když paket začal novou konexi. Příklad takového stavové firewallu:
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Docela zajímavé může být, když použijeme patch „patch-o-matic”, který nám například umožní použití rozšíření TIME, pomocí něhož můžeme určovat pravidla na základě času/data. Použití už zůstává na fantazii administrátora, jestli chce třeba v denní špičce dělat s pakety něco jiného než v noci, či přes týden počítat traffic a o víkendu ne, atd …
Zkrátka tento modul, který musíte v jádře přidat CONFIG_IP_NF_MATCH_TIME, vám umožní tyto volby:
--timestart
– Čas, odkdy začne pravidlo vyhovovat (formát: HH:MM), výchozí je 00:00.
--timestop
– Čas, kdy přestane vyhovovat (formát: HH:MM), výchozí 23:59.
--days
– Seznam dnů oddělených mezerou (Mon,Tue,Wed,Thu,Fri,Sat,Sun), výchozí nastavení je pro každý den.
--datestart date
– Datum, kdy začne pravidlo vyhovovat (formát:YYYY[:MM[:DD[:hh[:mm[:ss]]]]] hodiny, minuty a sekundy začínají nulou 0), výchozí je rok 1970
--datestop
– To samé jako datestart, ale pro konec. Výchozí je rok 2037.
Příklad povolení paketů v pracovní dny od 8:00 do 18:00:
iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT
Počítat traffic lze určitě mnoha lepšími programy, ale poslední rozšíření, které zde uvedu, bude právě ta tento účel account z balíku „patch-o-matic”. Dělá statistiky podle ip adres, a je k nim celkem pohodlný přístup, takže když si na to uděláte skript, lze celkem jednoduše s mrtg vytvářet grafy.
Vlastnosti:
- dlouhé (počítadla zvlášť pro každý protokol TCP/UDP/IMCP/Other + celkem) and krátké statistiky
- pomocí jednoho můžeme sledovat traffic všech klientů v síti
- načítání/ukládání čítačů
Příklad:
Chceme uložit traffic každé IP z místní sítě, která komunikuje s naším web serverem.
iptables -A INPUT -p tcp --dport 80 -m account --aname www --aaddr 192.168.0.0/24 --ashort
iptables -A OUTPUT -p tcp --sport 80 -m account --aname www --aaddr 192.168.0.0/24 --ashort
Hodnoty můžeme přečíst:
cat /proc/net/ipt_account/www
Můžeme je i změnit:
echo "ip = 192.168.0.1 packets_src = 0" > /proc/net/ipt_account/ww
Stránka projektu: www.barbara.eu.org/~quaker/ipt_account/
Iptables má rozšíření celkem slušnou sbírku, která se neustále mění, a to nemluvím o různých patchích. Podívejte se třeba na aktuální manuál, kde najdete takové legrácky jako kvóty jednotlivých paketů, limit spojení na IP či ipp2p, který zjistí, jestli paket nenáleží nějakému známému p2p protokolu. Příště se podíváme na TARGET EXTENSIONS, kde se mimo jiné podíváme na NAT a úpravu paketů …