Tvorba firewallu II.

linux_server.jpg V pred­chád­za­jú­cej čas­ti sme vy­tvo­ri­li náš pr­vý fi­rewall na bá­ze nás­tro­ja net­fil­ter (ip­tab­les). Je sí­ce funkč­ný, ale nie úpl­ne do­ko­na­lý. Prob­lém mô­že nas­tať, ak ho bu­de­me chcieť mo­di­fi­ko­vať. To pre­to, le­bo pri net­filtri pla­tí, že sa pra­vid­lá spra­cú­va­jú v pres­ne de­fi­no­va­nom po­ra­dí, a ak no­vé pra­vid­lo za­ra­dí­me nev­hod­ne, mô­že sa stať, že sa ne­bu­de spra­cú­vať, prí­pad­ne sa ne­bu­dú je­ho vý­sled­ky ak­cep­to­vať. Pre­to te­raz náš fi­rewall zmo­di­fi­ku­je­me.

Skript
V li­nuxovom pros­tre­dí je všet­ko spra­vid­la ria­de­né skrip­ta­mi. My už vie­me, že skript je v po­dsta­te dáv­ko­vý sú­bor v texto­vej po­do­be, kto­rý ob­sa­hu­je prí­ka­zy pre kon­krét­ny inter­pre­ter. Inter­pre­te­rom mô­že byť nap­rík­lad prog­ra­mo­va­cí ja­zyk Perl, PHP, ale naj­čas­tej­šie to bý­va shell (prí­ka­zo­vý ria­dok). Asi by ne­bo­lo správ­ne prí­ka­zy ip­tab­les náš­ho fi­rewal­lu za­kaž­dým za­dá­vať z prí­ka­zo­vé­ho riad­ka shel­lu, naj­vhod­nej­šie je ich za­pí­sať do skrip­tu shel­lu, kto­rý mô­že­me po­užiť opa­ko­va­ne po­dľa po­tre­by. No a eš­te by bo­lo vhod­né, aby bol skript pa­ra­met­ri­zo­va­ný, te­da aby sa pa­ra­met­rom start spúš­ťal, pa­ra­met­rom stop za­sta­vo­val a pa­ra­met­rom res­tart reš­tar­to­val.

Uni­ver­zál­ny skript
Na vy­tvo­re­nie pa­ra­met­ri­zo­va­né­ho skrip­tu vy­uži­je­me uni­ver­zál­ny skript. Na vý­pi­se č. 1 je ob­sah ta­ké­ho skrip­tu:

#! /bin/bash
#
# Start/Stop skript
#
# chkcon­fig: 2345 08 92
# po­pis: tu bu­de po­pis prog­ra­mu
#
# (c) mior 

prog="sem vlo­zi­me me­no prog­ra­mu, napr. fi­rewall"
VER­SION="tu vlo­zi­me cis­lo ver­zie napr. 1.1.1"

start() {
  trap "" 2 3
  ec­ho "Star­tu­jem $prog ($VER­SION) "
  # sem vlo­zi­me vlas­tne pri­ka­zy
  trap - 2 3
}

stop() {
  trap "" 2 3
  ec­ho "Za­sta­vu­jem $prog: "
  # sem vlo­zi­me vlas­tne pri­ka­zy
  trap - 2 3
}	

res­tart() {
  stop
  start
}	

ca­se "$1" in
  start)
  	start
	;;
  stop)
  	stop
	;;
  res­tart)
  	res­tart
	;;
  *)
	ec­ho $"Po­uzi­tie: $0 {start|stop|res­tart}"
	exit 1
esac

exit $?

V pr­vej čas­ti skrip­tu sú riad­ky ozna­če­né zna­kom # (mriež­ka) – to je hla­vič­ka skrip­tu. Ob­sa­hu­je veľ­mi dô­le­ži­tý ria­dok #!/bin/bash, kto­rý zna­čí, že ide o spus­ti­teľ­ný skript shel­lu. Ďalej sa v hla­vič­ke nac­hád­za ná­zov a opis skrip­tu, prí­pad­ne me­no auto­ra, dá­tum vy­tvo­re­nia a po­dob­ne. Veľ­mi dô­le­ži­tý ria­dok chkcon­fig – len na zo­pa­ko­va­nie – ur­ču­je, v akých úrov­niach be­hu a v akom po­ra­dí bu­de skript spus­te­ný a ukon­če­ný.

Nas­le­du­je sek­cia de­fi­ní­cií. Tu mô­že­me de­fi­no­vať pre­men­né skrip­tu, s kto­rý­mi bu­de­me nes­kôr v ňom ope­ro­vať. Prík­la­dom mô­že byť pre­men­ná prog, v kto­rej de­fi­nu­je­me me­no prog­ra­mu, ale­bo pre­men­ná VER­SION, v kto­rej de­fi­nu­je­me ver­ziu prog­ra­mu. V na­šom prík­la­de to bu­de ná­zov fi­rewall a ver­zia 0.0.1. Nes­kôr do tej­to sek­cie vlo­ží­me aj iné pre­men­né prog­ra­mu. Nas­le­du­je de­fi­no­va­nie pa­ra­met­rov skrip­tu. Pr­vým pa­ra­met­rom je start, kto­ré­ho úlo­hou je prog­ram spus­tiť. Pa­ra­met­rom stop prog­ram ukon­ču­je­me. Všim­ni­me si, že tie­to pa­ra­met­re sú za­tiaľ práz­dne, te­da ok­rem prí­ka­zu ec­ho (čo je vý­pis na ob­ra­zov­ku) a prí­ka­zu trap (kto­rý ria­di čin­nosť vy­ko­ná­va­nia skrip­tu) neob­sa­hu­jú žiad­ny sku­toč­ný prí­kaz. Prá­ve do týc­hto sek­cií vlo­ží­me prí­ka­zy, kto­ré chce­me skrip­tom vy­ko­nať.

Pa­ra­me­ter res­tart je jed­no­duc­hý – naj­prv za­vo­lá pa­ra­me­ter stop a po ňom pa­ra­me­ter start. Po de­fi­no­va­ní pa­ra­met­rov nas­le­du­je vý­kon­ná sek­cia. Za­čí­na sa prí­ka­zom ca­se a kon­čí prí­ka­zom esac (v po­dsta­te ca­se od­za­du). Ce­lý skript je ukon­če­ný prí­ka­zom exit. Ten­to skript je nao­zaj uni­ver­zál­ny. Mô­že­me ho vy­užiť pre mno­ho rôz­nych ap­li­ká­cií (nie­len fi­rewall), sta­čí, ak za­cho­vá­me je­ho kos­tru a dopl­ní­me prí­ka­zy do jed­not­li­vých pa­ra­met­rov. Je­ho po­uži­tie je tiež veľ­mi jed­no­duc­hé – za­vo­lá­me ho me­nom a prís­luš­ným pa­ra­met­rom. Ak ne­za­dá­me na­de­fi­no­va­ný pa­ra­me­ter (start, stop, res­tart), vy­pí­še sa hlá­se­nie o po­uži­tí prog­ra­mu prí­ka­zom ec­ho.

Skript fi­rewal­lu
Aby sme ma­li preh­ľad o na­šom fi­rewal­le a moh­li ho jed­no­duc­hšie za­ra­diť do opí­sa­né­ho uni­ver­zál­ne­ho skrip­tu, roz­de­lí­me ho do jed­not­li­vých sek­cií.
Vy­tvo­rí­me tie­to sek­cie:
- de­fi­ní­cia sie­te – tu bu­de­me de­fi­no­vať pros­tre­die sie­te, ako je ad­re­sa, roz­hra­nie, služ­by a pro­to­ko­ly
- ini­cia­li­zá­cia fi­rewal­lu – tu nas­ta­ví­me štan­dar­dnú po­li­ti­ku, prí­pad­ne os­tat­né nas­ta­ve­nia - re­ťa­ze – tu vy­tvo­rí­me vlas­tné re­ťa­ze
- vý­stup­né pra­vid­lá – tu na­de­fi­nu­je­me pra­vid­lá pre vy­stu­pu­jú­ce pa­ke­ty
- vstup­né pra­vid­lá – tu na­de­fi­nu­je­me pra­vid­lá pre vstu­pu­jú­ce pa­ke­ty
- deak­ti­vá­cia fi­rewal­lu – tu de­fi­nu­je­me pra­vid­lá, kto­ré ko­rek­tne ukon­čia čin­nosť fi­rewal­lu. Tie­to sa bu­dú nac­hád­zať pri pa­ra­met­ri stop.

V kaž­dom fi­rewal­le net­re­ba vy­tvo­riť všet­ky sek­cie. Je dob­ré pre preh­ľad­nosť od­de­ľo­vať sek­cie v skrip­te aj op­tic­ky po­mo­cou po­znám­ky znak­mi #, prí­pad­ne stav kaž­dej sek­cie nec­hať vy­pí­sať na ob­ra­zov­ku po­mo­cou prí­ka­zu ec­ho. Bu­de­me mať tak in­for­má­ciu, kto­rá sek­cia fi­rewal­lu pre­beh­la a v akom sta­ve – ak sa ob­ja­ví chy­ba, jed­no­duc­hšie iden­ti­fi­ku­je­me sek­ciu, v kto­rej vznik­la.

Te­raz za­čne­me vy­tvá­rať jed­not­li­vé sek­cie.

De­fi­ní­cia sie­te
Do tej­to sek­cie včle­ní­me prí­ka­zy, de­fi­nu­jú­ce ad­re­sy a mas­ku sie­te a po­uží­va­né pro­to­ko­ly. V zmys­le prík­la­du z pred­chád­za­jú­cej čas­ti se­riá­lu bu­de sek­cia vy­ze­rať tak­to:

###########################################################################
#    De­fi­ni­cia sie­te                                                      
# ###########################################################################

  INTER­NAL_IN­TER­FA­CE=eth0
  INTER­NAL_IP=192.168.10.1
  INTER­NAL_NETWORK=192.168.10.0
  INTER­NAL_MASK=255.255.255.0
  INTER­NAL_BROAD­CAST=192.168.10.255

  EXTER­NAL_IN­TER­FA­CE=eth1
  EXTER­NAL_IP=10.12.14.2

  USE_MASQUERA­DE=yes

  # sluz­by po­sky­to­va­ne lo­kal­nou sie­tou
  INTER­NAL_SER­VI­CE_TCP=(ssh smtp http dns 3128);
  INTER­NAL_SER­VI­CE_UDP=(icmp dns);

  # sluz­by po­sky­to­va­ne von­kaj­sou sie­tou
  EXTER­NAL_SER­VI­CE_TCP=(http dns smtp);
  EXTER­NAL_SER­VI­CE_UDP=(http);

###########################################################################
#    Ko­niec De­fi­ni­cie sie­te                                               #
###########################################################################

Ce­lú sek­ciu sme od­de­li­li znak­mi mriež­ka a struč­ným opi­som. De­fi­ní­cie tý­ka­jú­ce sa lo­kál­nej sie­te sa za­čí­na­jú slo­vom INTER­NAL_, de­fi­ní­cie tý­ka­jú­ce sa von­kaj­šej sie­te sa za­čí­na­jú slo­vom EXTER­NAL_. De­fi­ní­cia USE_MASQUERA­DE=yes ur­ču­je, že bu­de­me po­uží­vať maš­ka­rá­du. Na­ko­niec sme na­de­fi­no­va­li služ­by pro­to­ko­lu TCP a UDP. Na­bu­dú­ce bu­de­me po­kra­čo­vať.

Ďal­šie čas­ti >>

Zdroj: Infoware 12/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