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. Zprovozn∞nφ IP chainsSystΘm IP chains mß dv∞ Φßsti: jedna je uvnit° jßdra a jde o vlastnφ filtrovacφ k≤d, druhß Φßst - program ipchains - slou╛φ k nastavovßnφ jednotliv²ch filtrovacφch pravidel. Prvnφ Φßst je mo╛no zφskat jako patch do jßdra (a╗ ji╛ v²vojovΘho - sΘrie 2.1, tak i stabilnφho - sΘrie 2.0). Program ipchains je dostupn² ve zdrojovΘ form∞ z domovskΘ strßnky IP Firewalling chains. To, ╛e v systΘmu je nainstalovßn IP chains, lze ov∞°it tak, ╛e existuje soubor /proc/sys/net/ip_fwchains.Cesta packetu poΦφtaΦemK porozum∞nφ systΘmu IP chains je nutnΘ v∞d∞t, jak²m zp∙sobem prochßzφ packet poΦφtaΦem (viz obrßzek Cesta packetu poΦφtaΦem).![]() Obrßzek 2: Cesta packetu poΦφtaΦem
V Φem se li╣φ IP chains?V p°edchozφm odstavci jsem popsal cestu packetu poΦφtaΦem. Tato cesta je v podstat∞ stejnß p°i pou╛itφ klasickΘho firewallingu (ipfwadm) i p°i pou╛itφ IP chains. Kde je tedy rozdφl?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φ. P°φklad - t°φdy poΦφtaΦ∙M∞jme sφ╗, na kterΘ b∞╛φ n∞kolik server∙ a n∞kolik u╛ivatelsk²ch stanic. Chceme povolit telnet, ssh a finger na servery, jakΘkoli spojenφ ze server∙ ven, ale na stanice chceme povolit jen finger. Pomocφ ipfwadm bychom museli pro ka╛d² poΦφtaΦ jednotliv∞ specifikovat p°φslu╣nß prßva. Pokud bychom se pozd∞ji rozhodli nap°φklad povolit ssh i na stanice, museli bychom p°idat tolik pravidel, jako je stanic.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ß╣╗. V²hody IP chainsHlavnφm p°φnosem IP chains je samoz°ejm∞ mo╛nost definovßnφ vlastnφch °et∞zc∙. Cel² systΘm je ale vylep╣en i o mnoho dal╣φch vlastnostφ:
Odkazy:
![]()
|