IPSec kasutamine operatsioonisüsteemiga OpenBSD
Sissejuhatus
OpenBSD sisaldab mitmesuguseid vahended IPSec kasutamiseks
- käsitsi võtmevahetusega IPSec - ipsecctl programmiga saab laadida seadistusfailist /etc/ipsec.conf käsitsi flow ja SA andmed, ilma automaatse võtmevahetuse deemonita
- kasutades IKE v. 1 võtmevahetuse deemonit isakmpd - programmiga seadistusi failist /etc/ipsec.conf saab käivitada automaatse võtmevahetuse
- kasutades IKE v. 2 võtmevahetuse deemonit iked - ja seadistusfaili /etc/iked.conf saab käivitada automaatse võtmevahetuse
OpenBSD operatsioonisüsteemis IPSec kasutamiseks peavad olema sisselülitatud sellised sysctl väärtused, vaikimisi on
net.inet.esp.enable Enable the ESP IPsec protocol net.inet.ah.enable Enable the AH IPsec protocol
Käsitsi võtmevahetusega IPSec
Selleks tuleb kirjeldada andmevahetuses osalevates arvutites flow ja SA andmed IPSec seadistusfailis /etc/ipsec.conf ja ipsecctl abil seadistusfaili sisu kehtestada.
Kuna näites kasutatakse autentimiseks hmac-sha2-256 algoritmi, siis tuleb genereerida autentimise 256 bit võti
# openssl rand 32 | hexdump -e '32/1 "%02x"' 0c49538ab80d85ee6154dcbbfae3d6f9415f5d3cff9f24e1f6902774f83a3fcb
ning kuna näiteks kasutatakse krüptimiseks aes algoritmi, siis tuleb genereerida autentimise 128 bit võti
# openssl rand 16 | hexdump -e '16/1 "%02x"' 2af2a98f2ea5769f229a85fa30b51705
Seejuures on oluline, et võtmed esinevad nn hex kujul.
Ühes arvutis
# cat /etc/ipsec.conf flow esp from 192.168.10.51 to 192.168.50.52 esp from 192.168.10.51 to 192.168.50.52 spi 0xdeadbeef:0xbeefbeaf \ authkey 0x54f79f479a32814347bb768d3e01b2b58e49ce674ec6e2d327b63408c56ef4e8:0x7f48ee352c626cdc2a731b9d90bd63e29db2a9c683044b70b2f4441521b622d6 \ enckey 0xb341aa065c3850edd6a61e150d6a5fd3:0xf7795f6bdd697a43a4d28dcf1b79062d
kus
- flow - kirjeldab kaks flow sissekannet, from ja to näitavad millisele andmevahetusele IPSec rakendada
- esp - kirjeldab SA'd, kusjuures näitab, et IPSec kasutab ESP protokolli
- from ja to - kirjeldab tunneli otspunktid
- spi - suvalised väärtused, mida kasutatakse SA identifitseerimiseks
- authkey - 256 bit pikkusega hex formaadis andmed (üks koht annab 4 bitti)
- encky - 128 bit pikkusega hex formaadis andmed
Kuna ühe kahesuunalise andmevahetuse jaoks on vajalik kaks SA'd, siis kompaktsemaks kirjeldamiseks esitatakse ühel real mõlema SA andmed komaga eraldatuna.
Teises arvutis
# cat /etc/ipsec.conf flow esp from 192.168.50.52 to 192.168.10.51 esp from 192.168.50.52 to 192.168.10.51 spi 0xbeefbeaf:0xdeadbeef \ authkey 0x7f48ee352c626cdc2a731b9d90bd63e29db2a9c683044b70b2f4441521b622d6:0x54f79f479a32814347bb768d3e01b2b58e49ce674ec6e2d327b63408c56ef4e8 \ enckey 0xf7795f6bdd697a43a4d28dcf1b79062d:0xb341aa065c3850edd6a61e150d6a5fd3
Seadistuse kehtestamiseks tuleb mõlemas arvutis öelda, kusjuures iskampd võtmevahetuse deemonit ei pea käivitama
# ipsecctl -f /etc/ipsec.conf
Tulemusena tekivad sarnased sissekanded flow ja sa andmebaasidesse
Ühes arvutis
# ipsecctl -sa FLOWS: flow esp in from 192.168.50.52 to 192.168.10.51 peer 192.168.50.52 type require flow esp out from 192.168.10.51 to 192.168.50.52 peer 192.168.50.52 type require SAD: esp tunnel from 192.168.50.52 to 192.168.10.51 spi 0xbeefbeaf auth hmac-sha2-256 enc aes esp tunnel from 192.168.10.51 to 192.168.50.52 spi 0xdeadbeef auth hmac-sha2-256 enc aes
teises arvutis
# ipsecctl -sa FLOWS: flow esp in from 192.168.10.51 to 192.168.50.52 peer 192.168.10.51 type require flow esp out from 192.168.50.52 to 192.168.10.51 peer 192.168.10.51 type require SAD: esp tunnel from 192.168.50.52 to 192.168.10.51 spi 0xbeefbeaf auth hmac-sha2-256 enc aes esp tunnel from 192.168.10.51 to 192.168.50.52 spi 0xdeadbeef auth hmac-sha2-256 enc aes
flow ja SA andmebaaside sisu kustutamiseks sobib öelda
# ipsecctl -F
Ainult SA kustutamiseks
# ipsectl -ss -k | ipsecctl -d -f -
Automaatne võtmevahetuse IKE v. 1 isakmpd programmiga
Tarkvara tuleb käivitada sellises järjekorras
- passiivses ehk serveri arvutis isakmpd, nt
# isakmpd -vdK
- aktiivses ehk kliendi arvutis isakmpd, nt
# isakmpd -vdK
- passiivses ehk serveri arvutis laadida reeglid, nt
# ipsecctl -f /etc/ipsec.conf
- aktiivses ehk kliendi arvutis laadida reeglid, nt
# ipsecctl -f /etc/ipsec.conf
Tulemusena on võrgus näha port 500/udp liiklust ning käsk
# ipsecctl -sa -k
väljastab flow ja sa andmed koos võtmetega, kusjuures saab jälgida kuidas võtmedeemon iga mõnemkümne minuti tagant võtmeid vahetab.
Tunneli lõpetamiseks tuleb seisata isakmpd programmid. Kasutades lisaks -v suvandit saab SA kohta rohkem infot.
host-to-host transport režiim kasutades AH protokolli
host-to-host transport režiim kasutades AH protokolli ei ole kuigi levinud IPSec kasutamise viis, mis on käesolevas tekstis ära toodud põhiliselt IPSec erinevate võimaluste illustreerimise eesmärgil.
Kliendi arvutis
# cat /etc/ipsec.conf ike active ah transport from 192.168.50.52 to 192.168.10.51 psk "parool"
kus
- ike - kasutatakse automaatset võtmehaldust
- active - tegu on aktiivse osapoolega, kes IPSec tunneli moodustamise algatab
- ah - kasutatakse AH kapseldusprotokolli
- transport - IPSec töötab transport režiimis
- from kohaliku_arvuti_ip_aadress to teise_arvuti_ip_aadress - host-to-host juhtumil piisab sellest, peer aadressina kasutatakse to väärtust
- psk - preshared key väärtus, mida osapooled kasutavad üksteise autentimiseks (nb! diffie-hellman algoritmi abil saavad osalised tekitada üle ebaturvalise võrgu ühise saladuse kui mitte kontrollida üksteise identiteeti)
Serveri arvutis
# cat /etc/ipsec.conf ike passive ah transport from 192.168.10.51 to 192.168.50.52 psk "parool"
Tulemusena on serveri arvutis
# ipsecctl -sa -k FLOWS: flow ah in from 192.168.50.52 to 192.168.10.51 peer 192.168.50.52 srcid 192.168.10.51/32 dstid 192.168.50.52/32 type use flow ah out from 192.168.10.51 to 192.168.50.52 peer 192.168.50.52 srcid 192.168.10.51/32 dstid 192.168.50.52/32 type require SAD: ah transport from 192.168.10.51 to 192.168.50.52 spi 0xd9ac1bb9 auth hmac-sha2-256 \ authkey 0x81591932449fa961e6f51d561e391c2ed424f030d0aa1b40b70a79f2ba8a72fd \ enckey 0x4db9ae73e160cca7da5767b6dcdf3b45 ah transport from 192.168.50.52 to 192.168.10.51 spi 0xdb43bef1 auth hmac-sha2-256 \ authkey 0xfcc9d3f80527f34b3846d4cd95e002442f5de4022b7ac7b0f0dd26947508df1c \ enckey 0xe95eb13a48290b394691e25339198471
ja kliendi arvutis
# ipsecctl -sa FLOWS: flow ah in from 192.168.10.51 to 192.168.50.52 peer 192.168.10.51 srcid 192.168.50.52/32 dstid 192.168.10.51/32 type use flow ah out from 192.168.50.52 to 192.168.10.51 peer 192.168.10.51 srcid 192.168.50.52/32 dstid 192.168.10.51/32 type require SAD: ah transport from 192.168.10.51 to 192.168.50.52 spi 0xd9ac1bb9 auth hmac-sha2-256 ah transport from 192.168.50.52 to 192.168.10.51 spi 0xdb43bef1 auth hmac-sha2-256
Üle tunneli pingides ja vahepeal võrku pealt kuulates paistab selline liiklus, kust on liikluse sisu näha ning lisaks, et on tegu AH protokolliga
# tcpdump -ni eth1 .. 17:44:09.671385 IP 192.168.50.52 > 192.168.10.51: AH(spi=0xdb43bef1,seq=0x19): ICMP echo request, id 24616, seq 0, length 64 17:44:09.671780 IP 192.168.10.51 > 192.168.50.52: AH(spi=0xd9ac1bb9,seq=0x17): ICMP echo reply, id 24616, seq 0, length 64
Alltoodud WireShark pildil on näha samuti AH päis IP ja ICMP vahel
host-to-host tunneling režiim kasutades AH protokolli
host-to-host tunneling režiim kasutades AH protokolli ei ole kuigi levinud IPSec kasutamise viis, mis on käesolevas tekstis ära toodud põhiliselt IPSec erinevate võimaluste illustreerimise eesmärgil.
Kliendi arvutis
# cat /etc/ipsec.conf ike active ah tunnel from 192.168.50.52 to 192.168.10.51 psk "parool"
kus
- ike - kasutatakse automaatset võtmehaldust
- active - tegu on aktiivse osapoolega, kes IPSec tunneli moodustamise algatab
- tunnel - IPSec töötab tunnel režiimis
- from kohaliku_arvuti_ip_aadress to teise_arvuti_ip_aadress - host-to-host juhtumil piisab sellest, peer aadressina kasutatakse to väärtust
- psk - preshared key väärtus, mida osapooled kasutavad
Serveri arvutis
# cat /etc/ipsec.conf ike passive ah tunnel from 192.168.10.51 to 192.168.50.52 psk "parool"
Tulemusena on serveri arvutis
# ipsecctl -sa FLOWS: flow ah in from 192.168.50.52 to 192.168.10.51 peer 192.168.50.52 srcid 192.168.10.51/32 dstid 192.168.50.52/32 type use flow ah out from 192.168.10.51 to 192.168.50.52 peer 192.168.50.52 srcid 192.168.10.51/32 dstid 192.168.50.52/32 type require SAD: ah tunnel from 192.168.50.52 to 192.168.10.51 spi 0x08d07c28 auth hmac-sha2-256 ah tunnel from 192.168.10.51 to 192.168.50.52 spi 0x1230b17d auth hmac-sha2-256
ja kliendi arvutis
# ipsecctl -sa FLOWS: flow ah in from 192.168.10.51 to 192.168.50.52 peer 192.168.10.51 srcid 192.168.50.52/32 dstid 192.168.10.51/32 type use flow ah out from 192.168.50.52 to 192.168.10.51 peer 192.168.10.51 srcid 192.168.50.52/32 dstid 192.168.10.51/32 type require SAD: ah tunnel from 192.168.50.52 to 192.168.10.51 spi 0x08d07c28 auth hmac-sha2-256 ah tunnel from 192.168.10.51 to 192.168.50.52 spi 0x1230b17d auth hmac-sha2-256
Üle tunneli pingides ja vahepeal võrku pealt kuulates paistab selline liiklus, kust on liikluse sisu näha ning lisaks, et on tegu AH protokolliga kusjuures, AH järel on kapseldatud IP päis
# tcpdump -ni eth1 .. 17:54:26.925830 IP 192.168.50.52 > 192.168.10.51: AH(spi=0x08d07c28,seq=0xf): IP 192.168.50.52 > 192.168.10.51: ICMP echo request, id 48135, seq 3, length 64 (ipip-proto-4) 17:54:26.926189 IP 192.168.10.51 > 192.168.50.52: AH(spi=0x1230b17d,seq=0xe): IP 192.168.10.51 > 192.168.50.52: ICMP echo reply, id 48135, seq 3, length 64 (ipip-proto-4)
Alltoodud WireShark pildil on näha samuti AH päis, kusjuures IP ja IP pärise vahel
host-to-network transport režiim
host-to-network tunneling režiim kasutades ESP protokolli
network-to-network tunneling režiim kasutades ESP protokolli
Tõenäoliselt üks levinumaid IPSec kasutusviise, mille abil tehakse kaks võrgusegmenti üksteisele üle turvalise kanali kättesaadavaks kasutades avalikku võrku.
192.168.10.0/24 võrgu ees olevas lüüsis, mille väline avalik ip aadress on 192.168.96.138
ike esp from 192.168.10.0/24 to 10.0.6.0/24 local 192.168.96.138 peer 10.0.99.90 \ main auth hmac-sha1 enc aes-256 group modp1024 \ quick auth hmac-sha1 enc aes-128 group modp1024 \ psk "from192to10" tag FROM_192_TO_10
10.0.6.0/24 võrgu ees olevas lüüsis, mille väline avalik ip aadress on 10.0.99.90
ike esp from 10.0.6.0/24 to 192.168.10.0/24 local 10.0.99.90 peer 192.168.96.138 \ main auth hmac-sha1 enc aes-256 group modp1024 \ quick auth hmac-sha1 enc aes-128 group modp1024 \ psk "fro192to10" tag FROM_10_TO_192
isakmpd seadistusfaili kasutamine
Seadistusfail man isakmpd.conf kontrollib isakmpd deemonit ja võimaldab muu hulgas määrata selliste parameetrite väärtusi
- TODO
Nt võtmevahetuse aegade seadistamiseks
[General] Default-phase-1-lifetime = 3600,60:86400 Default-phase-2-lifetime = 1200,60:86400
kusjuures, 'The Main Mode lifetime currently defaults to one hour (minimum 60 seconds, maximum 1 day). The Quick Mode lifetime defaults to 20 minutes (minimum 60 seconds, maximum 1 day).'
isakmpd policy kasutamine
# cat /etc/isakmpd/isakmpd.policy Authorizer: "POLICY" Licensees: "passphrase:parool" Conditions: app_domain == "IPsec policy" && esp_present == "yes" && esp_enc_alg != "null" -> "true";
isakmpd deemoni debugimine
# isakmpd -vd -D 9=99
kus
- 9 - class (vt man isakmpd)
- 99 - debug level (vt man isakmpd)
Automaatne võtmevahetus IKE v. 2 iked programmiga
Eelvahetatud salasõnaga
Moodustada mõlemas arvutis nt selline seadistusfail
# cat /etc/iked.conf ikev2 active esp proto icmp from 192.168.10.51 to 192.168.10.52 \ local 192.168.10.51 peer 192.168.10.52 \ psk "parool"
Käivitada mõlemas arvutis iked deemon
# iked -dv
Küsida tekkinud flows'id
# ipsecctl -sa FLOWS: flow esp in from 192.168.10.52 to 192.168.10.51 peer 192.168.10.52 srcid FQDN/obsd-49-1.auul dstid FQDN/obsd-49-2.auul type use flow esp out from 192.168.10.51 to 192.168.10.52 peer 192.168.10.52 srcid FQDN/obsd-49-1.auul dstid FQDN/obsd-49-2.auul type require SAD: esp tunnel from 192.168.10.51 to 192.168.10.52 spi 0x18279006 auth hmac-sha2-256 enc aes-256 esp tunnel from 192.168.10.52 to 192.168.10.51 spi 0x326a6bd8 auth hmac-sha2-256 enc aes-256
OpenBSD v. 4.9 arvutid omavahel RSA võtmetega
Esmalt tuleb ühes arvutis ikectl utiliidiga tekitada CA ja osaliste sertifikaadid, kopeerida teise arvuti sertifikaadid teisse arvutisse, kusjuures sertifikaatidel on
- CN - 192.168.10.51
- email - root@192.168.10.51
man ikectl lõpus kirjeldatud moel tegutsedes tekivad arvutisse sellised failid
# find /etc/iked -type f /etc/iked/ca/ca.crt /etc/iked/certs/192.168.10.51.crt /etc/iked/private/local.key /etc/iked/local.pub
kus
- ca.crt - CA juursert
- 192.168.10.51.crt - ike serveri sertifikaat
- local.key - sertifikaadi avalikule võtmele vastav privaatne võti
- local.pub - sertifikaadi avalik võti
Nt sobib kasutada sellise sisuga seadistusfaili
# cat /etc/iked.conf ikev2 "ipsec-yhendus" passive esp \ from 192.168.111.0/24 to 192.168.100.0/24 \ local 192.168.10.52 peer 192.168.10.51 \ srcid 192.168.10.52 dstid 192.168.10.51 \ rsa
Käivitada tuleb esamlt passive ja seejärel active osapool, tulemusena tekib
# ipsecctl -sa FLOWS: flow esp in from 192.168.100.0/24 to 192.168.111.0/24 peer 192.168.10.51 srcid IPV4/192.168.10.52 dstid IPV4/192.168.10.51 type use flow esp out from 192.168.111.0/24 to 192.168.100.0/24 peer 192.168.10.51 srcid IPV4/192.168.10.52 dstid IPV4/192.168.10.51 type require SAD: esp tunnel from 192.168.10.52 to 192.168.10.51 spi 0x2af0b543 auth hmac-sha2-256 enc aes-256 esp tunnel from 192.168.10.51 to 192.168.10.52 spi 0x2bf2362a auth hmac-sha2-256 enc aes-256
OpenBSD ja CheckPoint
(checkpoint v. r70.40) Kui kasutada ilma /etc/isakmpd/isakmpd.policy failita, siis kanal ei käivituja saab selliseid teateid
# isakmpd -dvK 121149.209732 Default isakmpd: phase 1 done: initiator id 192.168.42.243, responder id 192.168.99.90, src: 192.168.99.90 dst: 192.168.42.243 121149.214560 Default responder_recv_HASH_SA_NONCE: peer proposed invalid phase 2 IDs: initiator id 192.168.110.60, responder id 10.0.13.82 121149.214604 Default dropped message from 192.168.42.243 port 500 due to notification type INVALID_ID_INFORMATION 121151.214569 Default responder_recv_HASH_SA_NONCE: KEY_EXCH payload without a group desc. attribute 121151.214615 Default dropped message from 192.168.42.243 port 500 due to notification type NO_PROPOSAL_CHOSEN
Tuleb moodustada nt sellise sisuga /etc/isakmpd/isakmpd.conf
[General] Listen-on = 192.168.99.90 Default-phase-1-lifetime = 86400,60:86400 Default-phase-2-lifetime = 3600,60:86400
kus aegade esitamise kohta on man isakmpd.conf tekstis selline lause 'Some values are formatted like this: X,Y:Z, which is an offer/accept syntax, where X is a value we offer and Y:Z is a range of accepted values, inclusive.'
ning /etc/isakmpd/isakmpd.policy
Authorizer: "POLICY" Licensees: "passphrase:parool" Conditions: app_domain == "IPsec policy" && \ esp_present == "yes" && esp_enc_alg != "null" && \ remote_ike_address == "192.168.042.243" -> "true";
Käivitamisel öeldakse
# isakmpd -dv 121716.722239 Default attribute_unacceptable: ENCRYPTION_ALGORITHM: got AES_CBC, expected 3DES_CBC 121716.722295 Default message_negotiate_sa: no compatible proposal found 121716.722327 Default dropped message from 192.168.243 port 500 due to notification type NO_PROPOSAL_CHOSEN 121737.686474 Default isakmpd: phase 1 done: initiator id 192.168.42.243, responder id 192.168.99.90, src: 192.168.99.90 dst: 192.168.42.243 121737.705094 Default isakmpd: quick mode done: src: 192.168.99.90 dst: 192.168.42.243 121737.803038 Default message_parse_payloads: invalid next payload type <Unknown 90> in payload of type 8 121737.803086 Default dropped message from 192.168.42.243 port 500 due to notification type INVALID_PAYLOAD_TYPE 121737.903100 Default message_parse_payloads: invalid next payload type <Unknown 90> in payload of type 8 121737.903147 Default dropped message from 192.168.42.243 port 500 due to notification type INVALID_PAYLOAD_TYPE
kuid ühendus tuleb üles
Paketifiltri kasutamine tunneling režiimis ESP protokolliga
Paketifilter peab laskma läbi kuut sorti liiklust, enc seadmega seotud liiklus on iseloomulik OpenBSD IPSec lahendusele
- ISAKMPD deemoni andmevahetus - IPSec lüüsi välisel võrguseadmel port 500/udp teise lüüsiga ja mõlemas suunas
pass quick on $if_ext inet proto udp from 192.168.111.114 to 192.168.96.138 port 500 pass quick on $if_ext inet proto udp from 192.168.96.138 to 192.168.111.114 port 500
- IPSec paketid - IPSec lüüsi välisel võrguseadmel ESP protokoll teise lüüsiga ja mõlemas suunas
pass quick on $if_ext inet proto esp from 192.168.111.114 to 192.168.96.138 pass quick on $if_ext inet proto esp from 192.168.96.138 to 192.168.111.114
- enc seadmel ipencap pakette laskma väljast sisse mõlemas lüüsis (ka selles, mille tagant välja pöördutakse, st et vastuspaketid jõuaksid tagasi)
pass in log (all) quick on enc0 proto ipencap from 192.168.96.138 to 192.168.111.114 keep state (if-bound) label "JSenc0 from auul to test"
- liiklus enc0 seadmel, mõlemas suunas eeldusel, et kummagi lüüsi taga olevatest võrkudest on tarvis pöörduda üksteise poole
pass in log (all) quick on enc0 inet from 192.168.10.250 to 11.0.7.180 keep state (if-bound) label "JSenc0 from auul to test" pass out log (all) quick on enc0 inet from 11.0.7.180 to 192.168.10.250 keep state (if-bound) label "JSenc0 from test to auul"
- Lisaks tulemüüri siseseadme kaudu pakette sisse ja välja laskma, et IPSec kanali kaudu toimuvad paketid tulemüüri sisse ja sealt välja saaksid
pass out log (all) quick on vlan507 inet from 192.168.10.250 to 11.0.7.180 label "JVenc from auul to test" pass in log (all) quick on vlan507 inet from 11.0.7.180 to 192.168.10.250 label "JVenc from auul to test"
Lisaks saab enc0 seadmel toimuvat liiklust saab kontrollida kasutades ipsec.conf failis kirjeldatud silti (ingl. k. tag)
# liiklus enc0 seadmel pass in log (all) quick on enc0 proto ipencap all keep state (if-bound) tagged AUUL_RTM2 label "JSenc0 from auul to test" pass in log (all) quick on enc0 inet all keep state (if-bound) tagged AUUL_RTM2 label "JSenc0 from auul to test" pass out log (all) quick on vlan507 inet all tagged AUUL_RTM2 label "JVenc from auul to test"
Mitme IPSec peeriga kasutus
TODO
- isakmpd.policy faili saab kasutada mitut kolmerealist Authorizer-Licensees-Conditions komplekti
IPSec kasutamine üle GIF tunneli
Selleks, et IPSec lüüsi kliendiks oleva arvuti pakettide MTU oleks väärtusel 1500 sobib kasutada IPSec andmevahetust üle GIF tunneli
- IPSec lüüside vahel moodustatakse esmalt gif tunnel, kusjuures gif seadmete mtu seadistatakse väärtusele 5000
cpq # cat /etc/hostname.gif0 10.150.96.138 10.150.111.114 tunnel 192.168.96.138 192.168.111.114 mtu 5000
Vastav seade on selline
# ifconfig gif0 gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 5000 priority: 0 groups: gif physical address inet 192.168.96.138 --> 192.168.111.114 inet6 fe80::250:8bff:fecd:116d%gif0 -> prefixlen 64 scopeid 0x24 inet 10.150.96.138 --> 10.150.111.114 netmask 0xff000000
Teises lüüsis
rtm2 # cat /etc/hostname.gif0 10.150.111.114 10.150.96.138 tunnel 192.168.111.114 192.168.96.138 mtu 5000
- kohendatakse paketifiltrit ipencap osas, proto ipencap ja mõlemas lüüsis sobivate aadressidega
pass in quick on $if_ext inet proto ipencap from 192.168.111.114 to 192.168.96.138
- tunneli gif seadmetele seadistatakse IPSec ja mõlemas lüüsis vastavate aadressidega
ike esp from 192.168.10.0/24 to 10.0.133.0/24 local 10.150.96.138 peer 10.150.111.114 \ main auth hmac-sha1 enc aes-256 group modp1024 \ quick auth hmac-sha1 enc aes-128 group modp1024 \ psk "auulpia"
kus 192.168.10.0/24 ja 10.0.133.0/24 on lüüsida taga olevad võrgud
- kohendatakse paketifiltrit IPSec osas
# ipsec over gif # isakmpd liiklus pass quick on gif0 inet proto udp from 10.150.111.114 to 10.150.96.138 port 500 pass quick on gif0 inet proto udp from 10.150.96.138 to 10.150.111.114 port 500 # ipsec liiklus pass quick on gif0 inet proto esp from 10.150.96.138 to 10.150.111.114 pass quick on gif0 inet proto esp from 10.150.111.114 to 10.150.96.138 # ipsec liiklus sisse enc seadmel pass in quick on enc0 proto ipencap from 10.150.111.114 to 10.150.96.138 keep state (if-bound)
Tulemusena on küll IPSec lüüsi kasutavate arvutite pakettide mtu nö normaalne, kuid see-eest ipencap liiklusele vastavad ip paketid lüüside vahel on fragmenteeritud.
GIF tunneli kasutamine üle IPSec kanali L3 võrgu moodustamiseks
Eesmärk on tekitada ruuting (st L3 võrk) kahes füüsilises lokatsioonis paiknevate arvutite vahel, mis on IPSec lüüsi abil ühendatud avalikku võrku. Andmevahetus toimub selliselt
(10.150.96.138) gif0 ----- virtuaalne ethernet ----- gif0 (10.150.111.114) (192.168.10.0/24) em1 em0 ----- füüsiline võrk (IPsec) ----- em0 em1 (10.0.133.0/24) (192.168.96.138) (192.168.111.114)
kus
- IPSec lüüside avaliku võrgu poolsete võrguseadmete vahel on seadistatud IPsec kanal ipencap protokolli jaoks
- kahe lüüsi vahele on moodustatud gif tunnel
- gif0 seadmetel on mingid kolmandad ip aadressid, mille abil on ruuditud ühe tulemüüri taguse võrgu liiklus teise tulemüüri taha, ja vastupidi
GIF tunneli liiklus on kapseldatud IPSec kanalis. Sellise süsteemi seadistamist kirjeldab man gif, olulised sammud on järgmised
- Seadistada paketifilter lüüside väliste aadresside vahel IPSec pakette läbi laskma
TODO
- Seadistada ja käivitada lüüside väliste aadresside vahel ipencap protokolli jaoks IPSec sarnaselt
# cat /etc/ipsec.conf ike active esp proto ipencap from 192.168.96.138 to 192.168.111.114 \ main auth hmac-sha1 enc aes-256 group modp1024 \ quick auth hmac-sha1 enc aes-128 group modp1024 \ psk "auulpia"
- Seadistada ja käivitada GIF tunnel, kusjuures tunneli otstel st gif0 seadmetel ei ole ip aadresse (tundub, et kui on soov, siis võib olla)
vasak # cat /etc/hostname.gif0 10.150.96.138 10.150.111.114 tunnel 192.168.96.138 192.168.111.114
parem # cat /etc/hostname.gif0 10.150.111.114 10.150.96.138 tunnel 192.168.111.114 192.168.96.138
- Seadistada ruutingud
vasak # route add 10.0.133/24 10.150.111.114 parem # route add 192.168.10/24 10.150.96.138
- IPSec kasutamisel peaks net.inet.etherip.allow olema 0
# sysctl -w net.inet.etherip.allow=0
Tulemusena peab saama ühe lüüsi tagant kasutada teise lüüsi taga olevaid arvuteid, mis paistavad ühe ruuting hop kaugusel.
Reeglina on IPSec kasutamisel omavahel suhtlevate arvuti MTU väärtus oluliselt vähem kui nö tavaliselt ethernetis (1500). Antud lahenduse puhul saab seda leevendada seadistades gif seadmele piisavalt suure MTU, nt öeldes
# ifconfig gif0 mtu 1500
GIF tunneli kasutamine üle IPSec kanali L2 võrgu moodustamiseks
Eesmärk on moodustada üks virtuaalne L2 võrk kahes füüsilises lokatsioonis paiknevatest arvutitest, mis on IPSec lüüsi abil ühendatud avalikku võrku. Andmevahetus toimub selliselt
bridge0 (em1, gif0) ----- virtuaalne ethernet ----- bridge0 (gif0, em1) em0 ----- füüsiline võrk (IPsec) ----- em0
kus
- IPSec lüüside avaliku võrgu poolsete võrguseadmete vahel on seadistatud IPsec kanal etherip protokolli jaoks
- kahe lüüsi vahele on moodustatud gif tunnel
- gif seade on kummaski võrgus ühendatud kokku bridge'ks kohaliku võrgu poolse võrgukaardiga (em1)
GIF tunneli liiklus on kapseldatud IPSec kanalis. Sellise süsteemi seadistamist kirjeldab man gif, olulised sammud on järgmised
- Seadistada paketifilter lüüside väliste aadresside vahel IPSec pakette läbi laskma
TODO
- Seadistada ja käivitada lüüside väliste aadresside vahel etherip protokolli jaoks IPSec sarnaselt
# cat /etc/ipsec.conf ike active esp proto etherip from 192.168.96.138 to 192.168.111.114 \ main auth hmac-sha1 enc aes-256 group modp1024 \ quick auth hmac-sha1 enc aes-128 group modp1024 \ psk "auulpia"
- Seadistada ja käivitada GIF tunnel, kusjuures tunneli otstel st gif0 seadmetel ei ole ip aadresse (tundub, et kui on soov, siis võib olla)
# cat /etc/hostname.gif0 tunnel 192.168.96.138 192.168.111.114
- Seadistada ja käivitada sild, kusjuures em1 seadmel ei pruugi, aga võib olla ip aadress
# cat /etc/hostname.bridge0 add gif0 add em1 link2 up
Tekkinud seade on selline
# ifconfig bridge0 bridge0: flags=4041<UP,RUNNING,LINK2> groups: bridge priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp designated: id 00:00:00:00:00:00 priority 0 vlan15 flags=3<LEARNING,DISCOVER> port 37 ifpriority 0 ifcost 0 gif0 flags=3<LEARNING,DISCOVER> port 41 ifpriority 0 ifcost 0 Addresses (max cache: 100, timeout: 240): 00:50:56:9d:32:a6 gif0 1 flags=0<> 70:00:00:01:30:08 vlan15 1 flags=0<> 00:24:f7:f8:f2:0b gif0 1 flags=0<> 00:04:23:c8:60:c0 gif0 1 flags=0<>
- IPSec kasutamisel peaks net.inet.etherip.allow olema 0
# sysctl -w net.inet.etherip.allow=0
Tulemusena peab saama ühe lüüsi tagant kasutada teise lüüsi taga olevaid arvuteid justnagu oleks nad samas ethernetis.
Reeglina on IPSec kasutamisel omavahel suhtlevate arvuti MTU väärtus oluliselt vähem kui nö tavaliselt ethernetis (1500). Antud lahenduse puhul saab seda leevendada seadistades gif seadmele piisavalt suure MTU, nt öeldes
# ifconfig gif0 mtu 1500
Muudatuse võib teha süsteemi töötamise ajal ja ta kehtestub ja sellega kaasneb IPSec pakettide fragmenteerimine lüüside vahel
00:16:11.856550 00:50:bf:b0:7b:4d 00:12:ef:61:41:56 0800 150: esp 192.168.96.138 > 192.168.111.114 spi 0xfd53535b seq 746 len 116 00:16:11.861916 00:12:ef:61:41:56 00:00:5e:00:01:54 0800 1514: esp 192.168.111.114 > 192.168.96.138 spi 0x3a3a1d29 seq 4457 len 1480 (frag 29134:1480@0+) 00:16:11.861939 00:12:ef:61:41:56 00:00:5e:00:01:54 0800 142: 192.168.111.114 > 192.168.96.138: (frag 29134:108@1480)
kus
- nö traadi peal saadab 192.168.96.138 arvuti 150 baiti, millest ip paketi payload on 14 baidise frame'i ja 20 baidise ip headeri võrra väiksem, so 116 baiti
- 192.168.111.114 saadab ip payloadi suurusega 1588 baiti, mis on fragmenteeritakse: esimene tükk on traadil maksimaalne suurus 1514 baiti, millest 1500 on ip pakett, ilma ip päisteta 1480 baiti
- kolmas pakett on 1588 baidist üle jäänud osa
Kui IPSec kasutamine ära jätta, siis tuleb lülitada mõlemas lüüsis sisse net.inet.etherip.allow
# sysctl -w net.inet.etherip.allow=1
ning üle avaliku võrgu liiguvad sellised paketid
Fail:Ipsec-etherip-1.gif
kus on näha, et IP paketti on kapseldatud EtherIP protokolli abil etherneti liiklus.
IPSec kasutamine üle GRE tunneli
GRE tunneli moodustamiseks tuleb mõlemas lüüsis öelda
# sysctl -w net.inet.gre.allow=1
ning kasutada nt sellised seadistusfaile
cpq # cat /etc/hostname.gre0 10.150.96.138 10.150.111.114 tunnel 192.168.96.138 192.168.111.114 mtu 5000
Seade on selline
# ifconfig gre0 gre0: flags=9011<UP,POINTOPOINT,LINK0,MULTICAST> mtu 5000 priority: 0 groups: gre physical address inet 192.168.96.138 --> 192.168.111.114 inet6 fe80::250:8bff:fecd:116d%gre0 -> prefixlen 64 scopeid 0x24 inet 10.150.96.138 --> 10.150.111.114 netmask 0xff000000
Teises lüüsis
rtm2 # cat /etc/hostname.gre0 10.150.111.114 10.150.96.138 tunnel 192.168.111.114 192.168.96.138 mtu 5000 link0 up
Millegipärast gre tunneli mtu suurendamisega väärtusele 5000 ei kaasne lüüsi kasutavate arvutite mtu normaalse väärtuse (1500) saavutamist.
Kahe samu aadresse kasutava võrgu ühendamine
Kui samu privaatseid aadresse kasutatava võrgu ühendamisel tekib ilmne konflikt. Üks võimalus selle lahendamiseks on IPSec võrgusõlmedes teisendada aadresse nii, et kummagile võrgule paistavad teise poole aadressid mingite nö virtuaalsete aadressidena.
TODO
Selleks sobib ühes tulemüüris kasutada seadistusfailis /etc/ipsec.conf rida
ike esp from 172.16.10.0/24 (192.168.10.0/24) to 172.16.11.0/24 local 10.204.62.116 peer 10.246.205.154 \ main auth hmac-sha1 enc aes-256 group modp1024 lifetime 86400 \ quick auth hmac-sha1 enc aes-256 group modp1024 lifetime 3600 \ psk "parool"
ja teisel poolel
ike active from 172.16.11.0/24 (10.10.10.0/24) to 172.16.10.0/24 local 10.246.205.154 peer 10.204.62.116 \ main auth hmac-sha1 enc aes-256 group modp1024 lifetime 86400 \ quick auth hmac-sha1 enc aes-256 group modp1024 lifetime 3600 \ psk "parool"
Lisaks tuleb paketifiltri seadistusfailis pf.conf kasutavad vastavalt ridu
pass quick on enc0 from 192.168.10.0/24 to 172.16.11.0/24 binat-to 172.16.10.0/24 bitmask keep state (if-bound) tag IPSEC_NAT pass out quick on $if_kontorl tagged IPSEC_NAT
ja teisel poolel
pass quick on enc0 from 10.10.10.0/24 to 172.16.10.0/24 binat-to 172.16.11.0/24 bitmask keep state (if-bound) tag IPSEC_NAT pass out quick on $if_firma tagged IPSEC_NAT
kus
- bitmask - TODO
Nt teise poole binat-to reegel esitub tegelikult (st pfctl -vvvsr abil vaadates) kahe reeglina
@27 pass out quick on enc0 inet from 10.10.10.0/24 to 172.16.10.0/24 flags S/SA keep state (if-bound) \ tag IPSEC2 nat-to 172.16.11.0/24 bitmask static-port @28 pass in quick on enc0 inet from 172.16.10.0/24 to 172.16.11.0/24 flags S/SA keep state (if-bound) \ tag IPSEC2 rdr-to 10.10.10.0/24 bitmask
Ja vastavad state'id kaasnevad selliselt
enc0 icmp 10.10.10.111:8 (172.16.11.111:8) <- 172.16.10.10:5861 0:0 age 00:00:23, expires in 00:00:10, 24:24 pkts, 2016:2016 bytes, rule 28 id: 5386e8e2018eb929 creatorid: 436b388a all icmp 172.16.10.10:5861 -> 10.10.10.111:8 0:0 age 00:00:23, expires in 00:00:10, 24:24 pkts, 2016:2016 bytes, rule 29, pflow id: 5386e8e2018eb92a creatorid: 436b388a
- man ipsec.conf
- http://undeadly.org/cgi?action=article&sid=20090127205841
IPSec kasutamine rdomain keskkonnas
Kui üks OpenBSD tulemüür peab pidama ühendust mitme IPSec VPN partneriga, võib olla vajalik pöörata tähelepanu sellistele asjaoludele
- kui OpenBSD paketifilter on valesti seadistatud, siis võivad erinevad VPN partnerid üksteist näha
- kui erinevad VPN partnerid kasutavad omal poolel sama ip subnet aadresse, tuleb seda moel või teisel arvestada
- kui on vaja ühe VPN partneri ühendust puudutavaid seadistusi muuta, võib olla vajalik isakmpd deemonit restartida
- liiklust on mõnusam debugida
Osutub, et rdomain kasutamine võimaldab nimetatud probleeme lahendada või vähemalt leevendada olukorda
- erinevad partnerid ei näe üksteist kuna nad on võrgu mõttes üksteisest isoleeritud (nendega tegelevad isegi erinevad ruuting tabelid)
- iga partneri jaoks töötab oma isakmpd protsess
- iga partneri jaoks kasutatakse oma enc101, enc102 jne seadet
Olgu eesmärgiks käivitada selline asjakorraldus
töökohaarvuti-1 töökohaarvuti-2 ___ ___ | | | | |___| |___| | 192.168.10/24 | ------|------------------------|---------------|--- | em1 192.168.10.254 (rdomain 0) ___|___ | | rdomain 101 | | rdomain 102 enc101 | | enc102 vether101 - 10.194.62.116 | | vether102 - 10.194.62.116 |_______| | | em0 - 10.194.62.116 (rdomain 0) ... internet ..... | | partner üks | em0 - 10.80.125.14 partner kaks | em0 - 10.90.225.24 ___|___ ___|___ | | | | |_______| |_______| | | | | | -|----- 10.0.17/24 | -|-------- 10.0.7/24 | | ------|----- 10.0.9/24 ---|------ 10.0.9/24
kus
- rdomainid on võrguseadistused üksteisest sõltumatud, sellepärast võib põhimõtteliselt kasutada neis nt suvalist ip konfi ja nad ei sega üksteist
- vether seadmetel võiks kasutada ka mingeid muid ip aadresse, aga välise ip aadressi kasutamisel saab kasutada kõikjal sama /etc/isakmpd/isakmpd.conf seadistusfaili
- partnerite sisevõrkudes on kasutusel üks sama aadressiga võrk
Seoses partner ühega on ettevalmistatud sellised seadistusfailid
Võrguliides enc101
# cat /etc/hostname.enc101 up rdomain 101 description partner_1
Virtuaalne võrguliides vether101
# cat /etc/hostname.vether101 inet 10.204.62.116 255.255.255.248 NONE description partner_1 rdomain 101 !route -T 101 add default 10.204.62.118
ipsecctl seadistusfail
# cat /etc/ipsec-partner_1.conf ike esp from 192.168.10.0/24 to { 10.0.7.0/24, 10.0.9.0/24 } local 10.204.62.116 peer 10.80.125.14 \ main auth hmac-sha1 enc aes-256 group modp1024 lifetime 86400 \ quick auth hmac-sha1 enc aes-256 group modp1024 lifetime 3600 \ psk "parool_1"
Vajalikud paketfiltri reeglid
# cat /etc/pf/pf.include-ipsec-partner_1 # tunneli enda liiklus pass out log quick inet from 10.204.62.116 to 10.80.125.14 rtable 0 nat-to 10.204.62.116 pass in log quick inet proto udp from 10.80.125.14 to 10.204.62.116 port { 500, 4500 } rtable 101 rdr-to 10.204.62.116 # liiklus tunneli sees pass in log quick on vlan10 inet proto { tcp, udp } from 192.168.10/24 to { 10.0.17/24 } rtable 101 pass in log quick on vlan10 inet proto { tcp, udp } from 192.168.10/24 to 10.101.9/24 rtable 101 rdr-to 10.0.9/24 bitmask
kus
- ruuting domeeni kontekstis isakmpd deemoni poolt tekitatud paketid, mis lähevad 10.80.125.14 aadressile ja hakkavad ipsec kanali omadusi kokku leppima saadetakse paketifiltri poolt ruuting domeeni null, st sinna kus käib põhiline nö elu; tundub, et nat-to on vajalik kuigi rdomain 0 peale liikludes on pakettidel see sama src aadressi olemas
- partnerilt saabuvad paketid saadetakse paketifiltri poolt edasi ruuting domeeni 101 (nii isakmpd kui ipsec abil krüptitud liikluse paketid)
- töökohaarvutitest üle ipsec teisele pooleli minevad paketid saadetakse rdomain 101 peale kus nn encap ruuting neid tabab ja saadab üle enc101 seadme krüptimisele ja sealt edasi
- kuna 10.0.9/24 võrk on mõlemal partneril kasutusel, siis tuleb enne enc seadmele saatmist pakettidel aadresse teisendada, bitmask parameeter teisendab 10.101.9 võrgu aadressid vastavateks 10.0.9 võrgu aadressideks, nt 10.101.9.22 -> 10.0.9.22, 10.101.9.23 -> 10.0.9.23 jne; töökohaarvutist pöördudes tuleb seda teisendust arvestada, nt soovides pöörduda tegelikult aadressil 10.0.9.22 oleva seadme poole tuleb pöördumisel kasutada aadressi 10.101.9.22
Seoses partner kahega on ettevalmistatud sellised seadistusfailid
Võrguliides enc102
# cat /etc/hostname.enc102 up rdomain 102 description partner_2
Virtuaalne võrguliides vether102
# cat /etc/hostname.vether102 inet 10.204.62.116 255.255.255.248 NONE description partner_2 rdomain 102 !route -T 102 add default 10.204.62.118
ipsecctl seadistusfail
# cat /etc/ipsec-partner_2.conf ike esp from 192.168.10.0/24 to { 10.0.27.0/24, 10.0.29.0/24 } local 10.204.62.116 peer 10.90.225.24 \ main auth hmac-sha1 enc aes-256 group modp1024 lifetime 86400 \ quick auth hmac-sha1 enc aes-256 group modp1024 lifetime 3600 \ psk "parool_2"
vajalikud paketfiltri reeglid
# cat /etc/pf/pf.include-ipsec-partner_2 # tunneli enda liiklus pass out log quick inet from 10.204.62.116 to 10.90.225.24 rtable 0 nat-to 10.204.62.116 pass in log quick inet proto udp from 10.90.225.24 to 10.204.62.116 port { 500, 4500 } rtable 102 rdr-to 10.204.62.116 # liiklus tunneli sees pass in log quick on vlan10 inet proto { tcp, udp } from 192.168.10.10 to { 10.0.7.0/24 } rtable 102 pass in log quick on vlan10 inet proto { tcp, udp } from 192.168.10/24 to 10.102.9/24 rtable 102 rdr-to 10.0.9/24 bitmask
Kõigile partneritele on /etc/isakmpd/isakmpd.conf seadistusfail samasuguse sisuga
# cat /etc/isakmpd/isakmpd.conf [General] Listen-on=10.204.62.116 Default-phase-1-lifetime = 86400,60:86400 Default-phase-2-lifetime = 3600,60:86400
Kuna isakmpd deemonit käivitatakse mitu eksemplari, siis tuleb iga juures näidata oma fifo, pid ja seadistusfail, nt
Partner ühega suhtlemiseks tuleb käivitada
# mkdir /var/run/isakmpd # route -T 101 exec isakmpd -4 -dvK \ -f /var/run/isakmpd/isakmpd-partner_1.fifo \ -i /var/run/isakmpd/isakmpd-partner_1.pid \ -c /etc/isakmpd/isakmpd.conf
ning ipsecctl juures näida seadistusfail ning isakmpd fifo
# ipsecctl -f /etc/ipsec-partner_1.conf -i /var/run/isakmpd/isakmpd-partner_1.fifo
Partner ühega suhtlemiseks tuleb käivitada
# mkdir /var/run/isakmpd # route -T 101 exec isakmpd -4 -dvK \ -f /var/run/isakmpd/isakmpd-partner_2.fifo \ -i /var/run/isakmpd/isakmpd-partner_2.pid \ -c /etc/isakmpd/isakmpd.conf
ning ipsecctl juures näida seadistusfail ning isakmpd fifo
# ipsecctl -f /etc/ipsec-partner_2.conf -i /var/run/isakmpd/isakmpd-partner_2.fifo
Tulemusena tekib
TODO
Kasulikud lisamaterjalid
Debugimine
# isakmpd -vd -D 9=99
kus
- 9 - class (vt man isakmpd)
- 99 - debug level (vt man isakmpd)
# kill -USR1 _isampd protsessi pid
tekitab faili /var/run/isakmpd.report kus on nö huvitavaid andmeid parasjagu kehtiva isampd konfi kohta.
Märkused
- current ipsecctl interface to isakmpd only deals with flows and not keynote policy