Vše o iptables: Match extensions

3. 2. 2006
Doba čtení: 4 minuty

Sdílet

V předchozím díle jsme nakousli match extensions a dnes je dokončíme s tím, že se podíváme na nejpoužívanější prvky. Povíme si také o patch-o-matic, pomocí kterého můžeme určovat pravidla na základě času/data.

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 po­volit 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_MAT­CH_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,Fr­i,Sat,Sun), výchozí nastavení je pro každý den.
--datestart date  – Datum, kdy začne pravidlo vyhovovat (formát:YYYY[:MM[:DD[:h­h[: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:

bitcoin školení listopad 24

echo "ip = 192.168.0.1 packets_src = 0" > /proc/net/ipt_account/ww 

Stránka projektu: www.barbara.e­u.org/~quaker/ip­t_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ů …

Autor článku