Erinevus lehekülje "OpenBSD relayd vahendaja kasutamine" redaktsioonide vahel
(→Edasisuunamine) |
(→Edasisuunamine) |
||
43. rida: | 43. rida: | ||
* 192.168.0.20,21,22:80 - realserverid | * 192.168.0.20,21,22:80 - realserverid | ||
* kui realserver ei vasta 300 sekundi jooksul test päringule /test.html nö OK koodiga, siis enam talle kliente külge ei ühendata | * kui realserver ei vasta 300 sekundi jooksul test päringule /test.html nö OK koodiga, siis enam talle kliente külge ei ühendata | ||
+ | |||
+ | ====Seadistamine==== | ||
Selliseks puhuks tuleb ette valmistada näiteks sellise sisuga seadistusfail /etc/relayd.conf | Selliseks puhuks tuleb ette valmistada näiteks sellise sisuga seadistusfail /etc/relayd.conf | ||
68. rida: | 70. rida: | ||
tag RELAYD | tag RELAYD | ||
forward to <webhosts> port 80 check http "/test.html" code 200 | forward to <webhosts> port 80 check http "/test.html" code 200 | ||
+ | sticky-address | ||
} | } | ||
+ | |||
+ | kus | ||
+ | |||
+ | * listen on ... - millisel seadmel nö kuulatakse (reaalselt soketit ei bindita, toimub rdr teisendus) | ||
+ | * tag - millist paketifiltri silti kasutatakse, sama sildi alusel saab paketti tulemüüri sisse ja seejärel välja lasta | ||
+ | * forward to - edasisuunamine | ||
+ | * sticky-address - klient ühendatakse sama realserveri külge järgnevatel pöördumistel (kuni paketifiltri tabelist kõnealuse klindi olekuid on, vaatamata millisedi olekuid, ESTABLISED, FIN_WAIT_2 jne | ||
Lisaks tuleb paketifiltri seadistusfaili /etc/pf.conf lisada relayd/* ankur ning vajalikud pass reeglid, näiteks sedasi | Lisaks tuleb paketifiltri seadistusfaili /etc/pf.conf lisada relayd/* ankur ning vajalikud pass reeglid, näiteks sedasi | ||
114. rida: | 124. rida: | ||
# relayctl host enable 192.168.0.20 | # relayctl host enable 192.168.0.20 | ||
+ | |||
+ | Seejuures on oluline | ||
====Märkused==== | ====Märkused==== |
Redaktsioon: 8. november 2009, kell 18:41
Sisukord
Sissejuhatus
Programm relayd võimaldab andmevahetust kahel viisil
- edasisuunamine (ingl. k. redirection) - hallates paketifiltri rdr-teisendusi saab näiteks korraldada tulemüüri välise seadme mingile pordile pöördumiste laialijagamise erinevate tulemüüri taga asuvate serverite vahel; edasisuunamine töötab ip ehk layer 3 kihis selles mõttes, et tegeldakse ip pakettidega
- vahendamine (ingl. k. relay) - relayd bindib ennast näiteks tulemüüri välise seadme mingile pordile ja vahendab ühendusi nn rakenduskihis (layer 7) tulemüüri taga asuvatele serverite vahel
Sõltuvalt vajadusest jääb kasutaja otsustada millist võimalust kasutada. Relayd võimaldab jälgida tulemüüri taga asuvate teenust pakkuvate serverite olekut ning on võimalik korraldada, et automaatselt ei saadeta kasutajaid sellistele serveritele, mis hoolduse tõttu või mõnel muul põhjusel ei paku parasjagu teenust.
ralayd tarkvara koosneb kolmest komponendist
- relayd - deemon
- /etc/relayd.conf - seadistusfail
- relayctl - juhtprogramm
Relayd on selles mõttes OpenBSD'le väga iseloomulik lahendus, et ta töötab tihedas koostöös paketifiltriga.
Relayd ilmus OpenBSD koosseisus esimest korda versioonis 4.3.
Edasisuunamine
Esitame näitena olukorra, kus tulemüüri taha on paigutatud kolm veebiserverit ning nad pakuvad samaaegselt teenust. Olgu teenuse iseloom selline, et ei ole tähtsust kasutajate sessioone jälgida.
avalik võrk | | __|__ fxp0, 172.16.0.1/30 | | |_____| | em0, 192.168.0.254/24 | --|-----------------|---------------|---------------|--------- | | | __|__ __|__ __|__ | | | | | | | | | | | | |_____| |_____| |_____| 192.168.0.20 192.168.0.21 192.168.0.22
- 172.16.0.1:80 - teenuse aadress
- 192.168.0.20,21,22:80 - realserverid
- kui realserver ei vasta 300 sekundi jooksul test päringule /test.html nö OK koodiga, siis enam talle kliente külge ei ühendata
Seadistamine
Selliseks puhuks tuleb ette valmistada näiteks sellise sisuga seadistusfail /etc/relayd.conf
ext_addr="172.16.0.1" webhost_1="192.168.0.20" webhost_2="192.168.0.20" webhost_3="192.168.0.20" # Global Options # interval 20 timeout 300 # Each table will be mapped to a pf table. # table <webhosts> { $webhost1, $webhost2, $webhost3 } # Services will be mapped to a rdr rule. redirect wwwteenus { listen on $ext_addr port 80 interface fxp0 # tag every packet that goes thru the rdr rule with RELAYD tag RELAYD forward to <webhosts> port 80 check http "/test.html" code 200 sticky-address }
kus
- listen on ... - millisel seadmel nö kuulatakse (reaalselt soketit ei bindita, toimub rdr teisendus)
- tag - millist paketifiltri silti kasutatakse, sama sildi alusel saab paketti tulemüüri sisse ja seejärel välja lasta
- forward to - edasisuunamine
- sticky-address - klient ühendatakse sama realserveri külge järgnevatel pöördumistel (kuni paketifiltri tabelist kõnealuse klindi olekuid on, vaatamata millisedi olekuid, ESTABLISED, FIN_WAIT_2 jne
Lisaks tuleb paketifiltri seadistusfaili /etc/pf.conf lisada relayd/* ankur ning vajalikud pass reeglid, näiteks sedasi
... rdr-anchor "relayd/*" .. pass in quick on $ext_if tagged RELAYD pass out quick on $int_if tagged RELAYD
Pass reegleid on mõnus kirjutada kuna relayd kirjutab pakette märkivaid RDR-teisendusi.
Relayd käivitamiseks sobib alustuseks kasutada võtit -d mis jätab programmi konsoolile käima
# relayd -d
Kui kõik õnnestus, siis ilmub ankru relayd alla alareeglistik wwwteenus
# pfctl -a 'relayd/*' -vvsA relayd/wwwteenus
mille sisu näeb sedasi
# pfctl -a 'relayd/wwwteenus' -sn rdr on fxp0 inet proto tcp from any to 172.16.0.1 port = 80 tag RELAYD -> <webhosts> port 80 round-robin
Ankru relayd/wwwteenus tabeli webhosts sisu näeb sedasi
# pfctl -a 'relayd/wwwteenus' -t webhosts -T show 192.168.0.20 192.168.0.21 192.168.0.22
Edasisuunamiste haldamine
Relayd toimimist saab jälgida programmiga relayctl, näiteks sedasi
# relayctl show summary
Realserver väljalülitamiseks sobib öelda
# relayctl host disable 192.168.0.20
ning sisselülitamiseks
# relayctl host enable 192.168.0.20
Seejuures on oluline
Märkused
Mõeldav on ka koormusjaotuse korraldamine nö ühelpool tulemüüri, sama ülaltoodud skeemi alusel, aga
- 192.168.0.254:80 - teenuse aadress
- 192.168.0.20,21,22:80 - realserverid
Sel juhul tuleb kohendada relayd.conf faili ning kasutada paketifiltris kohendada seadmetele ja nende aadressidele vastavate muutujate kasutamist ning lisaks nat reeglit
... rdr-anchor "relayd/*" nat on $int_if tagged RELAYD -> $int_if .. pass in quick on $int_if tagged RELAYD pass out quick on $int_if tagged RELAYD
Oluline on tähele panna, et edasisuunavas režiimis töötamise puhul teeb tööd iseenesest paketifilter, round-robin'iga rdr-teisendusi saab otsekoheselt niisamagi paketifiltri seadistusfailis kasutada. Relayd lisaväärtus seisneb selles, et ta võimaldab realservereid monitoorida ning vajadusel lülitada neid välja või tagasi sisse, vastavalt sellele kuidas check kontrollid õnnestuvad.
Direct Server Return
Direct Server Return (DSR) tehnika võimaldab korraldada teatud spetsiifilist assümmeetrilist ruutingut, protsessi on iseloomustatud palas http://undeadly.org/cgi?action=article&sid=20080617010016
DSR jaoks sobib kasutada relayd.conf failis parameetrit 'route to', nt selliselt
route to <webhosts> check tcp interface seadmenimi
mis tekitab reegli
pass ...
Vahendamine
Võimalik on kasutada üldotstarbelist tcp vahendamist, näiteks sisevõrgus töötava ssh serveri juures
ext_addr="172.16.0.1" sshhost="192.168.0.20" # Global Options # interval 20 timeout 3000 protocol "myssh" { tcp { nodelay, socket buffer 65536 } } relay "sshforward" { listen on $ext_addr port 2222 protocol "myssh" forward to $sshhost port 20 }
Antud juhul bindib relayd soketil 172.16.0.1:2222. SSH teenuse vahendamine on suhteliselt vähe huvipakkuv võrreldes nt HTTP protokolliga, kus saab korraldada Pound või Squid kiirendi moodi lahendust.
Märkused
- Kui relayd tarkvara kasutada edasisuunavas režiimis, siis netstat -an ei näita midagi asjakohast kuivõrd kasutatuses ei ole soketi külge bindimist, toimivad pf rdr-teisendused.
- Vajadusel saab ankru juures kasutada 'from .. to ..' konstruktsiooni, et määratleda, millistele pakettidele ankur töötab.
- OpenBSD 4.3 puhul on relayd sees korduvat programmi käivitamist takistav viga, katse lõpeb sarnase veatatega
fatal: flush_table: cannot flush table stats: Operation not supported by device check_child: lost child: pf update engine exited host check engine exiting terminating
Selle vastu aitab kui enne järjekordset käivitamist relayd'ga seotud akrute sisu käsitsi kustutada
# pfctl -a 'relayd/*' -sA relayd/wwwteenus
ning
# pfctl -a 'relayd/wwwteenus' -Fa