To jest robocza wersja tekstu. Jest
kwintesencja ale całkiem brak formy :) zwłaszca pod koniec.
VPN
Windows XP i Linux 2.6.x
Wstęp
Dokument opisuje zestawienie tunelu IPsec pomiędzy stacją
roboczą pracującą pod Windows XP, a siecią, dla której serwerem VPN
jest Linux
z kernelem 2.6.11.8 plus pakiet ipsec–tools. Przedstawiona topologia
jest może
mało realna, ale wykorzystałem sprzęt, który miałem w domu pod ręką.
Przedstawiam rozwiązanie problemu z bezpiecznym połączeniem przez tunel
VPN
laptopa, który łączy się z resztą LANu za pomocą Wi–Fi, rozwiązanie po
małych
przeróbkach nadaje się do połączenia pracowników zdalnych z siecią
firmową.
Topologię sieci, którą zbudowałem do tego doświadczenia
przedstawia powyższy rysunek.
W zastosowaniu realnym, pracującym np. gdzieś w firmie można
by zamiast routera Linksys zastosować dowolny punkt dostępowy a wyjście
do
internetu zrobić na dodatkowej karcie na komputerze z Linuxem (istnieje
tutaj
duża dowolność).
Konfiguracja Linixa
Kompilacja kernela na przykładzie
2.6.11.8
Networking
support (NET) [Y/n/?] y
*
* Networking
options
*
PF_KEY
sockets (NET_KEY) [Y/n/m/?] y
IP: AH
transformation (INET_AH) [Y/n/m/?] y
IP: ESP
transformation (INET_ESP) [Y/n/m/?] y
IP: IPsec
user configuration interface (XFRM_USER) [Y/n/m/?] y
Cryptographic
API (CRYPTO) [Y/n/?] y
HMAC
support (CRYPTO_HMAC) [Y/n/?] y
Null
algorithms (CRYPTO_NULL) [Y/n/m/?] y
MD5 digest
algorithm (CRYPTO_MD5) [Y/n/m/?] y
SHA1 digest
algorithm (CRYPTO_SHA1) [Y/n/m/?] y
DES and
Triple DES EDE cipher algorithms (CRYPTO_DES) [Y/n/m/?] y
AES cipher
algorithms (CRYPTO_AES) [Y/n/m/?] y
W
sekcji “Cryptographic API” należy wybrać protokoły, z
których będziemy chcieli korzystać.
Kompilacja
ipsec–tools 0.5.2
Konfiguracja
narzędzi ipsec–tools
!!!
Dodac komentarze
plik
/etc/racoon/ipsec.conf
#!/usr/local/sbin/setkey
-f
flush;
spdflush;
spdadd
10.10.10.0/24 10.11.12.2/32 any -P out ipsec
esp/tunnel/10.11.12.5-10.11.12.2/require;
spdadd
10.11.12.2/32 10.10.10.0/24 any -P in ipsec
esp/tunnel/10.11.12.2-10.11.12.5/require;
plik
/etc/racoon/racoon.conf
#if no
listen
directive is specified, racoon will listen to all
# available
interface addresses.
path include
"/etc/racoon";
path
pre_shared_key "/etc/racoon/psk.txt";
path backupsa
"/etc/racoon/backupsa.txt";
listen
{
#isakmp ::1 [7000];
isakmp 10.11.12.5 [500];
# #admin
[7002];
# administrative's port by kmpstat.
# strict_address; #
required all addresses must be
bound.
}
#
Specification
of default various timer.
#timer
#{
# # These
value can be changed per remote
node.
# counter 5;
# maximum trying count to send.
# interval
20 sec; #
maximum interval to resend.
# persend 1;
# the number of packets per a
send.
#
# # timer
for waiting to complete each
phase.
# phase1 90
sec;
# phase2 60
sec;
#}
remote
anonymous
{
exchange_mode main,aggressive,base;
#doi ipsec_doi;
situation identity_only;
#my_identifier address;
#my_identifier user_fqdn
"sakane@kame.net";
#peers_identifier user_fqdn
"sakane@kame.net";
##certificate_type x509 "mycert"
"mypriv";
#nonce_size 16;
lifetime time 1 hour; # sec,min,hour
#passive off;
#initial_contact on;
#support_mip6 on;
proposal_check obey; # obey, strict or claim
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group 2 ;
}
}
sainfo
anonymous
{
pfs_group 2;
lifetime time 30 min;
encryption_algorithm 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate ;
}
Konfiguracja Windows XP
Start -> Uruchom -> wpisz "mmc" -> OK
Okno "Konsola1"
Plik -> Dodaj/Usuń przystawkę...
Okno "Dodaj/Usuń przystawkę"
kliknij "Dodaj..."
Okno "Dodawanie przystawki autonomicznej"
Zaznaczyć "Zasady zabezpieczeń IP w Komputer
Lokalny" -> Dodaj -> Zamknij
Okno "Dodaj/Usuń przystawkę"
kliknij OK
Okno "Konsola1"
Na "Zasady zabezpieczeń IP w Komputer Lokalny"
wybrac prawym przyciskiem myszy:
Wszystkie zadania -> Utwóz zasady zabezpieczen IP...
Okno "Kreator zasad zabezpieczen IP"
kliknij "Dalej"
Nazwa: wpisz np. Tunel IPsec -> Dalej
Nie zaznaczone "Włącz regułę odpowiedzi domyślnej"
-> Dalej
Zaznaczone "Edytuj właściwości" -> Zakończ
Okno "Właściwości: Tunel IPsec"
kliknij "Dodaj"
Okno "Kreator reguł zabezpieczeń"
kliknij "Dalej"
Zaznaczyć "Koniec tunelu jest określony przez ten adres
IP:" i wpisać adres
serwera VPN z którym będziemy się łączyć (w naszym
przykładzie 10.11.12.5) -> Dalej
Zaznaczyć "Wszystkie połączenia sieciowe" ->
Dalej
Zaznaczyć "Użyj tego ciągu do ochrony wymiany kluczy
(klucz wstępny)" i w białym
polu poniżej należy wpisać swój_klucz_wstepny -> Dalej
kliknij "Dodaj"
Okienko "Lista filtrów IP"
Wpisz nazwie "Out"
kliknij "Dodaj"
Okienko "Kreator filtrów IP"
kliknij "Dalej"
Adres źródłowy: "Mój adres IP" -> Dalej
Adres docelowy: "Dowolny adres IP" i wpisać adres
komputera po drugiej stronie tunelu VPN (w przykładzie 10.10.10.100)
->
Dalej
UWAGA!!! lub sieć
Adres docelowy: "sieć ????" i wpisać adres sieci
po drugiej stronie tunelu VPN (w przykładzie
10.10.10.100/255.255.255.0) ->
Dalej
Wybierz typ protokołu "Dowolny" -> Dalej
Zaznaczone "Edytuj właściwości" -> Dalej
Okienko "Właściwości: filtr"
Nie zaznaczone "Lustrzane. ....." -> OK
Okienko "Lista filtrów IP"
OK
Zaznacz Out -> Dalej
Zaznacz "Wymagaj zabezpieczeń" -> Edytuj
Okienko "Właściwości: Wymagaj Zabezpieczeń"
Zaznacz "Negocjuj protokół zabezpieczeń"
W polu "Kolejność wybierania metod zabezpieczeń:"
usuń wszystkie wpisy
Dodaj
Okienko "Nowa metoda zabezpieczeń"
Zaznacz "Niestandardowa” żeby wybrać swoje
ustawienia" w przykładzie zaznacz metodę
"Szyfrowanie i integralność" -> OK
Okienko "Właściwości: Wymagaj Zabezpieczeń"
OK
Okno "Kreator reguł zabezpieczeń"
Dalej
Nie zaznaczone "Edytuj ..." -> Zakończ
[W okienku "Właściwości: Tunel IPsec" kliknij
Dodaj i powtórz całą
operacje zmieniając tylko nazwę filtra na "In"]
Okno "Kreator reguł zabezpieczeń"
Dalej
Zaznaczyć "Koniec tunelu jest określony przez ten adres
IP:" i wpisać własny
adres IP (w przykładzie 10.11.12.2) -> Dalej
Zaznaczyć "Wszystkie połączenia sieciowe" ->
Dalej
Zaznaczyć "Użyj tego ciągu do ochrony wymiany kluczy
(klucz wstepny)" i w bialym
polu poniżej należy wpisać swój_klucz_wstepny -> Dalej
Dodaj
Okienko "Lista filtrów IP"
Wpisz nazwe "In"
Dodaj
Okienko "Kreator filtrów IP"
Dalej
Adres źródłowy: "Dowolny adres IP" i wpisać adres
serwera VPN
(w przykładzie 10.10.10.100) -> Dalej
Adres docelowy: "Mój aders IP" -> Dalej
Wybierz typ protokołu "Dowolny" -> Dalej
Zaznaczone "Edytuj właściwości" -> Dalej
Okienko "Właściwosci: filtr"
Nie zaznaczone "Lustrzane. ....." -> OK
Okienko "Lista filtrów IP"
OK
Zaznacz In -> Dalej
Zaznacz Wymagaj zabezpieczen -> Edytuj
Okienko "Właściwości: Wymagaj Zabezpieczeń"
Zaznacz "Negocjuj protokuł zabezpieczeń"
W polu "Kolejność wybierania metod zabezpieczeń:"
usun wszyskie wpisy
Dodaj
Okienko "Nowa metoda zabezpieczen"
Zaznacz "Niestandardowa zaby wybrac swoje
ustawienia" w przykladzie zaznacz metode
"Szyfrowanie i integralnoś" -> OK
Okienko "Właściwości: Wymagaj Zabezpieczeń"
OK
Okno "Kreator reguł zabezpieczeń"
Dalej
Nie zaznaczone "Edytuj ..." -> Zakończ
Okno "Właściwości: Tunel IPsec"
Zastosuj -> OK
Konfiguracja Linksysa
~ # route
Kernel IP routing table
Destination
Gateway
Genmask
Flags Metric Ref Use
Iface
10.11.12.0
*
255.255.255.0 U
0 0 0 br0
10.10.10.0
10.11.12.5 255.255.255.0 UG
0 0 0 br0
192.168.0.0
*
255.255.248.0 U
0 0 0 vlan1
127.0.0.0
*
255.0.0.0 U
0 0 0 lo
default
192.168.0.1
0.0.0.0
UG
0 0 0 vlan1
default
10.11.12.1
0.0.0.0
UG
0
0
0 br0
Testowanie połączenia
C:\>ping 10.10.10.100
Badanie 10.10.10.100 z
użyciem 32 bajtów danych:
Negocjowanie zabezpieczeń
IP.
Odpowiedź z 10.10.10.100:
bajtów=32 czas=2ms TTL=64
Odpowiedź z 10.10.10.100:
bajtów=32 czas=1ms TTL=64
Odpowiedź z 10.10.10.100:
bajtów=32 czas=1ms TTL=64
Statystyka badania ping
dla 10.10.10.100:
Pakiety:
Wysłane = 4, Odebrane = 3,
Utracone = 1 (25% straty),
Szacunkowy czas błądzenia
pakietów w millisekundach:
Minimum
= 1 ms, Maksimum = 2 ms, Czas
średni = 1 ms
Logi z Linuxa ze startu demona racoon i
zestawienia
połączenia po puszczeniu pinga z windowsów. Jeżeli nic nie zmienialiśmy
to są w
pliku /var/log/messages.
root@test23:~#
tail -n 15 /var/log/messages
Jun 26 12:56:02 test23 racoon: INFO:
@(#)ipsec-tools 0.5.2 (http://ipsec-tools.sourceforge.net)
Jun 26 12:56:02 test23 racoon: INFO: @(#)This
product linked OpenSSL 0.9.7e 25 Oct 2004 (http://www.openssl.org/)
Jun 26 12:56:02 test23 racoon: INFO:
10.11.12.5[500] used as isakmp port (fd=6)
Jun 26 12:56:48 test23 racoon: ERROR: unknown
Informational exchange received.
Jun 26 12:56:52 test23 racoon: INFO: respond new
phase 1 negotiation: 10.11.12.5[500]<=>10.11.12.2[500]
Jun 26 12:56:52 test23 racoon: INFO: begin Identity
Protection mode.
Jun 26 12:56:52 test23 racoon: INFO: received
broken Microsoft ID: MS NT5 ISAKMPOAKLEY
Jun 26 12:56:52 test23 racoon: INFO: received
Vendor ID: FRAGMENTATION
Jun 26 12:56:52 test23 racoon: INFO: received
Vendor ID: draft-ietf-ipsec-nat-t-ike-02
Jun 26 12:56:52 test23 racoon: INFO: ISAKMP-SA
established 10.11.12.5[500]-10.11.12.2[500]
spi:a7e0ea7baec5ace0:8db405ea1f8a3a69
Jun 26 12:56:52 test23 racoon: INFO: respond new
phase 2 negotiation: 10.11.12.5[0]<=>10.11.12.2[0]
Jun 26 12:56:52 test23 racoon: INFO: IPsec-SA
established: ESP/Tunnel 10.11.12.2->10.11.12.5
spi=256536002(0xf4a6dc2)
Jun 26 12:56:52 test23 racoon: INFO: IPsec-SA
established: ESP/Tunnel 10.11.12.5->10.11.12.2
spi=865235708(0x339272fc)
VII.
Problemy
Nie jest niestety tak kolorowo jak by się mogło
wydawać.
Jeżeli po zestawieniu połączenia VPN na serwerze
został
zrestarowny demon racoon to Windows bez zatrzymania i ponownego
uruchomienia
usługi IPsec nie chcą się połączyć powtórnie. Rozwiązaniem tego
problemu jest
poniższy skrypcik zapisany w pliku z rozszerzeniem bat lub cmd, który
restartuje usługę IPsec.
net stop
"PolicyAgent"
net start
"PolicyAgent"
Wszelkie problemy rozwiązuje też nieśmiertelny
reset
Windowsów.
ogólnie o Mechanizmach KRYPTOGRAFICZNYCH ISAKMP I
ESP w
google zapytanie:
esp ah md5
sha1
technet
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/pl/library/ServerHelp/efb378ae-8702-4ffb-b832-65641dc1d305.mspx
http://www.ipsec.pl/art/cbi_ipsec.html
IX.
Na koniec
Mam nadzieje że nie wkradł się tutaj żaden błąd
jeżeli tak
się stało to napisz do mnie. Jeżeli napotkałeś inne problemy które
rozwiązałeś
to napisz postaram się rozszerzyć ten dokument o Twoje
doświadczenia.
Grenlandia 2012