Linuxové noviny | Březen 1998 | ||
| |||
V tomto článku vás chci seznámit s nástrojem zvaným ipchains, jehož autorem je Paul Russel (Paul.Russell@rustcorp.com.au). Je to nástroj pro tvorbu firewallů typu packetový filtr pod Linuxem. Jeho funkčnost je nadmnožinou funkčnosti IPFW. Účel použití IP chains v systému je stejný, jako u klasického IPFW packetového filtru: specifikovat, které packety mohou projít systémem (ať již dovnitř, ven nebo být forwardovány přes systém), dále mít možnost sledovat, kolik packetů určitého tvaru prochází systémem, a dokonce mít možnost například logovat příchod podezřelých packetů. Poslední jmenovaná vlastnost je důležitá pro skutečně aktivní obranu před útočníkem a umožňuje odchytit pokusy o průnik hned v začátcích.
Obrázek 2: Cesta packetu počítačem
Klasický přístup definoval tři základní sady filtrovacích pravidel - vstupní, forwardovací a výstupní (plus čtvrtý typ - accounting). V systému IP chains může být takovýchto sad (v terminologii IP chains řetězů) libovolně mnoho a mohou na sebe navzájem odkazovat. Existují tři výchozí řetězce: input, output a forward. Jádro každým z těchto řetězců kontroluje, jestli packet smí projít dál na příslušném místě zmiňovaného obrázku. Dále existuje pět pseudořetězců ACCEPT, DENY, REJECT, REDIR a MASQ. Tyto se chovají jako běžné řetězce v tom smyslu, že mohou být odkazovány z jiných řetězců (například pokud řetězec forward odkáže všechny packety na řetězec DENY, znamená to zákaz forwardování přes tento počítač). Logika práce IP chains je pak jasná: Pomocí programu ipchains podobně jako přes ipfwadm vytváříme filtrovací pravidla. Tak jako v ipfwadm mělo každé pravidlo typ podle toho, jestli akceptovalo nebo odmítalo packet, který mu odpovídal, spustí v IP chains každé pravidlo na packet, který mu odpovídá, nějaký jiný řetězec (ACCEPT, DENY nebo jiný). Výhoda IP chains je v tom, že nejsme odkázáni jen na standardní pseudořetězce, ale můžeme si vytvářet vlastní.
Pomocí IP chains můžeme například nadefinovat řetězec stanice a řetězec servery, a příslušné packety v řetězci forward na tyto přeposílat, jdou-li na servery, na stanice nebo jinam. Případnou změnu pro celou třídu strojů pak můžeme jednoduše realizovat přidáním jediného pravidla do řetězce stanice nebo servery:
MYNET=1.2.3.0/255.255.255.0 # Definujeme pravidla pro servery: ipchains -N servery # Dovnitř pustíme pouze na port telnetu, ssh, fingeru ... ipchains -A servery -d $MYNET telnet -p tcp -j ACCEPT ipchains -A servery -d $MYNET ssh -p tcp -j ACCEPT ipchains -A servery -d $MYNET finger -p tcp -j ACCEPT # ... a zakážeme otvírání jakýchkoli jiných # TCP spojení dovnitř ipchains -A servery -d $MYNET -p tcp -y -j DENY # zbytek TCP packetu povolíme: ipchains -A servery -p tcp -j ACCEPT # Povolíme ICMP oběma směry ipchains -A servery -p icmp -j ACCEPT # Zbytek zakážeme ipchains -A forward -j DENY # Definujeme pravidla pro stanice: ipchains -N stanice # Dovnitř pustíme pouze na port fingeru ... ipchains -A stanice -d $MYNET finger -p tcp -j ACCEPT # ... a zakážeme otvírání jakýchkoli jiných # TCP spojení dovnitř ipchains -A stanice -d $MYNET -p tcp -y -j DENY # zbytek TCP packetu povolíme: ipchains -A stanice -p tcp -j ACCEPT # Povolíme ICMP oběma smery ipchains -A stanice -p icmp -j ACCEPT # Zbytek zakážeme ipchains -A forward -j DENY # Řetězec forward: definujeme servery ... ipchains -A forward -s 1.2.3.1 -j servery ipchains -A forward -d 1.2.3.1 -j servery ipchains -A forward -s 1.2.3.6 -j servery ipchains -A forward -d 1.2.3.6 -j servery ipchains -A forward -s 1.2.3.8 -j servery ipchains -A forward -d 1.2.3.8 -j servery # ... a stanice ... ipchains -A forward -s 1.2.3.2 -j stanice ipchains -A forward -d 1.2.3.2 -j stanice ipchains -A forward -s 1.2.3.129 -j stanice ipchains -A forward -d 1.2.3.129 -j stanice ipchains -A forward -s 1.2.3.123 -j stanice ipchains -A forward -d 1.2.3.123 -j stanice # ... a zakážeme zbytek. ipchains -A forward -j DENY Takto tedy máme oddělenou sadu pravidel pro servery a pro stanice, přičemž přidání další stanice nebo dalšího serveru je otázku přidání dvou pravidel do řetězce forward, povolení další TCP služby pro danou třídu počítačů obnáší jedno další pravidlo do řetězce servery nebo stanice. Samozřejmě definování řetězců podle tříd počítačů není jedinou možností IP chains. Je možné mít například odděleně vstupní a výstupní řetězec, nebo třeba řetězce pro každý interface či protokol zvlášť.
Odkazy:
|