Tvorba firewallu I.

linux_server.jpg V pred­chád­za­jú­cej čas­ti sme si ho­vo­ri­li o tom, ako dá­to­vý pa­ket prec­hád­za prog­ra­mom net­fil­ter. Ve­no­va­li sme sa aj nás­tro­ju ip­tab­les. Vy­svet­li­li sme je­ho syn­tak­tic­ký zá­pis, sé­man­ti­ku (spô­sob vy­ko­ná­va­nia) a opí­sa­li jed­not­li­vé pa­ra­met­re. Zá­ro­veň sme si vy­svet­li­li, čo je štan­dar­dná po­li­ti­ka a ako sa nas­ta­vu­je. Aby sme si uve­do­mi­li, ako to všet­ko nav­zá­jom fun­gu­je, naj­lep­šie bu­de, ak si to uká­že­me na kon­krét­nom prík­la­de. A tým sa bu­de­me za­obe­rať te­raz.

Tvor­ba vlas­tné­ho fi­rewal­lu

Zo­pa­kuj­me si, ako sa nas­ta­vu­je štan­dar­dná po­li­ti­ka:

	ip­tab­les –P IN­PUT DROP
	ip­tab­les –P FORWARD DROP
	ip­tab­les –P OUT­PUT AC­CEPT

Po nas­ta­ve­ní štan­dar­dnej po­li­ti­ky všet­ky pric­hád­za­jú­ce (IN­PUT) a prec­hád­za­jú­ce (FORWARD) pa­ke­ty bu­dú za­ho­de­né, len pa­ke­ty vy­tvo­re­né lo­kál­nym sys­té­mom a sme­ru­jú­ce do sie­te (OUT­PUT) bu­dú po­vo­le­né. To však v po­dsta­te blo­ku­je akú­koľ­vek ko­mu­ni­ká­ciu po­čí­ta­ča ok­rem po­sie­la­nia pa­ke­tov do sie­te. Tak­to nas­ta­ve­ný po­čí­tač by v po­dsta­te nes­lú­žil ako fi­rewall, ale ako úpl­ne do­ko­na­lý „blo­ko­vač“. To nič, v Li­nuxe je bež­né, že bez­peč­nos­tná po­li­ti­ka je nas­ta­ve­ná v zmys­le hes­la „čo nie je po­vo­le­né, je za­ká­za­né“. A aj štan­dar­dná po­li­ti­ka náš­ho fi­rewal­lu bu­de rov­na­ká. Te­da tou­to po­li­ti­kou sme všet­ko (sko­ro všet­ko) za­ká­za­li a po­stup­ne za po­mo­ci prí­ka­zov nás­tro­ja ip­tab­les bu­de­me pri­dá­vať pra­vid­lá, kto­ré bu­dú kon­krét­ne služ­by fi­rewal­lu po­vo­ľo­vať.

De­fi­no­va­nie fi­rewal­lu
Eš­te pred za­dá­va­ním prí­ka­zov po­mo­cou nás­tro­ja ip­tab­les si mu­sí­me de­fi­no­vať pros­tre­die sie­te, v kto­rom bu­de fi­rewall fun­go­vať. Pred­stav­me si, že má­me ma­lú (škol­skú, fi­rem­nú, do­má­cu či inú) lo­kál­nu po­čí­ta­čo­vú sieť a po­mo­cou fi­rewal­lu ju chce­me pri­po­jiť do inter­ne­tu. Na­ša sieť bu­de mať tie­to pa­ra­met­re:

• vnú­tor­ná sieť má ad­re­su 192.168.10.0/24 (či­že 192.168.10.0/255.255.255.0)
• vnú­tor­né roz­hra­nie fi­rewal­lu je eth0 a má ad­re­su 192.168.10.1
• von­kaj­šie roz­hra­nie fi­rewal­lu je eth1 a má ad­re­su 10.12.14.2 (ide o prík­lad, v sku­toč­nos­ti je to za­se len pri­vát­ny roz­sah, te­da ne­ve­rej­ná ad­re­sa, ale veľ­mi čas­to sa stá­va, že aj po­sky­to­va­teľ pri­po­je­nia nám dá len pri­vát­nu ad­re­su)
• fi­rewall po­sky­tu­je pre von­kaj­šiu sieť TCP služ­by: smtp, dns, http a UDP služ­bu http
• fi­rewall po­sky­tu­je pre vnú­tor­nú sieť TCP služ­by: smtp, dns, http, ssh, http proxy a UDP služ­bu dns a mož­nosť pin­go­va­nia vnú­tor­né­ho roz­hra­nia
• fi­rewall umož­ní ap­li­ká­ciám vo vnú­tor­nej sie­ti ko­mu­ni­ko­vať s von­kaj­šou sie­ťou – do­vo­lí pa­ke­ty z vnú­tor­nej sie­te pre­po­sie­lať (sme­ro­vať – forwar­do­vať) do von­kaj­šej sie­te. Keď­že pa­ke­ty z vnú­tor­nej sie­te ma­jú pri­vát­ne zdro­jo­vé ad­re­sy, za­mas­ku­je zdro­jo­vé ad­re­sy pa­ke­tov tak, ako­by pa­ke­ty od­chád­za­li pria­mo z po­čí­ta­ča, na kto­rom je fi­rewall. Pri od­po­ve­di na ta­ké­ho za­mas­ko­va­né pa­ke­ty za­bez­pe­čí, aby sa dos­ta­li na správ­ne mies­to.

To­to sú naj­zák­lad­nej­šie po­žia­dav­ky na náš pr­vý fi­rewall. Sa­moz­rej­me, nič nám neb­rá­ni, aby sme ho roz­ši­ro­va­li „za jaz­dy“, te­da po­dľa kon­krét­nych po­trieb. Roz­ší­re­nie o mož­nosť prís­tu­pu pri­vi­le­go­va­ných po­uží­va­te­ľov zvon­ka si uká­že­me nes­kôr.

Štan­dar­dná po­li­ti­ka

Tak­že naj­prv za­čne­me vy­tvo­re­ním štan­dar­dnej po­li­ti­ky pre všet­ky štan­dar­dné re­ťa­ze:

ip­tab­les -P IN­PUT DROP
ip­tab­les -P FORWARD DROP
ip­tab­les -P OUT­PUT AC­CEPT

Aby sme ma­li preh­ľad o prá­ci fi­rewal­lu a moh­li v ňom spra­cú­vať pa­ke­ty aj v bu­dúc­nos­ti, je vhod­né, aby sme si vy­tvo­ri­li dve no­vé po­moc­né re­ťa­ze. Do nich bu­de­me roz­had­zo­vať pa­ke­ty po­dľa to­ho, či bu­dú na fi­rewall pric­hád­zať z vnú­tor­nej lo­kál­nej sie­te ale­bo z von­kaj­šej sie­te. Nech sa re­ťaz pre lo­kál­ne pa­ke­ty na­zý­va lo­cal a pre von­kaj­šie pa­ke­ty wan. Re­ťa­ze vy­tvo­rí­me prí­kaz­mi:

	ip­tab­les -N lo­cal
	ip­tab­les -N wan

Po vy­tvo­re­ní re­ťa­zí te­raz de­fi­nu­je­me pra­vid­lá pre pa­ke­ty v nich. Naj­prv vy­tvo­rí­me pra­vid­lá pre pa­ke­ty pric­hád­za­jú­ce z vnú­tor­nej sie­te na vnú­tor­né roz­hra­nie fi­rewal­lu, kto­rý fun­gu­je aj ako server.

Re­ťaz lo­cal

Za­čne­me re­ťa­zou lo­cal. Naj­prv po­vo­lí­me všet­ky pa­ke­ty, kto­ré pa­tria k už vy­tvo­re­ným spo­je­niam. Ta­ké pa­ke­ty ne­sú príz­nak ES­TAB­LIS­HED, a tak aj my po­dľa toh­to príz­na­ku za­is­tí­me, aby da­né pa­ke­ty bo­li pri­ja­te (ac­cept) :

ip­tab­les -A lo­cal -m sta­te --sta­te ES­TAB­LIS­HED -j AC­CEPT
V de­fi­ní­cii pa­ra­met­rov fi­rewal­lu sme de­fi­no­va­li služ­by, kto­ré chce­me, aby po­sky­to­val. To­mu zod­po­ve­da­jú kon­krét­ne pra­vid­lá. Pri­dá­me pra­vid­lo, kto­ré po­vo­lí pri­po­je­nie na po­rt TCP pro­to­ko­lu SMTP (od­osie­la­nie po­šty) na vnú­tor­nom roz­hra­ní s ad­re­sou 192.168.10.1:
ip­tab­les -A lo­cal -p tcp -d 192.168.10.1 --dport smtp -j AC­CEPT
Po­tom pri­dá­me pra­vid­lo, kto­ré po­vo­lí pri­po­je­nie na po­rt TCP služ­by DNS na vnú­tor­nom roz­hra­ní:
ip­tab­les -A lo­cal -p tcp -d 192.168.10.1 --dport dns -j AC­CEPT
Eš­te pri­dá­me pra­vid­lo, kto­ré po­vo­lí pa­ke­ty pric­hád­za­jú­ce na po­rt UDP služ­by DNS na vnú­tor­nom roz­hra­ní:
ip­tab­les -A lo­cal -p udp -d 192.168.10.1  --dport dns -j AC­CEPT
Po­dob­ne vy­tvo­rí­me pra­vid­lo, kto­ré po­vo­lí pri­po­je­nie na po­rt TCP služ­by SSH na vnú­tor­nom roz­hra­ní:
ip­tab­les -A lo­cal -p tcp -d 192.168.10.1  --dport ssh -j AC­CEPT
Keď­že chce­me zob­ra­zo­vať webo­vé strán­ky, pri­dá­me pra­vid­lo, kto­ré po­vo­lí pri­po­je­nie pro­to­ko­lom TCP na po­rte 80 (www) na vnú­tor­nom roz­hra­ní:
ip­tab­les -A lo­cal -p tcp -d 192.168.10.1  --dport 80 -j AC­CEPT
V de­fi­ní­cii fi­rewal­lu sme po­ža­do­va­li aj pri­po­je­nie cez proxy. My už vie­me, že proxy server squid na­čú­va na po­rte 3128, tak­že pri­dá­me pra­vid­lo, kto­ré po­vo­lí pri­po­je­nie na po­rt TCP 3128 na vnú­tor­nom roz­hra­ní:
ip­tab­les -A lo­cal -p tcp -d 192.168.10.1  --dport 3128 -j AC­CEPT
Ak chce­me za­is­tiť pin­go­va­nie server­a, mu­sí­me po­vo­liť pa­ke­ty ICMP. Pri­dá­me pra­vid­lo, kto­ré po­vo­lí tie­to pa­ke­ty sme­ru­jú­ce na vnú­tor­né roz­hra­nie:
ip­tab­les -A lo­cal -p icmp -d 192.168.10.1  -j AC­CEPT 

Re­ťaz wan

Te­raz sa bu­de­me za­obe­rať re­ťa­zou wan. Bu­de­me de­fi­no­vať pra­vid­lá ulo­že­né v tej­to re­ťa­zi, kto­ré bu­dú po­vo­ľo­vať jed­not­li­vé služ­by a pro­to­ko­ly po­dob­ne ako v re­ťa­zi lo­cal. Nas­le­du­je pra­vid­lo, kto­ré po­vo­lí všet­ky pa­ke­ty pat­ria­ce k už exis­tu­jú­cim spo­je­niam, ten­to­raz pre von­kaj­šie roz­hra­nie s ad­re­sou 10.12.14.2:

ip­tab­les -A wan -m sta­te --sta­te ES­TAB­LIS­HED -j AC­CEPT
Pri­dá­me pra­vid­lo, kto­ré po­vo­lí pri­po­je­nie na po­rt TCP pro­to­ko­lu SMTP na von­kaj­šom roz­hra­ní:
ip­tab­les -A wan -p tcp -d 10.12.14.2  --dport smtp -j AC­CEPT
Pri­dá­me dvo­ji­cu pra­vi­diel, kto­rá po­vo­lí pri­po­je­nie na TCP a UDP na po­rte služ­by DNS na von­kaj­šom roz­hra­ní:
ip­tab­les -A wan -p tcp -d 10.12.14.2 --dport dns -j AC­CEPT
ip­tab­les -A wan -p udp -d 10.12.14.2 --dport dns -j AC­CEPT
Nes­mie­me za­bud­núť na pra­vid­lo, kto­ré po­vo­lí pri­po­je­nie na po­rt TCP 80 (www) na von­kaj­šom roz­hra­ní:
ip­tab­les -A wan -p tcp -d 10.12.14.2  --dport 80 -j AC­CEPT
Keď­že nie je úpl­ne správ­ne, aby nám mo­hol ho­cik­to pin­go­vať na fi­rewall z von­kaj­šej sie­te, v prí­pa­de von­kaj­šie­ho roz­hra­nia ne­po­vo­lí­me pro­to­kol ICMP. Ale na pr­vot­né nas­ta­ve­nie, či to nao­zaj fun­gu­je, by to mo­hol niek­to po­tre­bo­vať, a tak tu uve­die­me, ako sa to ro­bí. Pri­dá­me pra­vid­lo, kto­ré po­vo­lí pa­ke­ty ICMP sme­ru­jú­ce na von­kaj­šie roz­hra­nie:
ip­tab­les -A wan -p icmp -d 10.12.14.2 -j AC­CEPT

Po­znám­ka:
Ak ne­po­vo­lí­me pin­go­va­nie (ICMP) zvon­ka, pre prí­pad­né­ho ne­nec­hav­ca ale­bo ne­ja­ký auto­mat sa náš li­nuxový server s fi­rewallom bu­de ja­viť ako mŕtvy, te­da ne­bu­de mu na pin­gy od­po­ve­dať.

Po napl­ne­ní jed­not­li­vých re­ťa­zí pra­vid­la­mi mu­sí­me roz­de­liť sie­ťo­vú pre­vád­zku do re­ťa­zí lo­cal a wan po­dľa to­ho, z kto­rých ad­ries po­chád­za­jú pa­ke­ty (z vnú­tor­ných ad­ries do re­ťa­ze lo­cal a z von­kaj­ších ad­ries do re­ťa­ze wan). Do­siah­ne­me to tak, že do re­ťa­ze IN­PUT vlo­ží­me pra­vid­lo, kto­ré bu­de kon­tro­lo­vať zdro­jo­vú (sour­ce, te­da –s) ad­re­su pa­ke­tu, a ak bu­de z lo­kál­nej sie­te (192.168.10.0) a roz­hra­nia eth0, pa­ke­ty pre­su­nie (jump, -j) do re­ťa­ze lo­cal. Ak pa­ke­ty ne­bu­dú po­chád­zať z lo­kál­nej sie­te (ne­bu­dú, pre­to ten vý­krič­ník = znak ne­gá­cie) a bu­dú z roz­hra­nia eth1 (von­kaj­šie), pre­su­nie ich do re­ťa­ze wan:

ip­tab­les -A IN­PUT -s 192.168.10.0/255.255.255.0 -i eth0 -j lo­cal
ip­tab­les -A IN­PUT -s !192.168.10.1/255.255.255.0 -i eth1 -j wan

Te­raz umož­ní­me pa­ke­tom z vnú­tor­nej sie­te (sour­ce, -s 192.168.10.0) dos­tať sa na von­kaj­šiu sieť (out­put, -o eth1). Ap­li­ká­cie vo vnú­tor­nej sie­ti bu­dú môcť ko­mu­ni­ko­vať s inter­ne­tom na ľu­bo­voľ­ných po­rtoch:

ip­tab­les -A FORWARD -s 192.168.10.0/255.255.255.0 -o eth1 -j AC­CEPT

Po­znám­ka:

Iným rie­še­ním by bo­lo po­uži­tie ap­li­kač­né­ho proxy server­a, kto­rý by umož­ňo­val ap­li­ká­ciám prís­tup na inter­net len cez svo­je pros­tried­ky a len k vy­bra­ným po­rtom.

Ak sme po­vo­li­li od­chod pa­ke­tov, mu­sí­me po­vo­liť od­po­ve­de na pa­ke­ty, kto­ré po­chád­za­jú z na­šej lo­kál­nej sie­te:

ip­tab­les -A FORWARD -s !192.168.10.0/255.255.255.0 -o eth0 -p tcp -m sta­te --sta­te ES­TAB­LIS­HED -j AC­CEPT

A na­ko­niec spl­ní­me po­sled­nú po­žia­dav­ku, a to prek­lad ad­ries z vnú­tor­nej sie­te sme­rom von. Pa­ke­ty bu­dú za­mas­ko­va­né, ako ke­by od­chád­za­li pria­mo z von­kaj­šie­ho sie­ťo­vé­ho roz­hra­nia s ad­re­sou 10.12.14.2:

ip­tab­les -t nat -A PO­STROU­TING -s 192.168.10.0/255.255.255.0 -o eth1 -j SNAT --to-sour­ce 10.12.14.2

My už ten­to prí­kaz po­zná­me, ním sme vo­ľa­ke­dy dáv­no nas­ta­vo­va­li mas­ko­va­nie sie­te. To­to je zá­klad náš­ho fi­rewal­lu. Je už funkč­ný, nap­riek to­mu si ho eš­te troc­hu zlep­ší­me. Ale o tom na­bu­dú­ce.

Ďal­šie čas­ti >>

Zdroj: Infoware 11/2008



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

Li­nux prak­tic­ky ako server úvod
Linux ako server je pomerne zložitá technológia. Jej výhodou je určitá modularita, keď sa nemusí nastaviť celý server naraz, ale postupne. čítať »
 
Syn­chro­ni­zá­cia ča­su v Li­nuxe
V predchádzajúcich dvoch častiach sme si ukázali, že Linux a všeobecne open source softvér sa nenachádza iba v serveroch a počítačových sieťach, ale aj v iných zariadeniach bežnej domácej potreby a v oblasti hobby. čítať »
 
Za­ria­de­nia za­lo­že­né na Li­nuxe
V predchádzajúcej časti sme si spomenuli definície nie - ktorých pojmov z oblasti nášho záujmu, teda Linuxu. Vysvetlili sme si, čo je to Open Source, Public Domain, proprietárny softvér a GNU GPL. Tentoraz ukážeme, ako sa tieto pojmy využívajú v praxi. čítať »
 
Po­jmy z ob­las­ti
Tentoraz na chvíľu trochu odbočíme od bezpečnosti Linuxu a jeho siete. V tejto neštandardnej časti seriálu sa mu budeme venovať len okrajovo. čítať »
 
Bez­peč­nosť bez­drô­to­vých sie­tí II.
V predchádzajúcej časti sme sa začali zaoberať bezpečnosťou bezdrôtových sietí. Poukázali sme na rôzne faktory zneužitia siete, podstatu rizika a vysvetlili sme základné prvky bezpečnosti. čítať »
 
Bez­peč­nosť bez­drô­to­vých sie­tí I.
V predchádzajúcich častiach sme sa venovali bezpečnosti linuxového servera. Riešili sme firewall, bezpečnosť prístupu na internet, zaoberali sme sa demilitarizovanou zónou a podobne. čítať »
 
Údr­žba lo­gov – kon­fi­gu­rá­cia log­ro­ta­te
V predchádzajúcej časti sme sa venovali rotácii logov. Vysvetlili sme princíp ukladania logov, spôsob, ako sa rotujú, a uviedli sme niečo o tom, čo a ako treba nastaviť čítať »
 
Údr­žba lo­gov – ro­tá­cia
V predošlej časti sme sa zaoberali spôsobom logovania informácií na iný alebo vzdialený počítač a ukázali sme, ako riešiť problém s logovaním uzavretých procesov pomocou chroot. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter