Znaki Kończące: W przykładach tej i innych sekcji, zauważysz znak ``^D'' na końcu listingów. Oznacza to konieczność przytrzymania klawisza Control i wciśnięcie D. Inną specjalną kombinacją jest ``^C'', co oznacza analogicznie wciśnięcie Control a następnie C.
Podpowiedź: Inne HOWTO dotyczące implementacji IPsec znajdują się pod adresami http://www.daemonnews.org/200101/ipsec-howto.html i http://www.freebsddiary.org/ipsec.php.
Mechanizm IPsec zapewnia bezpieczną komunikację dla warstwy IP i warstwy gniazd. Sekcja ta opisuje jak go wykorzystać. Szczegóły implementacji znajdują się w Podręczniku dla Programistów.
Obecna implementacja IPsec wspiera zarówno tryb transportowy jak i tunelowy. Tryb tunelowy dostępny jest jednak z pewnymi ograniczeniami - pod adresem http://www.kame.net/newsletter/ zebrano dokładniejsze przykłady.
Rozważając IPsec, weź pod uwagę że musisz mieć wkompilowane w jądro opcje dotyczące IPsec:
options IPSEC #IP security
options IPSEC_ESP #IP security (crypto; define w/IPSEC)
Zestawmy związek bezpieczeństwa ( ang. ``Security Association'', SA ) by zapewnić bezpieczny kanał komunikacyjny pomiędzy HOSTEM A ( 10.2.3.4 ) i HOSTEM B ( 10.6.7.8 ). Poniżej pokażemy trochę skomplikowany przykład. W kierunku z HOSTA A do HOSTA B używamy tylko starej wersji AH. Natomiast w kierunku od HOSTA B do HOSTA A, używamy połączonych protokołów - AH w nowej wersji oraz nowej wersji ESP.
Powinniśmy wybrać algorytm pasujący do ``AH''/``nowego AH''/``ESP''/ ``nowego ESP''. Zajrzyj do strony podręcznika setkey(8) by sprawdzić nazwy poszczególnych algorytmów. My wybieramy MD5 dla AH, new-HMAC-SHA1 dla nowego AH oraz new-DES-expIV z 8-bajtowym IV dla nowego ESP.
Długość klucza mocno zależy od konkretnego algorytmu. Na przykład, dla MD5 klucz musi mieć dokładnie 16 bajtów, dla new-HMAC-SHA1 20, a 8 dla new-DES-expIV. Wybieramy klucze odpowiednio: ``MYSECRETMYSECRET'', ``KAMEKAMEKAMEKAMEKAME'' oraz ``PASSWORD''.
Teraz przydzielimy SPI ( ang. ``Security Parameter Index'', Indeks Parametrów Bezpieczeństwa ) dla każdego z wybranych protokołów. Zauważ, że potrzebujesz 3 SPI dla zestawienia tego kanału, ponieważ używane są trzy nagłówki protokołów bezpieczeństwa ( jeden z HOSTA A do HOSTA B oraz dwa z HOSTA B do HOSTA A ). Zauważ również, że identyfikator SPI musi być większy lub równy 256. Wybieramy wartości 1000, 2000 oraz 3000.
(1)
HOST A ------> HOST B
(1)PROTO=AH
ALG=MD5(RFC1826)
KEY=MYSECRETMYSECRET
SPI=1000
(2.1)
HOST A <------ HOST B
<------
(2.2)
(2.1)
PROTO=AH
ALG=new-HMAC-SHA1(nowe AH)
KEY=KAMEKAMEKAMEKAMEKAME
SPI=2000
(2.2)
PROTO=ESP
ALG=new-DES-expIV(nowe ESP)
długość IV= 8
KEY=PASSWORD
SPI=3000
Skonfigurujmy teraz SA. Wykonaj na HOŚCIE A i B polecenie setkey(8):
# setkey -c
add 10.2.3.4 10.6.7.8 ah-old 1000 -m transport -A keyed-md5 "MYSECRETMYSECRET" ;
add 10.6.7.8 10.2.3.4 ah 2000 -m transport -A hmac-sha1 "KAMEKAMEKAMEKAMEKAME" ;
add 10.6.7.8 10.2.3.4 esp 3000 -m transport -E des-cbc "PASSWORD" ;
^D
Komunikacja IPsec nie zostaje rozpoczęta dopóki nie ma w kernelu wpisów dotyczących zasad bezpieczeństwa. W tym przypadku, musisz skonfigurować każdego hosta.
Na HOŚCIE A:
# setkey -c
spdadd 10.2.3.4 10.6.7.8 any -P out ipsec
ah/transport/10.2.3.4-10.6.7.8/require ;
^D
Na HOŚCIE B:
# setkey -c
spdadd 10.6.7.8 10.2.3.4 any -P out ipsec
esp/transport/10.6.7.8-10.2.3.4/require ;
spdadd 10.6.7.8 10.2.3.4 any -P out ipsec
ah/transport/10.6.7.8-10.2.3.4/require ;
^D
HOST A --------------------------------------> HOST B
10.2.3.4 10.6.7.8
| |
========= stary AH keyed-md5 =========>
<======== nowe AH hmac-sha1 ===========
<======== nowe ESP des-cbc ============
Inny przykład, tym razem wykorzystujący IPv6.
Używamy trybu transportowego ESP, dla komunikacji TCP pomiędzy portami 110 na HOŚCIE A i HOŚCIE B.
============ ESP ============
| |
HOST-A HOST-B
fec0::10 -------------------- fec0::11
Algorytm szyfrujący to blowfish-cbc, z kluczem ``kamekame''. Algorytm uwierzytelniający to hmac-sha1 z kluczem ``maly testowy kluczyk''. Konfiguracja na HOŚCIE A:
# setkey -c <<EOF
spdadd fec0::10[any] fec0::11[110] tcp -P out ipsec
esp/transport/fec0::10-fec0::11/use ;
spdadd fec0::11[110] fec0::10[any] tcp -P in ipsec
esp/transport/fec0::11-fec0::10/use ;
add fec0::10 fec0::11 esp 0x10001
-m transport
-E blowfish-cbc "kamekame"
-A hmac-sha1 "maly testowy kluczyk" ;
add fec0::11 fec0::10 esp 0x10002
-m transport
-E blowfish-cbc "kamekame"
-A hmac-sha1 "maly testowy kluczyk" ;
EOF
...oraz na HOŚCIE B:
# setkey -c <<EOF
spdadd fec0::11[110] fec0::10[any] tcp -P out ipsec
esp/transport/fec0::11-fec0::10/use ;
spdadd fec0::10[any] fec0::11[110] tcp -P in ipsec
esp/transport/fec0::10-fec0::11/use ;
add fec0::10 fec0::11 esp 0x10001 -m transport
-E blowfish-cbc "kamekame"
-A hmac-sha1 "maly testowy kluczyk" ;
add fec0::11 fec0::10 esp 0x10002 -m transport
-E blowfish-cbc "kamekame"
-A hmac-sha1 "maly testowy kluczyk" ;
EOF
Zwróć uwagę na kierunek SP.
Tryb tunelowy pomiędzy dwoma bramkami bezpieczeństwa.
Protokół bezpieczeństwa to stary tryb tunelowy AH, określony w RFC1826 z dodatkiem algorytmu uwierzytelniającego keyed-md5 i kluczem ``to moj maly test''.
======= AH =======
| |
Siec-A Bramka-A Bramka-B Siec-B
10.0.1.0/24 ---- 172.16.0.1 ----- 172.16.0.2 ---- 10.0.2.0/24
Konfiguracja Bramki-A:
# setkey -c <<EOF
spdadd 10.0.1.0/24 10.0.2.0/24 any -P out ipsec
ah/tunnel/172.16.0.1-172.16.0.2/require ;
spdadd 10.0.2.0/24 10.0.1.0/24 any -P in ipsec
ah/tunnel/172.16.0.2-172.16.0.1/require ;
add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any
-A keyed-md5 "to moj maly test" ;
add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any
-A keyed-md5 "to moj maly test" ;
EOF
Jeśli pominięte zostanie pole numeru portu ( tak jak w przykładzie powyżej ), przyjmowany jest wpis [any]. Parametr -m określa używane SA, a -m any oznacza pełną dowolność w wyborze protokołu bezpieczeństwa. Opcji tych można używać zarówno dla trybu tunelowego jak i transportowego.
Konfiguracja Bramki-B:
# setkey -c <<EOF
spdadd 10.0.2.0/24 10.0.1.0/24 any -P out ipsec
ah/tunnel/172.16.0.2-172.16.0.1/require ;
spdadd 10.0.1.0/24 10.0.2.0/24 any -P in ipsec
ah/tunnel/172.16.0.1-172.16.0.2/require ;
add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any
-A keyed-md5 "to moj maly test" ;
add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any
-A keyed-md5 "to moj maly test" ;
EOF
Tworzenie SA pomiędzy dwoma bramami bezpieczeństwa
Musimy użyć transportowego trybu AH i tunelu ESP pomiędzy Bramą-A a Bramą-B. W tym przypadku najpierw tunelujemy ruch w ESP a potem stosujemy transportową hermetyzację AH.
========== AH =========
| ======= ESP ===== |
| | | |
Sieć-A Brama-A Brama-B Sieć-B
fec0:0:0:1::/64 --- fec0:0:0:1::1 ---- fec0:0:0:2::1 --- fec0:0:0:2::/64
Algorytmem szyfrowania jest 3des-cbc, uwierzytelniania w ramach ESP - hmac-sha1. Natomiast algorytm uwierzytelniający w AH to hmac-md5. Konfiguracja dla Bramy-A:
# setkey -c <<EOF
spdadd fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out ipsec
esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require
ah/transport/fec0:0:0:1::1-fec0:0:0:2::1/require ;
spdadd fec0:0:0:2::/64 fec0:0:0:1::/64 any -P in ipsec
esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require
ah/transport/fec0:0:0:2::1-fec0:0:0:1::1/require ;
add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10001 -m tunnel
-E 3des-cbc "kamekame12341234kame1234"
-A hmac-sha1 "this is the test key" ;
add fec0:0:0:1::1 fec0:0:0:2::1 ah 0x10001 -m transport
-A hmac-md5 "this is the test" ;
add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10001 -m tunnel
-E 3des-cbc "kamekame12341234kame1234"
-A hmac-sha1 "this is the test key" ;
add fec0:0:0:2::1 fec0:0:0:1::1 ah 0x10001 -m transport
-A hmac-md5 "this is the test" ;
EOF
Nawiązywanie SA z różnymi końcami tunelu
W tym przykładzie w ramach tunelowania ESP łączymy Host-A i Bramę-A. Algorytm szyfrowania to cast128-cbc a uwierzytelniania hmac-sha1. Stosujemy również ESP w trybie transportowym pomiędzy Hostem-A a Hostem-B. Algorytmem szyfrowania będzie rc5-cbc a uwierzytelniania hmac-md5.
================== ESP =================
| ======= ESP ======= |
| | | |
Host-A Brama-A Host-B
fec0:0:0:1::1 ---- fec0:0:0:2::1 ---- fec0:0:0:2::2
Konfiguracja Hosta-A:
# setkey -c <<EOF
spdadd fec0:0:0:1::1[any] fec0:0:0:2::2[80] tcp -P out ipsec
esp/transport/fec0:0:0:1::1-fec0:0:0:2::2/use
esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ;
spdadd fec0:0:0:2::1[80] fec0:0:0:1::1[any] tcp -P in ipsec
esp/transport/fec0:0:0:2::2-fec0:0:0:l::1/use
esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ;
add fec0:0:0:1::1 fec0:0:0:2::2 esp 0x10001
-m transport
-E cast128-cbc "12341234"
-A hmac-sha1 "this is the test key" ;
add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10002
-E rc5-cbc "kamekame"
-A hmac-md5 "this is the test" ;
add fec0:0:0:2::2 fec0:0:0:1::1 esp 0x10003
-m transport
-E cast128-cbc "12341234"
-A hmac-sha1 "this is the test key" ;
add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10004
-E rc5-cbc "kamekame"
-A hmac-md5 "this is the test" ;
EOF
| Poprzedni | Spis treści | Następny |
| OpenSSL | Początek rozdziału | OpenSSH |
This, and other documents, can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
For questions about FreeBSD, read the
documentation
before contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.