OpenBSD aktiivne/passiivne tulemüürilahendus
Sisukord
- 1 Sissejuhatus
- 2 Aktiivse/passiivse lahenduse tööpõhimõte
- 3 Aktiivse/passiivse tulemüürilahenduse seadistamine
- 4 Paketifiltri seadistamine iseärasused
- 5 Teenuste seadistamise iseärasused
- 6 Haldamine
- 7 Paketifiltri olekutabeli sünkroniseerimine kahe füüsilise arvuti vahel
- 8 Aktiivne/aktiivne tulemüürilahendus
- 9 Märkused
- 10 tabled
- 11 Probleemid
- 12 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) esmakordsel 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 broadcast, 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; pöörduja salvestab ip aadressi ja mac aadressi seose oma arp cache'is, mille sisu saab vaadata käsuga 'arp -na' ning sealt sissekandeid eemaldada käsuga 'arp -d ip.aa.dre.ss'
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. Näiteks on mitu mac aadressi 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 ühise virtuaalse mac aadressi ja ühe (või mitu) ühise 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 (carp kasutab vrrp protokolli numbrit 112 kuna IANA seltsimehed keeldusid carp'i registreerimast)
# 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 kuulamise kohta.
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
Paketifiltris saab kasutada CARP seadme nime ja füüsilise seadme nime kohtades, kus see lahendatakse aadressiks, kuid peab arvestama, milliseks aadressiks see lahendub. Lisaks antispoof reegel ei pruugi toimida ootuspäraselt.
Sihtpunkti ip aadressi mõttes saadetakse carp paketid multicast aadressile 224.0.0.18. Töötavas carp lahenduses jälgides paketifiltri olekuid on kirjas sellised olekud aktiivses tulemüüri õlas (paketid väljuvad arvutist)
all carp 192.168.1.11 -> 224.0.0.18 SINGLE:NO_TRAFFIC all carp 10.0.0.11 -> 224.0.0.18 SINGLE:NO_TRAFFIC
ja sellised mitteaktiivses (paketid sisenevad arvutisse)
all carp 224.0.0.18 <- 192.168.1.11 NO_TRAFFIC:SINGLE all carp 224.0.0.18 <- 10.0.0.11 NO_TRAFFIC:SINGLE
Sedasi paketifiltri järgi on ka hea teha kindlaks, milline füüsiline tulemüür parasjagu pakette välja saadab.
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
- seada MASTERis kõigi carp seadmete advskew suuremaks BACKUP'i omast (olgu see 100), tõenäoliselt on abiks kasutada skripti või for tsüklit
# ifconfig carp1 advskew 120 # ifconfig carp2 advskew 120
Sel juhul jääb endine MASTER osalema carp lülituses, aga BACKUP'i rollis; endine BACKUP lülitatakse aga MASTERiks.
- ö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, seejuures toimub automaatselt carp grupi seadmete demote counteri suurendamine, millega omakorda kaasneb advskew väärtuse 240 kasutamine
# 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.
Kusjuures, kui carp'i tehakse üle vlan seadmete, siis carp'i ümberlülituseks ei sobi öelda vlan seadmele destroy, tuleb öelda samuti down.
Paketifiltri olekutabeli sünkroniseerimine kahe füüsilise arvuti vahel
Lülitades CARP protokolli abil liiklust ühest tulemüürist teise on küll võrguühendus märkimisväärse katkestuseta pidevalt iseenesest olemas, 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 kaabliga ühendada (vanemate võrgukaartide puhul tuleb kasutada risti keerupaari, kaasaaegsed võrgukaardid töötavad ka otse kaabliga) 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
Selliselt moodustatud pfsync seadmete vahel toimub andmeavahetus üle multicasti
pfsync0: flags=41<UP,RUNNING> mtu 1460 pfsync: syncdev: em1 syncpeer: 224.0.0.240 maxupd: 128 groups: carp pfsync
Kui see pole soovitav, saab seadistada parameetri syncpeer abil andmevahetuse ka üle unicast, näidates teise poole ip aadressi mõlemas osalises
# ifconfig pfsync0 syncdev fxp1 syncpeer 172.16.0.12
Ja tulemusena tekkiv seade on selline
pfsync0: flags=41<UP,RUNNING> mtu 1460 pfsync: syncdev: fxp1 syncpeer: 172.16.0.12 maxupd: 128 groups: carp pfsync
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
pfsync seadmete ühendamiseks saab kasutada ka üle vastavate seadmete moodustatud ipsec kanalit.
Aktiivne/aktiivne tulemüürilahendus
Lisaks aktiivne/passiivne tulemüürilahndusele on võimalik seadistada käima tulemüürilahendus nii, et kõiki osalevaid tulemüüre läbi mingi osa liiklusest. Nii saab tulemüürilahendust skaleerida arvutite juurdelisamise teel vastuseks võrgusõlme läbivale suurenenud liiklusele.
A/A lahenduse juures on väga oluline kuidas praktiliselt saavutatakse kõigi osalevate tulemüüridele liikluse kättesaadavaks tegemine, selleks on kolm võimalust
- multicast - tulemüüri virtuaalne mac aadress on multicast aadress algusega 01:00:5e
- unicast - tulemüüri virtuaalne mac aadress on VRRP jaoks IANA poolt reserveeritud 00:00:5e algusega aadress
- ip-stealth - tulemüüri virtuaalne mac aadress on VRRP jaoks IANA poolt reserveeritud 00:00:5e algusega aadress, kusjuures, tulemüür ei kirjuta väljuvatele pakettidele src mac aadressiks kunagi seda aadressi
A/A lahenduse juures tuleb tähele panna, et aadressteisendus puhul on vaja proovimise teel valida kasutamiseks sobivad aadressid, et ühe tulemüüri kaudu läbi läinud pakettide vastuseid siseneksid läbi sama tulemüüri. Vastasel korral süsteem ei toimi.
multicast
Multicast on OpenBSD CARP IP-loadbalancing vaikerezhiim ja hostname.carp0 failis kasutatakse parameetri balancing juurest väärtust ip, nt selliselt
# cat /etc/hostname.carp0 inet 192.168.1.254 255.255.255.0 192.168.1.255 carpnodes 1:100,2:0 balancing ip pass lanpasswd1 carpdev bge0
Seejuures tuleb arvestada, et mõnedel võrguseadmetel võib olla raskusi multicast mac ja unicast ip aadressi komplekti kasutamisega.
unicast
Unicast puhul tuleb hostname.carp0 failis kasutada parameetri balancing juurest väärtust ip-unicast, nt selliselt
# cat /etc/hostname.carp0 inet 192.168.1.254 255.255.255.0 192.168.1.255 carpnodes 1:100,2:0 balancing ip pass lanpasswd1 carpdev bge0
See sobib kasutamiseks kui võrguseadmetena kasutatakse hub'i, nt VMware virtual switchid töötavad sellise seadistusega. Väidetavalt on võimalik nn manageeritav switch efektiivselt hubina seadistada, kuid kuidas seda praktiliselt teha ei ole teada.
ip-stealth
IP-põhise aktiivne/aktiivne tulemüürilahenduse seadistamiseks ip-stealth juhtumil peavad olema ühes arvutis failid
# cat /etc/hostname.carp0 inet 192.168.1.254 255.255.255.0 192.168.1.255 carpnodes 1:100,2:0 balancing ip-stealth pass lanpasswd1 carpdev bge0 # cat /etc/hostname.carp1 inet 10.0.0.254 255.255.255.0 10.0.0.255 carpnodes 3:100,4:0 balancing ip-stealth pass lanpasswd2 carpdev bge1
ja teises arvutis failid
# cat /etc/hostname.carp0 inet 192.168.1.254 255.255.255.0 192.168.1.255 carpnodes 1:0,2:100 balancing ip-stealth pass lanpassw1 carpdev bge0 # cat /etc/hostname.carp1 inet 10.0.0.254 255.255.255.0 10.0.0.255 carpnodes 3:0,4:100 balancing ip-stealth pass lanpassw2 carpdev bge1
Tulemusena moodustuvad sellised carp seadmed, esimesse arvutisse
carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 lladdr 00:00:5e:00:01:01 carp: carpdev bge0 advbase 1 balancing ip-stealth state BACKUP vhid 1 advskew 100 state MASTER vhid 2 advskew 0 groups: carp inet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0xa inet 192.168.1.254 netmask 0xfffffff0 broadcast 192.168.1.255 carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 lladdr 00:00:5e:00:01:03 carp: carpdev bge1 advbase 1 balancing ip-stealth state BACKUP vhid 3 advskew 100 state MASTER vhid 4 advskew 0 groups: carp inet6 fe80::200:5eff:fe00:103%carp1 prefixlen 64 scopeid 0x8 inet 10.0.0.254 netmask 0xffffffe0 broadcast 10.0.0.255
ning teise arvutisse
carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 lladdr 00:00:5e:00:01:01 carp: carpdev bge0 advbase 1 balancing ip-stealth state MASTER vhid 1 advskew 0 state BACKUP vhid 2 advskew 100 groups: carp inet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0xa inet 192.168.1.254 netmask 0xfffffff0 broadcast 192.168.1.255 carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 lladdr 00:00:5e:00:01:03 carp: carpdev bge1 advbase 1 balancing ip-stealth state MASTER vhid 3 advskew 0 state BACKUP vhid 4 advskew 100 groups: carp inet6 fe80::200:5eff:fe00:103%carp1 prefixlen 64 scopeid 0x8 inet 10.0.0.254 netmask 0xffffffe0 broadcast 10.0.0.255
IP-stealth juhtumile on iseloomulik, et kuigi tulemüüri abil internetti kättesaadavaks tehtud serveri arp tableis on kirjas seos tulemüüri virtuaalse mac aadressi ning tema virtuaalse ip vahel, siis samal ajal switch ei tea, millise switchi pordi taga asub virtuaalsele mac aadressile vastavad tulemüüride füüsilised võrguinterfaceid. Tulemusena saadab switch pakette switch kõigisse portidesse. Arvuti teab virt mac ja virt ip seose teada arp päringuga.
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 (seejuures tuleb jälgida, et mõlemad õlad oleksid aliaste osas identsed, muidu hakkavad mõlemad masteriteks vms ja võrk muutub ennustamatuks)
# 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; mõne programmi, nt bgpd ja ospfd seadistusfailist on võimalik programmi käitumist kontrollida vastavalt carp seadme olekule
- spamd võimaldab /var/sb/spamd andmebaase sünkroniseerida
- CARP skeemis võib osaleda ka rohkem kui kaks osalist ning töötada erinevatel riistvaralistel platvormidel, nt kolme puhul võiks tulemüüri puhul realiseerida aktiivne/passiivne/passiivne lahenduse
- CARP protokoll võimaldab tekitada ka aktiivne/aktiive lahenduse, mida kirjeldatakse carp manuaalis, kuid see eeldab lähedalolevate võrguseadmete (nt lülitete) tähelepanelikumat seadistamist või vähemalt kontrollimist kuidas nad sel puhul käituvad
- kui CARP seadmele vastaval füüsilisel seadmel on ip aadress ning carp seadmel samuti, siis tulemüürist endast selle füüsilise seadme kaudu väljuvate pakettide src aadressiks on füüsilise seadme aadress; kui füüsilisele seadmele ei ole ip aadressi seadistatud, siis tulemüürist endast vastava füüsilise seadme kaudu väljuvate pakettide src aadressiks on carp seadme aadress; kui carp seadmel on mitu aadressi (alias't), siis neist esimene; sel põhjusel on vahel kaval tulemüüri füüsilistele teenust pakkuvatele liidestele endile mitte aadresse omistada
- carp seadmetele on soovitav seadistada /32 netmaskiga ip aadress
tabled
Programmiga tabled saab muuta paketifiltri tabelite sisu. Tabelite sisu saab muuta ka pfctl programmiga, kuid tabled võimaldab töötada üle võrgu. Näiteks on tabled abil sobiv hoida mitme tulemüüri tabeleid sünkroonis või propageerida haldusarvutist muudatusi tulemüüridesse.
tabled saab paigaldada paketist öeldes
# pkg_add tabled
ning moodustada fifo öeldes
# mkfifo /var/run/tabled.sock
Selles arvutis kus tabelid asuvad st tulemüüris peab töötama programm tabled deemon, mille tööd kontrollib seadistusfail /etc/tabled.conf. Näiteks sellise sisuga
log-facility=daemon socket=/var/run/tabled.sock listen=192.168.10.254:50000 secret=salasona
on määratud muu hulgas, et tabled ootab korraldusi võrgusoketil 192.168.10.254:50000 ning klient peab kasutama salasõna 'salasona'.
Tabeli sisu muutmiseks tuleb pöörduda serveri soketisse programmi tablec abil. Näiteks öeldes
# tablec -s salasona -h 192.168.10.254:50000 -t tp -c add -f /tmp/addr.txt
lisatakse tableisse tp failis /tmp/addr.txt sisalduvad ip aadressid.
Kustutamiseks tuleb kasutada -c crl suvandit.
Tundub, et lisada ja eemaldada saab ip aadresse mitte võrke.
Tabeli tp sisu kopeerimiseks ühest arvutist teisse sobib öelda näiteks
# pfctl -Ts -t tp | awk {'print $1'} | tablec -s salasona -h 192.168.10.254:50000 -t tp -c add -f -
awk on vajalik pfctl väljundist ridade eest tühikute eemaldamiseks.
Probleemid
Kahe aktiivne/passiivne lülituses tulemüüri kasutamisel on pisut ebaselge kuidas on otstarbekas (või mis kaalutlustel tuleks valik teha) lülitada ühe tulemüüri hoolduseks liiklus teisele tulemüürile, üldiselt soovitatakse kasutada kas demote counterit või adskew väärtuse muutmist. Tundub, et kui mõlemat kombineeritult kasutada, siis on võimalik carp seadmed omajagu ära eksitada.
- Kaks arvutit vahetavad nö normaalsel juhtumil selliseid carp sõnumeid, tundub, et wireshark väljundis on väljal
Priority: 100 (Default priority for a backup VRRP router)
kirjas, et sõnumi on väljastanud advskew väärtusega 100 töötav arvuti.
- Kui mõlema osaleva arvuti advskew väärtused on üle 240 (mida saab saavutada nt selliselt, et öelda suurendada demote counteri väärtus ühel õlal 20'le ja seejärel teisel 25'le), siis demote counteri puhul vahetatakse selliseid carp sõnumeid, tundub, et wireshark väljundis on väljal
Auth Type: Unknown (15)
kirjas, et sõnumi on väljastanud demote counteri väärtusega 15 töötav arvuti.
- Eksitamine toimub aga selliselt, et kui mõlemal arvutil on demote counteri väärtused mingid positiivsed arvud, tuleb seadistada väiksema demote counteri arvuga arvuti mõnele carp seadmele suurem advskew väärtus kui teisel sealjuures peab see olema üle 240. Nt selliselt väljundilt on näha, et mõlemad osalised saadavad välja carp pakette ja ei suuda leppida kokku kumb on master: üks väljastab kuna tal on demote väiksem kui teisel; teine väljastab kuna tal on advskew väiksem kui teisel
# tcpdump -ni vlan11 tcpdump: listening on vlan11, link-type EN10MB 20:47:08.977266 CARPv2-advertise 36: vhid=11 advbase=1 advskew=240 demote=25 (DF) [tos 0x10] 20:47:10.927270 CARPv2-advertise 36: vhid=11 advbase=1 advskew=240 demote=25 (DF) [tos 0x10] 20:47:10.929330 CARPv2-advertise 36: vhid=11 advbase=1 advskew=245 demote=20 (DF) [tos 0x10] 20:47:10.929331 arp who-has 172.16.11.42 tell 172.16.11.42 20:47:12.877274 CARPv2-advertise 36: vhid=11 advbase=1 advskew=240 demote=25 (DF) [tos 0x10] 20:47:14.827279 CARPv2-advertise 36: vhid=11 advbase=1 advskew=240 demote=25 (DF) [tos 0x10] 20:47:14.829327 CARPv2-advertise 36: vhid=11 advbase=1 advskew=245 demote=20 (DF) [tos 0x10] 20:47:14.829328 arp who-has 172.16.11.42 tell 172.16.11.42
- balancing režiimide vahel valimisel muutub mõnel juhul virtuaalse võrguseadme virtuaalne mac aadress, sellisel juhul on ümbruse võimalik uut mac aadressi õpetada arping programmi abil, nt selliselt
# arping -i em1 -p -s 00:00:5e:00:01:0d -S 192.168.0.203 192.168.0.92
kus
- -i em1 - võrguseade mille subnetis õpetamine toimub
- -p - promisc režiim mis on vajalik selleks, kui õpetada füüsilisele seadmele mitte vastavat ip aadressi
- -s ja -S vastavalt uus mac ja ip aadressi seos, mida õpetatakse 192.168.0.92 arvutile