OpenBSD aktiivne/passiivne tulemüürilahendus

Allikas: Kuutõrvaja
Redaktsioon seisuga 23. juuni 2008, kell 16:32 kasutajalt Imre (arutelu | kaastöö) (Kasulikud lisamaterjalid)

Sissejuhatus

OpenBSD aktiivne/passiivne tulemüürilahendus koosneb kahest samasuguste omadustega tulemüüridena ettevalmistatud arvutist, kusjuures

  • igal ajahetkel toimub liiklus läbi ühe või teise, vastavalt nimetatakse ühte aktiivseks ja teist passiivseks
  • liiklust saab ümber lülitada, ümberlülitus toimub sekundite jooksul ning nt läbi tulemüüri käivad TCP ühendused säilivad

Alltoodud joonisel on kujutatud arvutitest kalake ja tuvike koosnev aktiive/passiivne tulemüürilahendus, lisaks on näidatud ära tulemüüriga kohtvõrgu poolt kokku puutuv töökohaarvuti ning avaliku võrgu poolt internetiühenduse teenusepakkuja ruuter. Kui nö sel kuul on aktiivne kalake ja passiivne tuvike, siis pöördudes töökohaarvutist avalikus võrgus asuva www.loomaaed.tartu.ee veebikoha poole käib liiklus läbi kalakese, tuvikesest ei käi liiklust üldse läbi.

               www.loomaaed.tartu.ee
                                       |
    
                                   avalik võrk
 
                                       |
                                      _|_
                                     |   |
                                     |___| isp ruuter
                                       |
                                       |
                  ---|-----------------|----------------------|---
                     |                                        |
                     |                                        |
                    _|_                                      _|_  
                   |   | kalake                      tuvike |   | 
                   |   |                                    |   |
                   |___|                                    |___| 
                     |                                        |   
                     |                                        |          
                     |                                        |
                  ---|-----------------|----------------------|---
                                       |
                                     --|--------------------------------|-----
                                                                        |
                                                                       _|_
                                    kohtvõrk                          |   |  töökoht
                                                                      |___|

Aktiivne/passiive lahendus

  • ei paku suuremat jõudlust
  • pakub paremat käideldavust selles mõttes, et ühe tulemüüri riknemisel lülitub automaatselt asemele teine
  • tõstab kaudselt turvalisust kuivõrd ühe tulemüüri uuendamine ei sega teenuse pakkumist ja vajadusel saab viimati töötanule tagasi lülituda st tulemüüri tarkvarauuendusi (ja muidu muudatusi) tehakse parema meelega

Aktiivse/passiivse lahenduse tööpõhimõte

Mainime meeldetuletuseks, et nö tavalisel juhul toimub ethernet'is st praktiliselt ühe subneti piires osaliste vahel andmevahetus kasutades mac aadresse. Kusjuures ühe arvuti (00:03:47:9b:76:56, 172.16.0.254) esmakordse pöördumisel teise (00:02:55:ee:1a:58, 172.16.0.250) poole teise arvuti IP aadressi järgi tehakse ARP (Address Resolution Protocol) protokolli abil esmalt kindlaks teise arvuti mac aadress. Näiteks kuulates esimesel arvutil ühes aknas võrku pealt ning öeldes samal ajal 'ping 172.16.0.250' paistab selline liiklus võrgus

 # tcpdump -nettti fxp2 arp or icmp                           
 tcpdump: listening on fxp2, link-type EN10MB
 Jun 23 11:45:41.144188 00:03:47:9b:76:56 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 172.16.0.250 tell 172.16.0.254
 Jun 23 11:45:41.144304 00:02:55:ee:1a:58 00:03:47:9b:76:56 0806 60: arp reply 172.16.0.250 is-at 00:02:55:ee:1a:58
 Jun 23 11:45:41.144320 00:03:47:9b:76:56 00:02:55:ee:1a:58 0800 98: 172.16.0.254 > 172.16.0.250: icmp: echo request
 Jun 23 11:45:41.144601 00:02:55:ee:1a:58 00:03:47:9b:76:56 0800 98: 172.16.0.250 > 172.16.0.254: icmp: echo reply
  • esimene pakett on arp braodcast, mis jõuab selle subneti kõigi arvutiteni
  • broadcastile vastab vaid see arvuti, mille ip aadress on 172.16.0.250, et ta mac aadress on 00:02:55:ee:1a:58
  • edasi kasutatakse suhtlemiseks mac aadresse ja andmevahetus toimub otse

Tänapäeval on lokaalsed subnetid reeglina lülitatud võrgud (ingl. k. switched networks) ja arp broadcast jõuab kõigi switchi portideni, kuid edasist konkreetsete mac aadresside vahel toimuvat liiklust vahendab lüliti (ingl. k. switch) ainult oma kahe vastava pordi vahel. See on võimalik kuna lüliti jälgib oma portidesse sisenevate etherneti frame'ide src mac aadresse ja seostab need mac aadressid konkreetsete portidega; ja kasutab sedasi õpitut järgnevalt sisenevaid pakette nende dst mac aadresside järgi sobivatesse portidesse suunates. Tavaliselt vastab ühele pordile üks mac aadress, kuid ühele pordile võib vastata ka mitu mac aadressi. Mitu mac aadressi on trunk pordil, samuti mode access pordil kui seal taga töötavad Xen virtuaalsed arvutid

 cisco-lüliti-promp# show mac-address-table | inc 401
 401    7010.0000.1088    DYNAMIC     Gi0/4
 401    7010.0000.1090    DYNAMIC     Gi0/4
 401    7010.0000.1092    DYNAMIC     Gi0/4
 401    7010.0000.1094    DYNAMIC     Gi0/4

Akviine/passiivne tulemüürilahendus põhineb CARP (Common Address Redundancy Protocol) protokolli kasutamisel, mis võimaldab ühe subneti piires mitmele arvutile lisada ühe virtuaalse mac aadressi ja ühe (või mitu) virtuaalse ip aadressi, kuid igal ajahetkel vastab kõnealustest arvutitest vaid üks neile virtuaalsetele aadressidele.

Jättes korraks kõrvale aktiivse/passiive tulemüüri küsimuse kirjeldame CARP protokolli tööd ühes subnetis paiknevate arvutitega. Skeemil on kujutatud kolme arvutit nende füüsilistele seadmetele vastavate mac aadresside ja nö tavaliste ip aadressidega. CARP protokolli kasutamisel on arvutitel kalake ja tuvike lisaks nende füüsiliste võrguseadmete mac aadressidele ja nö päris ip aadressidel veel juurde lisandunud virtuaalne mac aadress 00:00:5e:00:01:01 ning virtuaalne ip aadress 10.0.0.254

                    ___                       ___         
                   |   | kalake       tuvike |   | 
         10.0.0.11 |___| MASTER        SLAVE |___| 10.0.0.12
 00:e0:4c:02:89:18   |                         |   00:c0:26:27:4d:fe
        10.0.0.254   |                         |   10.0.0.254
 00:00:5e:00:01:01   |                         |   00:00:5e:00:01:01
                     |                         |   
                 ----|-------------------------|--------------|----
                                                              |  
                                                             _|_  10.0.0.15
                                                            |   | 00:0c:42:07:1a:45
                                                            |___| töökoht

CARP protokolli kasutamise abil tagatakse, et igal ajahetkel vastab ainult üks arvuti ühisele ip aadressile 10.0.0.254 esitatud ARP päringule mac aadressiga 00:00:5e:00:01:01 kusjuures edasise andmevahetuse src mac aadressina kasutab see arvuti oma füüsilise seadme mac aadressi. Näiteks öeldes töökoht arvutist

 # ping 10.0.0.254

ning jälgides kalakeses ja tuvikeses võrku näeb sellist liiklust

 kalake# tcpdump -nettti fxp0 arp or icmp  
 Apr 14 02:55:24.752338 00:0c:42:07:1a:45 ff:ff:ff:ff:ff:ff 0806 60: arp who-has 10.0.0.254 tell 10.0.0.15
 Apr 14 02:55:24.752369 00:00:5e:00:01:01 00:0c:42:07:1a:45 0806 60: arp reply 10.0.0.254 is-at 00:00:5e:00:01:01
 Apr 14 02:55:24.752447 00:0c:42:07:1a:45 00:00:5e:00:01:01 0800 98: 10.0.0.15 > 10.0.0.254: icmp: echo request (DF)
 Apr 14 02:55:24.752476 00:e0:4c:02:89:18 00:0c:42:07:1a:45 0800 98: 10.0.0.254 > 10.0.0.15: icmp: echo reply (DF)
 tuvike# tcpdump -nettti em0 arp or icmp  
 tcpdump: listening on em0, link-type EN10MB
 Jun 23 13:03:09.016254 00:0c:42:07:1a:45 ff:ff:ff:ff:ff:ff 0806 60: arp who-has 10.0.0.254 tell 10.0.0.15

Parasjagu päringutele vastavat arvutit nimetatakse MASTER'iks (ingl. k. peremees) ning teist SLAVE'iks (ingl. k. ori).

CARP protokoll tagab igale osalisele omistatud nn kaalu abil, et igal ajahetkel peetakse ainult ühte osalist MASTERiks. Alguses osalised saadavad välja samas ethernetis CARP sõnumeid ning kõik peale kõige kõrgema kaaluga (arvuliselt kõige väiksem) saatja jäävad vait ning võrku jääb saatma sõnumeid vaid MASTER

 # tcpdump -nettti fxp0 proto 112
 tcpdump: listening on fxp0, link-type EN10MB
 Apr 14 03:04:38.497365 00:00:5e:00:01:01 01:00:5e:00:00:12 0800 70: CARPv2-advertise 36: vhid=1 advbase=1 advskew=0 demote=0 (DF) [tos 0x10]
 Apr 14 03:04:39.507378 00:00:5e:00:01:01 01:00:5e:00:00:12 0800 70: CARPv2-advertise 36: vhid=1 advbase=1 advskew=0 demote=0 (DF) [tos 0x10]

Kui juhtub nii, et SLAVE enam ei näe neid sõnumeid, nt põhjusel, et MASTERil on toiteplokk katki läinud ja arvuti seisma jäänud või MASTERi kaal, mille määrab advbase ja advskew väärtus on langenud alla SLAVE'i enda kaalu, siis asub sõnumeid saatma SLAVE ja tulemusena on tekkinud uus MASTER

 # tcpdump -nettti fxp0 proto 112
 Jun 23 13:16:48.772571 00:00:5e:00:01:01 01:00:5e:00:00:12 0800 70: CARPv2-advertise 36: vhid=1 advbase=1 advskew=128 demote=0 (DF) [tos 0x10]
 Jun 23 13:16:50.282573 00:00:5e:00:01:01 01:00:5e:00:00:12 0800 70: CARPv2-advertise 36: vhid=1 advbase=1 advskew=128 demote=0 (DF) [tos 0x10]

Eelpool mainisime, et lüliti seostab sisemiselt oma portidega sealt sisenenud pakettide src mac aadresse. Kuna MASTER saadab regulaarselt (vaikimisi kord sekundis) carp pakette ühise src aadressiga 00:00:5e:00:01:01, siis on nii tagatud, et lüliti on seostanud sisemiselt MASTERile vastava füüsilise pordiga virtuaalse mac aadressi.

Tulemüüri puhul on osalevatel arvutitel mitu füüsilist võrgukaarti, samasse subnetti kuuluvate seadmete eristamiseks teistest kasutatakse CARP gruppe. Ühist virtuaalset mac ja ip aadressi omavad seadmed moodustavad CARP grupi, mida identifitseerib vhid parammeetri väärtus. Eeltoodud näidetes oli see väärtus 1.

Aktiivse/passiivse tulemüürilahenduse seadistamine

Seadistame vastavalt sellisele skeemile aktiivse/passiivse tulemüürilahendusena tööle hakkavad kaks arvutit, kummalgi on kaks võrgukaarti

                                   avalik võrk
 
                                       |
                                      _|_
                                     |   |
                                     |___| isp ruuter
                                       |   ip: 192.168.1.253, võrgu 10.0.0.0/24 gw: 192.168.1.254
                                       |
                  ---|-----------------|----------------------|---
                     |   tulemüüri avalik ip: 192.168.1.254   |
                     |      avalik mac: 00:00:5e:00:01:02     |
                     |       carp vhid: 2                     |
      192.168.1.11  _|_  rl0, carp2              rl0, carp2  _|_  192.168.1.12
 00:03:47:e0:1d:1c |   | kalake                      tuvike |   | 00:0e:0c:ba:4b:28
                   |   | MASTER                       SLAVE |   |
         10.0.0.11 |___| fxp0, carp1             em0, carp1 |___| 10.0.0.12
 00:e0:4c:02:89:18   |                                        |   00:c0:26:27:4d:fe
                     |                                        |          
                     |     tulemüüri sisemine ip 10.0.0.254   |
                     |      sisemine mac: 00:00:5e:00:01:01   |
                     |         carp vhid: 1
                  ---|-----------------|----------------------|------------------------
                                       |
                                     --|--------------------------------|-----
                                                                        |
                                                                       _|_  ip: 10.0.0.15, gw: 10.0.0.254
                                    kohtvõrk                          |   | töökoht
                                                                      |___|

CARP tugi on OpenBSD tuumas ja selle sisselülitamiseks tuleb seada sysctl parameeter, mingit deemonit ei ole

 net.inet.carp.allow=1

Arvutite võrk on seadistatud tavapäraselt, kuid lisaks on tekitatud spetsiifilised nn carp seadmed. Selleks tuleb öelda kalakeses

 # ifconfig carp1 create
 # ifconfig carp1 vhid 1 carpdev fxp0 pass lanpasswd 10.0.0.254 netmask 255.255.255.0
 # ifconfig carp2 create
 # ifconfig carp2 vhid 2 carpdev rl0 pass lanpasswd 192.168.1.254 netmask 255.255.255.0

ning tuvikeses

 # ifconfig carp1 create
 # ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd advskew 128 10.0.0.254 netmask 255.255.255.0
 # ifconfig carp2 create
 # ifconfig carp2 vhid 2 carpdev rl0 pass lanpasswd advskew 128 192.168.1.254 netmask 255.255.255.0
  • tuvike on SLAVE ja seetõttu on seal advskew väärtus suurem, kalake on MASTER ja advskew vaikeväärtus on 0
  • carp pakettide vahetamisel nõutakse osalistelt autentimist, parool ('lanpasswd' antud juhul) peab olema kõigil carp grupi osalistel seadetel samasugune
  • vhid peab olema kõigil carp grupi seadmeetel samasugune, lubatud väärtused on 1-255
  • carp seadmete nimed on kujul carpN, tingimata ei pea, aga halduse teeb lihtsamaks kui valitud number langeb kokku vhid väärtuse ja nt vastava füüsilise seadme vlan numbriga
  • ip aadress ja netmask peab oleva kõigil carp grupi seadmetel samasugune

Pange tähele, et tuvikeses on lisatud "advskew 128", mis tähendab, et normaalses olekus on kalake teenust pakkuv arvuti ehk MASTER.

Tulemusena on näha selline ifconfig väljund kalakeses

 carp1: flags=8803<UP,BROADCAST,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:00:5e:00:01:01
        carp: MASTER carpdev fxp0 vhid 1 advbase 1 advskew 0
        groups: carp
        inet6 fe80::200:5eff:fe00:101%carp1 prefixlen 64 scopeid 0x9
        inet 10.0.0.254 netmask 0xffffff00 broadcast 10.0.0.255

ning selline tuvikeses

 carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:00:5e:00:01:01
        carp: BACKUP carpdev em0 vhid 1 advbase 1 advskew 128
        groups: carp
        inet6 fe80::200:5eff:fe00:101%carp1 prefixlen 64 scopeid 0x7
        inet 10.0.0.254 netmask 0xffffff00 broadcast 10.0.0.255

ning sarnaselt seadmed carp2 mõlemas arvutis. Kusjuures virtuaalsed mac aadressid ei ole juhuslike väärtustega vaid sõltuvad vhid numbrist; 'groups: carp' käib ifconfig grupi, mitte carp grupi kohta.

Selleks, et peale arvuti alglaadimist sarnased seadmed tekkiksid peavad olema arvutites vastavalt sellised failid moodustatud

 kalake# cat /etc/hostname.carp1                                                                                                                                  
 inet 10.0.0.254 255.255.255.0 10.0.0.255 vhid 1 carpdev fxp0 pass lanpasswd
 kalake# cat /etc/hostname.carp2                                                                                                 
 inet 192.168.1.254 255.255.255.0 192.168.1.255 vhid 2 carpdev rl0 pass lanpasswd

ja

 tuvike# cat /etc/hostname.carp1
 inet 10.0.0.254 255.255.255.0 192.168.1.255 advskew 128 vhid 1 carpdev em0 pass lanpasswd
 tuvike# cat /etc/hostname.carp2
 inet 192.168.1.254 255.255.255.0 192.168.1.255 advskew 128 vhid 2 carpdev rl0 pass lanpasswd

Paketifiltri seadistamine iseärasused

CARP kasutamisel peab arvestama, et liiklus käib siiski CARP seadmetele vastavate füüsiliste seadmete kaudu, st füüsilisele seadmele rakendatud pass ja block reeglid töötavad ka CARP liikluse jaoks (nii CARP protokolli kui virtuaalsete aadressidega seotud liiklus). Sama kehtib ka tcpdump abil võrgu pealt kuulamisse.

Seda milline osaline parasjagu teenust pakub kontrollitakse CARP protokolli abil, arusaadavalt peab siis paketifilter lubaba läbi vastavat liiklust, näiteks

 pass quick on $ext_if proto carp keep state

Teenuste seadistamise iseärasused

Teenuste seadistamise puhul on mõnus see, et teenusega seotud ip aadress on arvutil kogu aeg olemas ja sellele saab teenuse ära bindida. Ning kui madalas kihis töötava CARP protokolli tegevuse tulemusena hakkavad paketid laekuma, siis algabki teenindamine.

Arvuti füüsilise seadme ip aadressi on haldustegevuste jaoks hea kasutada, aga tulemüüri teenuse seisukohalt ei ole see vajalik ja võib omistamata jätta. Siinjuures peab siiski arvestama, et jätkuks ligipääs üle võrgu halduseks ka SLAVE'ile kui ei kasutata nt serial konsooli.

Kui tulemüürides asub ka muidu teenuseid (nt nimeserver või spamd), siis peab tagama muude vahenditega, et vastavad andmed oleksid sisulises osas sobivas seisundis, CARP sellega ei tegele. Samuti ei anna CARP üle tulemüürist algavaid või sinna lõppevaid ühendusi.

Haldamine

Tulemüüri puhul on tavaliselt vajalik, et kui ühe carp seadme MASTER lülitub ümber, et siis lülituksid kõik ümber, seda tagab sysctl väärtuse seadistamine

 net.inet.carp.preempt=1

Kui selles arvutis, mis parasjagu tegeleb teenuse pakkumisega on tarvis teha hooldustööd, siis kasutajate ümbersuunamiseks teisele arvutile on mitu võimalust

  • öelda MASTERis kõigile carp seadmetele down
 # ifconfig carp1 down
 # ifconfig carp2 down

Ja hooldustöö lõppemisel jällegi up

 # ifconfig carp1 up
 # ifconfig carp2 up
  • muuta ifconfig carp grupi demote (ingl. k. madalamale ametikohale viima) väärtust, mida suurem see väärtus on, seda ebatõenäolisemalt on vastavasse gruppi kuuluvad seadmed MASTER'id, vaikimisi on väärtus null; NB kuivõrg toimetatakse ifconfig grupiga kuhu kuuluvad vaikimisi kõik carp seadmed, siis piisab ühest käsust
 # ifconfig -g carp carpdemote 50

Ning tagasi viimiseks

 # ifconfig -g carp -carpdemote 50
  • öelda MASTERi mõnele carp seadmele vastavale füüsilisele seadmele down
 # ifconfig rl0 down

ja hööldustöö lõpul

 # ifconfig rl0 up

Kui aktiivne tulemüür peatada (öelda halt) või kaabli eemaldamise teel võrgust lahti ühendada, siis SLAVE ei näe enam carp pakette ning asub MASTER'iks.

Paketifiltri olekutabeli sünkroniseerimine kahe füüsilise arvuti vahel

Lülitades CARP protokolli abil liiklust ühest tulemüürist teise võrguühendus on küll märkimisväärse katkestuseta pidevalt iseenesest olevas, aga läbi tulemüüri käinud tcp sessioonid lähevad katki. tcp ühenduste säilimiseks saab kasutada pfsync protokolli, mis hoiab passiivse tulemüüri paketifiltri olekutabelit sünkroonis aktiivse tulemüüri omaga ning sedasi jäävad peale MASTERi vahetust sessioonid alles.

pfsync tugi on OpenBSD tuumas, mingit deemonit ei ole vaja käivitada, kasutamiseks tuleb kaks arvutit omavahel soovitavalt ainult selleks mõeldud võrgukaarte pidi risti keerupaari kaabliga ühendada näiteks selliselt nagu skeemil kujutatud

                                   avalik võrk
                   
                                       |
                                       |
                  ---|-----------------|----------------------|---
                     |   tulemüüri avalik ip: 192.168.1.254   |
                     |                                        |
                     |                                        |
      192.168.1.11  _|_                                      _|_  192.168.1.12
                   |   | kalake     pfsync           tuvike |   | 
                   |   |------------------------------------|   |
         10.0.0.11 |___|  172.16.0.11           172.16.0.12 |___| 10.0.0.12
                     |                                        |   
                     |                                        |          
                     |     tulemüüri sisemine ip 10.0.0.254   |
                     |                                        |
                  ---|-----------------|----------------------|------------------------
                                       |
                                       |
                    
                                    kohtvõrk

ja seadistada pfsync seadmed öeldes kalakeses

 # ifconfig fxp1 172.16.0.11 netmask 255.255.255.0
 # ifconfig pfsync0 syncdev fxp1
 # ifconfig pfsync0 up

ning tuvikeses

 # ifconfig em1 172.16.0.12 netmask 255.255.255.0
 # ifconfig pfsync0 syncdev em1
 # ifconfig pfsync0 up

Selleks, et alglaadimisel pfsync seadistataks, etulb lisaks tavapärasel moel võrguseadmete seadistamisele moodustada kummaski arvutis fail /etc/hostname.pfsync0, kalakeses

 up syncdev fxp1

ja tuvikeses

 up syncdev em1

Lisaks on tarvis paketifiltriga lubada läbi mõlemas arvutis vastavat liiklust, näiteks reaga

 pass on em1 proto pfsync

Märkused

  • CARP seadme võib moodustada füüsilise seadme asemel ka vlan võrguseadmele
  • CARP seadmel võib olla mitu ip aadressi, neid omistatakse nii nagu tavalisele seadmele, nt käsuga
 # ifconfig carp1 alias 192.168.1.9 netmask 255.255.255.0
 # ifconfig carp1 alias 192.168.1.8 netmask 255.255.255.0
  • ifstated programmi abil saab korraldada vastavalt sellele, kas arvuti omandas MASTERi või BACKUPi oleku automaatselt programmide käivitamist


Kasulikud lisamaterjalid