Presmerovanie pomocou firewallu

linux_server.jpg V pred­chá­dza­jú­cich čas­tiach sme sa za­obe­ra­li su­per­dé­mo­nom xinetd. Vy­svet­li­li sme, na čo slú­ži, pred­vied­li sme, ako sa nas­ta­vu­je, a uká­za­li sme aj pár prík­la­dov. Jed­nou z mož­nos­tí bol aj re­di­rect, te­da tak­zva­né pres­me­ro­va­nie, kto­ré slú­ži­lo na pres­me­ro­va­nie po­žia­da­viek na iný po­čí­tač. To­to pres­me­ro­va­nie však ne­mu­sí fun­go­vať úpl­ne ko­rek­tne na veľ­mi zlo­ži­tom fi­rewal­le. Na žia­dosť či­ta­te­ľa opí­še­me kon­krét­ny prík­lad na pres­me­ro­va­nie po­mo­cou fi­rewal­lu.

Opis si­tuácie
Má­me ma­lú lo­kál­nu po­čí­ta­čo­vú sieť, kto­rá je pri­po­je­ná do inter­ne­tu a chrá­ne­ná fi­rewallom. Po­čí­tač, kto­rý pl­ní úlo­hu fi­rewal­lu, zá­ro­veň pl­ní úlo­hu webo­vé­ho server­a, mai­lo­vé­ho server­a a za­bez­pe­ču­je prís­tup do inter­ne­tu (proxy). Niek­de v na­šej lo­kál­nej po­čí­ta­čo­vej sie­ti sa na­chá­dza po­čí­tač, kto­ré­ho úlo­hou je ria­diť ma­lú ply­no­vú ko­tol­ňu. Ob­slu­ha ko­tol­ne, kto­rá je za­bez­pe­če­ná do­dá­va­teľ­ským spô­so­bom, pot­re­bu­je pra­vi­del­ne prís­tup k uve­de­né­mu po­čí­ta­ču. Nech te­da náš li­nuxový server – fi­rewall má ve­rej­nú IP ad­re­su 100.10.20.2 (je vy­mys­le­ná) a po­čí­tač, kto­rý ob­slu­hu­je ko­tol­ňu, má IP ad­re­su 192.168.1.199, te­da v roz­sa­hu na­šej lo­kál­nej sie­te.

Sta­no­ve­nie a pre­vod por­tov
Na tom­to po­čí­ta­či vznik­la po­žia­dav­ka po­vo­liť prís­tup na tie­to por­ty:
- 22 – čo je kla­sic­ký pro­to­kol ssh
- 80 – webo­vý server
- 3389 – Re­mo­te Des­ktop Pro­to­col – pro­prie­tár­ny pro­to­kol fir­my Mic­ro­soft, slú­ži na prís­tup k vzdia­le­nej plo­che
- 4899 – ten­to port vy­uží­va prog­ram Re­mo­te Ad­mi­nis­tra­tor (RAd­min) ako štan­dar­dnú ko­mu­ni­kač­nú brá­nu
- 40000 – port na ko­mu­ni­ká­ciu ma­lých prie­my­sel­ných za­ria­de­ní

To­to sú por­ty po­čí­ta­ča v ko­tol­ni, na kto­ré chce ob­slu­ha z inter­ne­tu pris­tu­po­vať. Len­že ako za­bez­pe­čiť, aby sa ne­pliet­li s čís­la­mi por­tov, kto­ré pou­ží­va náš server? Jed­no­du­cho. Ob­slu­he ur­čí­me iné čís­la, kto­rý­mi sa bu­de od­ka­zo­vať na prís­luš­ný port, a to tak­to:

- na port 22 sa bu­de od­ka­zo­vať por­tom 40022
- na port 80 sa bu­de od­ka­zo­vať por­tom 40080
- na port 3389 sa bu­de od­ka­zo­vať por­tom 40089
- na port 4899 sa bu­de od­ka­zo­vať por­tom 40099
- na port 40000 sa bu­de od­ka­zo­vať por­tom 40000, le­bo ten sa na na­šom li­nuxovom server­i ne­pou­ží­va

Úlo­hy pre fi­rewall
Aby sme za­bez­pe­či­li ce­lú ko­mu­ni­ká­ciu, mu­sí­me spl­niť tie­to úlo­hy:
- za­bez­pe­čiť ko­mu­ni­ká­ciu po­čí­ta­ča ob­slu­hy z inter­ne­tu s po­čí­ta­čom v ko­tol­ni v na­šej lo­kál­nej sie­ti cez fi­rewall
- za­bez­pe­čiť ko­mu­ni­ká­ciu po­čí­ta­ča v ko­tol­ni z lo­kál­nej sie­te do inter­ne­tu cez fi­rewall

Z poh­ľa­du fi­rewal­lu bu­de tre­ba spl­niť tie­to úlo­hy:

- Bu­de­me vy­ko­ná­vať NAT (Network Ad­dress Tran­sla­tion), te­da prek­lad adries. NAT sa pou­ží­va naj­čas­tej­šie vte­dy, ak má­te vnú­tor­nú sieť, v kto­rej pou­ží­va­te pri­vát­ne roz­sa­hy IP adries (nes­me­ro­va­teľ­né na inter­ne­te) a pot­re­bu­je­te za­bez­pe­čiť ko­mu­ni­ká­ciu me­dzi vnú­tor­nou a von­kaj­šou sie­ťou.
- Na za­bez­pe­če­nie spo­je­nia po­čí­ta­ča v inter­ne­te s po­čí­ta­čom vo vnú­tor­nej sie­ti (te­da vy­sie­la­nie po­žia­da­viek a pri­jí­ma­nie od­po­ve­dí) mu­sí­me na server­i s fi­rewallom a s NAT pub­li­ko­vať ve­rej­nú IP ad­re­su, kto­rú bu­de­me pou­ží­vať na prek­lad. Po­čí­tač v inter­ne­te bu­de ko­mu­ni­ko­vať po­mo­cou ve­rej­nej IP ad­re­sy, pri­čom ta­buľ­ka NAT za­bez­pe­čí prek­lad cie­ľo­vej IP ad­re­sy v lo­kál­nej sie­ti tak, aby sa pa­ket dos­tal do lo­kál­nej (vnú­tor­nej) sie­te. Ten­to prek­lad sa na­zý­va DNAT (Des­ti­na­tion NAT) a spra­vid­la sa vy­ko­ná­va v po­me­re 1:1. Po­mo­cou sle­do­va­nia ko­mu­ni­ká­cie sa za­bez­pe­čí spät­ný prek­lad zdro­jo­vých IP adries pa­ke­tov, kto­ré pred­sta­vu­jú od­po­ve­de, aby sa dos­ta­li nas­päť do inter­ne­tu. Pri DNAT sa po­čí­tač v inter­ne­te dom­nie­va, že ko­mu­ni­ku­je so server­om, na kto­rom sa NAT vy­ko­ná­va. O exis­ten­cii lo­kál­nej sie­te a prek­la­de adries ne­má tu­še­nia (pre­to je ne­vyh­nut­né, aby čís­la por­tov bo­li iné, nie rov­na­ké ako tie, kto­ré pou­ží­va server).
- Na za­bez­pe­če­nie ko­mu­ni­ká­cie po­čí­ta­ča v ko­tol­ni (te­da v lo­kál­nej sie­ti) s po­čí­ta­čom v inter­ne­te (vy­sie­la­nie po­žia­da­viek a pri­jí­ma­nie od­po­ve­dí) mu­sí­me na server­i s NAT zme­niť zdro­jo­vú IP ad­re­su kaž­dé­ho pa­ke­tu z vnú­tor­nej sie­te (kto­rý od­chá­dza do inter­ne­tu) na ve­rej­nú IP ad­re­su server­a. Ten­to prek­lad sa na­zý­va SNAT (Sour­ce NAT) a spra­vid­la sa ro­bí v po­me­re 1:N, ale my ho ten­to­raz uro­bí­me v po­me­re 1:1. Po­mo­cou sle­do­va­nia ko­mu­ni­ká­cie sa za­bez­pe­čí spät­ný prek­lad zdro­jo­vých IP adries pa­ke­tov, kto­ré pred­sta­vu­jú od­po­ve­de tak, aby sa dos­ta­li do vnú­tor­nej sie­te k žia­da­né­mu prí­jem­co­vi. Pri SNAT sa po­čí­tač v inter­ne­te dom­nie­va, že ko­mu­ni­ku­je so server­om, na kto­rom sa NAT vy­ko­ná­va. O exis­ten­cii lo­kál­nej sie­te a prek­la­de adries ne­má tu­še­nia.
- Vy­tvo­rí­me no­vú re­ťaz pra­vi­diel, kto­rú naz­ve­me ko­tol­na_ru­le.
- Re­ťaz napl­ní­me pra­vid­lom, v kto­rom po­vo­lí­me spo­je­nia TCP na por­toch 22, 80, 3389, 4899 a 40000.
- Na­ko­niec do re­ťa­ze FORWARD (v ta­buľ­ke FIL­TER) pri­dá­me pra­vid­lo, kde všet­ky po­žia­dav­ky na po­čí­tač v ko­tol­ni s IP ad­re­sou 192.168.1.199 bu­dú pres­me­ro­va­né do no­vej re­ťa­ze ko­tol­na_ru­le.

Vy­tvo­re­nie skrip­tu fi­rewal­lu
Te­raz poď­me vy­tvo­riť jed­not­li­vé prí­ka­zy pre fi­rewall net­fil­ter, sa­moz­rej­me, po­mo­cou nás­tro­ja ip­tab­les.
Za­čne­me prek­la­dom ve­rej­nej IP ad­re­sy 100.10.20.2 na lo­kál­nu IP ad­re­su 192.168.1.199, te­da tak­zva­ný DNAT. Prek­lad vy­ko­ná­me pre kaž­dý žia­da­ný port:

# zme­na rou­to­va­nia, pre­pi­sa­ne des­ti­na­tion na IP v lo­kal­nej sie­ti
$IP­TAB­LES -t nat -A PRE­ROU­TING -i eth0 -p tcp -d 100.10.20.2 --dport 40022 -j DNAT --to-des­ti­na­tion 192.168.1.199:22
$IP­TAB­LES -t nat -A PRE­ROU­TING -i eth0 -p tcp -d 100.10.20.2 --dport 40080 -j DNAT --to-des­ti­na­tion 192.168.1.199:80
$IP­TAB­LES -t nat -A PRE­ROU­TING -i eth0 -p tcp -d 100.10.20.2 --dport 40089 -j DNAT --to-des­ti­na­tion 192.168.1.199:3389
$IP­TAB­LES -t nat -A PRE­ROU­TING -i eth0 -p tcp -d 100.10.20.2 --dport 40099 -j DNAT --to-des­ti­na­tion 192.168.1.199:4899
$IP­TAB­LES -t nat -A PRE­ROU­TING -i eth0 -p tcp -d 100.10.20.2 --dport 40000 -j DNAT --to-des­ti­na­tion 192.168.1.199:40000

Nas­le­du­je prek­lad hla­vi­čiek pa­ke­tov z lo­kál­nej IP ad­re­sy 192.168.1.199 na ve­rej­nú IP ad­re­su 100.10.20.2, te­da tak­zva­ný SNAT:

# zme­na hla­vič­ky IP adries od­chá­dza­jú­cich pa­ke­tov
$IP­TAB­LES -t nat -A POS­TROU­TING -o eth1 -d 192.168.1.199 -j SNAT --to-sour­ce 100.10.20.2

Te­raz pris­tú­pi­me k vy­tvo­re­niu no­vej re­ťa­ze s náz­vom ko­tol­na_ru­le:

# vy­tvo­re­nie no­vej re­ťa­ze sme­ro­va­nia
$IP­TAB­LES -N ko­tol­na_ru­le

Vy­tvo­re­nú re­ťaz ko­tol­na_ru­le napl­ní­me pra­vid­lom, v kto­rom po­vo­lí­me spo­je­nie na žia­da­né por­ty 22, 80, 3389, 4899 a 40000:

# po­voľ TCP spo­je­nia na por­toch 22,80,3389,4899,40000
$IP­TAB­LES -A ko­tol­na_ru­le -p tcp -m tcp -m mul­ti­port --dports 22,80,3389,4899,40000  -j AC­CEPT

A na zá­ver pri­dá­me pra­vid­lo do re­ťa­ze FORWARD (v ta­buľ­ke FIL­TER), kto­rým bu­dú všet­ky po­žia­dav­ky na po­čí­tač v ko­tol­ni s IP ad­re­sou 192.168.1.199 pres­me­ro­va­né do no­vej re­ťa­ze ko­tol­na_ru­le:

# všet­ky no­vé spo­je­nia sme­ro­va­né na IP 192.168.1.199 -> no­vá re­ťaz ko­tol­na_ru­le
$IP­TAB­LES -A FORWARD -d 192.168.1.199 -m sta­te --sta­te NEW -j ko­tol­na_ru­le

Keď jed­not­li­vé sek­cie, tak ako sú uve­de­né, spo­jí­me a vlo­ží­me do skrip­tu náš­ho fi­rewal­lu, ma­lo by to bez prob­lé­mov fun­go­vať.

Na­bu­dú­ce sa bu­de­me ve­no­vať bez­peč­nos­ti.

Ďal­šie čas­ti >>

Zdroj: Infoware 5/2010



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