IPSEC VPN2VPN - łączenie oddziałów firmy tunelem IPsec

   Generacja klucza RSA » | Struktura klucza RSA  »    
Konfiguracja pliku ipsec.conf »
  |  Konfiguracja pliku ipsec.secrets »
Konfiguracja sieci VPN w Ips-Qos »  |  Konfiguracja IDS w Ips-Qos » Konfiguracja komputerów w Ips-Qos »
Diagnostyka  »
 
Tutaj prezentujemy tworzenie tunelu łączącego siedzibę firmy w Monachium z oddziałem w Lublińcu przy wykorzystaniu routerów pod kontrolą Ips-Qos'a. Celem jest dostarczenie bezpiecznej komunikacji TCP/IP pomiędzy komputerami w obu lokaizacjach. Do uwierzytelniania stron użyto kluczy RSA (prywatnych i  publicznych).
Implementacja IPSec w Linuxie nie wymaga użycia protokołu PPP oraz L2TP, zatem konfiguracja jest stosunkowo prosta.


Generacja klucza RSA

W celu wygenerowania kluczy RSA na obu routerach należy jako użytkownik root wykonać polecenie:

ipsec rsasigkey 1024 > /root/key.rsa

Pliki będą miały strukturę podobną do pokazanej poniżej.

Struktura klucza RSA

Struktura klucz RSA na przykładzie lokalizacji w Lublińcu. Linie zaczynające sie znaliem #, to komentarze.
Linie zaczynają się znakiem Tab, część publiczna to linia zaczynająca się po "pubkey=", część prywatna, to reszta zaczynająca się od "Modulus":
	# RSA 1024 bits   debian   Tue Apr 30 20:40:07 2013
	# for signatures only, UNSAFE FOR ENCRYPTION
	#pubkey=0sAQNljwcT9gWZjbwxNeNOnL4cso07SfaCREZ0qzCFf3soDQceERtBa81ZTivxv7...
	Modulus: 0x658f0713f605998dbc3135e34e9cbe1cb28d3b49f682444674ab30857f7b2...
	PublicExponent: 0x03
	# everything after this point is secret
	PrivateExponent: 0x10ed2bd8a900eeecf4b2de508d1a1faf731789e1a915b60bbe1c8...
	Prime1: 0xbca70584e26fca12ad5abfb2df7b366b1f5a31c93c4a941fe4e6c1f52b3149...
	Prime2: 0x89d07ec4fa11b86f40f1942e81dc08577a88a999360e69b40b1dc3190400d4...
	Exponent1: 0x7dc4ae5896f53161c8e72a773fa7799cbf9176862831b8154344814e1cc...
	Exponent2: 0x5be054835161259f80a10d745692b03a51b07110ceb4467807692cbb580...
	Coefficient: 0x0285f170e6a6f7511ffb27b62f3c24150f49f317d6de7207b69bb4a65...


Konfiguracja pliku ipsec.conf

Fragment pliku /etc/ipsec.conf w lokalizacji w Lublińcu:
conn ipv4-rex-alice
auth=esp
authby=rsasig
pfs=yes
left="176.122.227.47"
leftrsasigkey="0sAQNljwcT9gWZjbwxNeNOnL4cso07SfaCREZ0qzCFf3soDQceERtBa81...
leftsubnet="11.0.0.0/24"
leftsourceip="11.0.0.1"
right="93.135.106.219"
rightrsasigkey="0sAQOO8WiAL9GFJMTwkMKHkQoaEjDlyzh7LnY7tktfqKmG22dA84Yws2...
rightsubnet="10.0.0.0/24"
rightsourceip="10.0.0.1"
auto=start
Znaczenie ustawień :
   auth - esp, typowe uwierzytelnianie,
   authby - rsasig, uwierzytelnianie przez klucze RSA,
   pfs  - yes, włączony mechanizm PFS,
   left  - publiczny adres IP lokalnego router'a,
   leftrsasigkey - część publiczna wygenerowanego klucza RSA, ciąg znaków zaczynający sie po "pubkey=",
   leftsubnet  - lokalna sieć LAN,
   leftsourceip  - adres IP lokalnego router'a w sieci LAN,
   right  - publiczny adres IP odległego router'a,
  
rightrsasigkey  - część publiczna klucza RSA wygenerowanego na odległym router'ze,
  
rightsubnet  - odległa sieć LAN,
  
rightsourceip  - adres IP odległego router'a w sieci LAN,
   auto - start, automatyczne łączenie, tunel jest tworzony, gdy tylko jest to możliwe.

Analogiczny fragment pliku w lokalizacji w Monachium jest symetryczny, tzn. left jest zamienone z right:
conn ipv4-alice-rex
auth=esp
authby=rsasig
pfs=yes
left="93.135.106.219"
leftrsasigkey="0sAQOO8WiAL9GFJMTwkMKHkQoaEjDlyzh7LnY7tktfqKmG22dA84Yws2...
leftsubnet="10.0.0.0/24"
leftsourceip="10.0.0.1" right="176.122.227.47"
rightrsasigkey="0sAQNljwcT9gWZjbwxNeNOnL4cso07SfaCREZ0qzCFf3soDQceERtBa81...
rightsubnet="11.0.0.0/24"
rightsourceip="11.0.0.1"
auto=start


 Konfiguracja pliku ipsec.secrets

Fragment pliku /etc/ipsec.secrets w lokalizacji w Lublińcu:
# alice
176.122.227.47 93.135.106.219: RSA {
Modulus: 0x658f0713f605998dbc3135e34e9cbe1cb28d3b49f682444674ab30857f7b2
PublicExponent: 0x03
# everything after this point is secret
PrivateExponent: 0x10ed2bd8a900eeecf4b2de508d1a1faf731789e1a915b60bbe1c8
Prime1: 0xbca70584e26fca12ad5abfb2df7b366b1f5a31c93c4a941fe4e6c1f52b3149
Prime2: 0x89d07ec4fa11b86f40f1942e81dc08577a88a999360e69b40b1dc3190400d4
Exponent1: 0x7dc4ae5896f53161c8e72a773fa7799cbf9176862831b8154344814e1cc
Exponent2: 0x5be054835161259f80a10d745692b03a51b07110ceb4467807692cbb580
Coefficient: 0x0285f170e6a6f7511ffb27b62f3c24150f49f317d6de7207b69bb4a65
}
Linie zaczynające sie znakiem #, to komentarze.  Wszystkie linie począwszy od "Modulus", skończywszy na "}" muszą
zaczynać się znakiem Tab. W powyższym przykładzie:
176.122.227.47 - to publiczny adres IP lokalnego router'a,
93.135.106.219 - to publiczny adres IP odległego router'a,
pomiędzy  znakami {} znajduje się prywatna część wygenerowanego klucza RSA.

Podobnie skonstruowany jest plik /etc/ipsec.secrets w lokalizacji w Monachium:
# rex
93.135.106.219 176.122.227.47: RSA {

Konfiguracja sieci VPN w Ips-Qos

Do pola Ustawienia główne  -> BRO -> SUBNETS należy dopisać odległą sieć LAN. Tak więc w lokalizacji Lubliniec wpis może wyglądać jak na obrazku.

...

W ustawieniach w lokalizacji w Monachium należy dpisać 11.0.0.0/24.

Konfiguracja IDS w Ips-Qos

Adresy IP odległych oddziałów powinny znaleźć sie na białej liście (#white list) systemu IDS.

...

Konfiguracja komputerów w Ips-Qos

Komputery w seci LAN, które powinny być dostępne poprzez VPN muszą być skonfigurowane w polu
Ustawienia komputera -> WAN jak na obrazku.

...

Diagnostyka

Polecenie ip xfrm state  w lokalizacji w Lublińcu powinno pokazać coś takiego:
src 93.135.106.219 dst 176.122.227.47
	proto esp spi 0x71f827c9 reqid 16385 mode tunnel
	replay-window 32 flag af-unspec
	auth hmac(sha1) 0xcbd98f10fba6ec442fce93064799ac75d722282d
	enc cbc(aes) 0xeb3b3c65692ba58fa8634726b61c1fad
src 176.122.227.47 dst 93.135.106.219
	proto esp spi 0x0fbc1668 reqid 16385 mode tunnel
	replay-window 32 flag af-unspec
	auth hmac(sha1) 0xc7e5b023c5511cd26800cd6939ad1e5236c76c48
	enc cbc(aes) 0xb75ae4dfb856dccc895e6541255a106b
src 176.122.227.47 dst 93.135.106.219
	proto esp spi 0x92967408 reqid 16385 mode tunnel
	replay-window 32 flag af-unspec
	auth hmac(sha1) 0x55c42ce61b7e72089f01d8a5caa3850afe44807b
	enc cbc(aes) 0x8ab5e057eccb6f84802e131671a47e5a
src 93.135.106.219 dst 176.122.227.47
	proto esp spi 0xdc2e1584 reqid 16385 mode tunnel
	replay-window 32 flag af-unspec
	auth hmac(sha1) 0xcc444ef87925b1980309dc5cfe67523bd3e21da4
	enc cbc(aes) 0x59a0e5fa1493a111396f42e6e123ce3f

Polecenie ip xfrm policy w lokalizacji w Lublińcu powinno pokazać coś takiego:
src 11.0.0.0/24 dst 10.0.0.0/24 
dir out priority 2344 ptype main
tmpl src 176.122.227.47 dst 93.135.106.219
proto esp reqid 16393 mode tunnel
src 10.0.0.0/24 dst 11.0.0.0/24
dir fwd priority 2344 ptype main
tmpl src 93.135.106.219 dst 176.122.227.47
proto esp reqid 16393 mode tunnel
Polecenie ip route  w lokalizacji w Lublińcu powinno pokazać coś takiego:
10.6.0.2 dev tun0  proto kernel  scope link  src 10.6.0.1
176.122.227.0/24 dev eth0 proto kernel scope link src 176.122.227.47
10.0.0.0/24 dev eth0 scope link src 11.0.0.1
10.6.0.0/24 via 10.6.0.2 dev tun0
11.0.0.0/24 dev eth1 proto kernel scope link src 11.0.0.1
default via 176.122.227.254 dev eth0

Polecenie ping 10.0.0.6  w lokalizacji w Lublińcu powinno działać:
PING 10.0.0.6 (10.0.0.6) 56(84) bytes of data.
64 bytes from 10.0.0.6: icmp_req=1 ttl=127 time=165 ms
64 bytes from 10.0.0.6: icmp_req=2 ttl=127 time=165 ms
64 bytes from 10.0.0.6: icmp_req=3 ttl=127 time=166 ms