SlackList  - Śmietnik - VPN Windows XP i Linux 2.6.x


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ą.

siec

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)

 

VI.            Co można pozmieniać ?

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.

VIII.            Linki do stron z podobnymi zagadnieniami

 

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