OpenBSD relayd vahendaja kasutamine

Allikas: Kuutõrvaja
Redaktsioon seisuga 29. mai 2008, kell 20:13 kasutajalt Imre (arutelu | kaastöö)

Sissejuhatus

Programm relayd võimaldab andmevahetust vahendada kahel viisil

  • edasisuunamine (ingl. k. redirections) - 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
  • vahendamine (ingl. k. relaying) relayd bindib ennast näiteks tulemüüri välise seadme mingile pordile ja vahendab ühendusi nn rakenduskihis 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.

Tarkvara koosneb deemonist relayd, seadistusfailist /etc/relayd.conf ning juhtprogrammist relayctl.

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

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 3000


 # 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

}

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 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

Relayd toimimist saab jälgida programmiga relayctl, näiteks sedasi

 # relayctl show summary 

Vahendamine