Hlavní navigace

Vše o iptables: Target extensions

Csaba Botoš 17. 2. 2006

V tomto závěrečném díle našeho seriálu si ukážeme vymoženosti TARGET EXTENSIONS a podíváme se, jak sdílet internet, upravovat pakety a používat logy.

Prvním z rozšíření, na které se dnes podíváme, slouží logování. LOG nám umožní do výchozího kernel logu ukládat informace o hlavičkách paketů, které vyhoví předem stanovenému pravidlu. Samotný LOG ovšem žádnou akci s paketem neprovede, pouze o něm zapíše informaci. Takže pokud bychom chtěli logovat zahozené pakety, použili bychom na to 2 pravidla.

Nejdůležitější parametry:

--log-level: určuje, jak „ukecaný“ má být výpis (syntaxe „syslog“)
--log-prefix: Vlastní poznámka, která se bude zapisovat s informacemi o paketu
--log-tcp-sequence: Ukládá se i sekvenční číslo TCP spojení. Avšak pozor, je-li log přístupný uživatelům, představuje to bezpečnostní riziko.
--log-tcp-options: Zapíše se nastavení z hlavičky TCP paketu
--log-ip-options: Uloží se nastavení z hlavičky IP paketu

Při logování můžeme také využívat rozšíření limit, kterým snadno omezíme frekvenci zapisování logu. Je totiž docela možné, že pokud bychom měli na „blacklistu” nějakého uživatele, kterému bychom zahazovali všechny pakety a logovali je, že by si třeba spustil skenování portů a chudák logger by pomalu nestíhal zapisovat. Navíc za chvilku by ten soubor měl bůhví kolik MB, až by se v něm pomalu nedalo ani číst.

Takže si uvedeme malinký příklad této situace, kdy budeme zahazovat všechna spojení od 192.168.0.2 a logovat je s tím, že se zapíší maximálně 5×3 pakety za hodinu. Pro větší přehlednost si vytvoříme vlastní CHAIN, ve kterém proběhne samotné zapsání a zahození (z programátorského hlediska by se dalo říct, že si uděláme funkci), který budeme volat při kontrole paketu.

#Vlastní řetězec
iptables -N zapis
iptables -A zapis -m limit --limit 5/h --limit-burst 3 -j LOG --log-prefix "BlackList: "
iptables -A zapis -j DROP

#Kontrola
iptables -A INPUT -i eth0 -s 192.168.0.2 -j zapis 

Nyní se konečně podíváme na tabulku nat, pomocí které budeme manipulovat s pakety. Na světě totiž pomalu, ale jistě začíná ubývat veřejných IPv4 IP adres (dále zde budu používat zkratku VIP), a tak se tento problém snaží zatím řešit všelijak, než se konečně přejde na ipv6 řešení. Proto například ve velké firmě, kde je mnoho „úředníků”, sekretářek atd., kteří ke své práci potřebují internet, ale zcela jistě se obejdou bez VIP, se pomocí natování dá skrýt celá firemní síť pod 1 IP routeru nebo prostě můžeme „sdílet internet“. Jako první si uvedeme SNAT neboli Source NAT, který umožňuje pozměnit zdrojovou IP adresu za jinou, pod kterou opustí fw. Toto pravidlo je asi jedním z nejpoužívaněj­ších. Příklad využití – viz ta firma s pracovníky, kteří nepotřebují VIP.

SNAT funguje pouze v tabulce nat a v chain POSTROUTING. Jako parametr se mu dává --to-source nebo i zkráceně –to a IP adresa, pod kterou se bude maskovat. V případě, že náš server dostává IP z DHCP, docela těžko uhádneme, jakou IP „vyfasujeme”, a proto to jistí maškaráda (MASQUERADE), která je v podstatě to samé jako SNAT, ale maskuje adresy na výchozí v rámci nějakého zařízení na serveru.

Uvedu 2 příklady: v Prvním případě má server napevno IP 192.168.0.1 do internetu na eth0 a má sdílet internet uživatelům.

#Pokud paket chce opustit eth0, zamaskuje se za 192.168.0.1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.0.1
Ve druhém případě mi půjde také o sdílení internetu, jenom na serveru ji nemám napevno, ale teprve ji obdržím z DHCP.

#Pokud paket chce opustit eth0, zamaskuje se za výchozí na eth0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

Osobně doporučuji používat SNAT, pokud to situace dovolí, můžete potom předejít zbytečným komplikacím. Jestli jsme někde na začátku fw nastavili výchozí politiku FORWARD na DROP, tak by nám SNAT či maškaráda ještě nefungovala. Hodně zjednodušeně řečeno, FORWARD nám ještě říká, kterým směrem se pakety můžou natovat. Ano, kdybyste to nechali všechno povolené, „odpadnou” vám s tím starosti, ale už nemůžete (v případě, že budete mít ještě jiná síťová zařízení) definovat, ze kterých z nich je povolen přístup na internet. Prostě jej budou mít všichni, co si na něj dají bránu. Lze přímo psát do SNATu volbu -s a kontrolovat zdrojovou adresu, která chce odejít, ale je to „prasácké” řešení, ostatně je to skoro to samé jako s HTML a CSS … Naše CSS je onen FORWARD ;).

Takže opět nějaká ukázka, jak příchozí paket z eth1 a zdrojovou IP 192.168.0.22 pustit na net:

#Pokud paket chce opustit eth0, zamaskuje se za 192.168.0.1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.0.1
#Zapneme forward
echo "1" > /proc/sys/net/ipv4/ip_forward
#Pokud paket přichází z eth1 s IP 192.168.0.22 chce opustit eth0, povol
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.0.22 -j ACCEPT 

Samozřejmě, že na FORWARD můžeme aplikovat mnohem složitější pravidla jako například stavový firewall, kdy budeme forwardovat jenom navázaná spojení, nebo klidně můžeme použít rozšíření ipp2p, kdy nepovolíme p2p programům vstup do netu atd … Záleží na vaší fantazii …

Opakem SNATU je DNAT, ten pro změnu umožní forwardovat porty či celou IP směrem do privátní sítě. Podobně jako source nat, i destination nat používá volby --to-destination (nebo zkráceně) –to a též funguje pouze v tabulce nat, ale pro změnu v chain PREROUTING. V podstatě je to úplně to samé. Řekněme, že server má přiděleny 2 IP adresy a jednu z nich chce forwardnout dovnitř site:

#2 ruzne IP
ifconfig eth0 192.168.66.1 up
ifconfig eth0:0 192.168.66.2 up

#Tu druhou forwardneme na mašinu uvnitř sítě s IP 192.168.0.2
#Nejprve příchozí spojení

iptables -t nat -A PREROUTING -d 192.168.66.2 -j DNAT --to 192.168.0.2

#A nezapomenout i na odchozí
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.2 -j SNAT --to 192.168.66.2 

Další rozšíření REDIRECT slouží k přesměrování nějakého lokálního portu na jiný. Například máme-li transparentní proxy server squid běžící standardně na portu 3128, veškeré příchozí požadavky uživatelů na port 80(www) přesměrujeme na proxy, která jim teprve poslouží k prohlížení stránek.

iptables -t nat -A PREROUTING -i eth1 --dport 80 -j REDIRECT --to 3128 

REJECT zase vrátí slušnou odpověď v podobě icmp o nedostupnosti. Volba --reject-with může obsahovat icmp-host-unreachable, icmp-port-unreachable či jiné, které najdete v MANu. Jako defaultní se používá ta o nedostupnosti portu. Třeba příklad, jak informovat o nedostupnosti služby auth (443):

iptables -A INPUT -p tcp --dport 443 -j REJECT 

Osobně moc příkladů, jak ještě využít reject kromě této služby, která při zahazování paketů bez odpovědí dělá neplechu, nevymyslím.

Poslední tabulka, o které bude řeč, je mangle, která umožňuje modifikovat pakety.

MARK slouží pro nastavení Netfilter značkových hodnot, které jsou přidružené se specifickými pakety. Toto rozšíření lze použít pouze v mangle tabulce. MARK hodnoty mohou být používány spolu s pokročilými routovacími schopnostmi v Linuxu (jako třeba shapování, měření trafficu na úrovní ip atd.)

TOS – Type Of Service je osmibitová hodnota, která udává, jakým stylem mají být pakety doručeny. Jestli třeba mají být doručeny přednostně (s minimální odezvou), s maximální propustností či pro označování neprioritního provozu. S volbou --set-tos můžeme předat tyto parametry: Minimize-Delay, Maximize-Throughput, Maximize-Reliability, Minimize-Cost a Normal-Service, což je také výchozí volba.

Rošíření TTL (TimeToLive) je užitečná věcička pro měnění TTL v IP hlavičce na stejnou hodnotu na všech odcházejících paketech. Důvod, proč byste to dělali, je například ten, že máte divného ISP, který vám nedovolí mít víc než jeden stroj připojený k internetu a aktivně to sleduje. Nastavení všech TTL hodnot na stejnou hodnotu pak způsobí, že je pro něj složitější „všimnout si“, že používáte víc PC. Můžeme pak resetovat TTL hodnotu pro všechny odcházející balíčky k normalizované hodnotě, jako 64, jak je specifikováno v Linuxovém jádru. Jako parametry uvádíme --ttl-set, --inc pro inkrementaci a --dec pro dekrementaci.

iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64 

Určitě byste ještě našli různé zajímavosti v manuálu jako například rozšíření pro mangle ROUTE, pomocí kterého můžete měnit paketům výchozí bránu a tak dále. Doufám, že se vám tento mini seriál líbil a přinesl vám aspoň pár nových rad, přeji vám mnoho úspěšných chvil se stavbami firewallu.

Našli jste v článku chybu?

17. 2. 2006 9:22

uživatel si přál zůstat v anonymitě
Nechapu proc autor nepouziva v prikladech verejne IP adresy pro rozhrani do Internetu ???
Clovek by potom mohl mit zmatek, kdyz se docte jaky rozsah IP se ma pouzivat pro privatni site a autor je pouziva jako verejne IP( viz. clanek:IP 192.168.0.1 do internetu)

18. 1. 2007 14:05

er (neregistrovaný)
Vazeni kritici,
kdyz budu umet iptables jako VY, coz neni zase tak nemozne,
tak sem nepolezu. Aspon nekdo se pokusil sepsat neco pro ty,
co treba neumi dost dobre anglicky.
Pro zacatecniky, kteri si chteji neco zkusit a nebo overit:
online generator scriptu iptables
http://easyfwgen.morizot.net/gen/index.php





DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí