Protokół IPSec

Transkrypt

Protokół IPSec
Protokół IPSec
Implementacja z uŜyciem pakietu ‘racoon’
IPSec jest zbiorem protokołów słuŜących do:
•
Implementacji bezpiecznych połączeń,
•
Wymiany kluczy szyfrowania pomiędzy komputerami.
Protokoły tej grupy mogą być wykorzystywane do tworzenia Wirtualnej Sieci Prywatnej
(ang. ‘VPN’). VPN oparta na IPSec składa się z dwóch kanałów komunikacyjnych między
połączonymi hostami lub bramami VPN:
•
Kanał wymiany kluczy, przez który przekazywane są
uwierzytelnianiem oraz kodowaniem (klucze). Pracuje
protokołem UDP na porcie 500.
•
Kanał transportowy (jeden lub więcej), który transmituje pakiety przez sieć
prywatną. Jest on oparty są na protokole ESP (port numer 50).
dane związane z
ze standardowym
Instalacja oprogramowania
Instalacja oprogramowania moŜe odbyć się za pomocą poniŜszej komendy lub menedŜera
pakietów ‘Synaptic’:
aptitude install ipsec-tools racoon
ipsec-tool – oprogramowanie obsługujące protokoły IPSec (ESP, AH),
racoon – oprogramowanie serwera wymiany kluczy IKE (ang. ‘IPSec key exchange’)
Konfiguracja oprogramowania
Polecenia konfiguracyjne wykonujemy „ręcznie” jako administrator ‘root’ (‘sudo’ lub
‘sudo su’). Konfiguracja tunelu IPSec składa się z konfiguracji statycznej i dynamicznej.
W tym celu warto wykorzystać skrypty pomocnicze. Umownie oznaczamy komputery w
sieci jako serwer i klient.
Konfiguracja statyczna tunelu IPsec
Skrypt ipsec-trans.sh tworzący tunel, umieszczamy w katalogu /etc i nadajemy mu
prawa do wykonywania:
chmod +x /etc/ipsec-trans.sh
a następnie edytujemy w nim odpowiednie adresy IP:
#!/usr/sbin/setkey -f
flush;
spdflush;
# ESP
add
IP_serwera
IP_klienta
"123456789012345678901234";
add
IP_klienta
IP_serwera
"987654321098765432109876";
esp
esp
15701
24501
-E
-E
3des-cbc
rijndael-cbc
spdadd IP_serwera IP_klienta any -P out ipsec
esp/transport//require;
spdadd IP_klienta IP_serwera any -P in ipsec
esp/transport//require;
#ESP - to protokół transportowy dla IPSec; działa na porcie 50, więc trzeba
go udostępnić.
#3des-cbc oraz rijndael-cbc - algorytmy szyfrowania
#123456789012345678901234 – przykładowy klucz szyfrowania
#IP_serwera oraz IP_klienta - adresy umownie oznaczonych stacji
#spdadd – polecenie określa regułę dla danych wejściowych i wyjściowych w
zaleŜności od stacji, na której wprowadzamy ustawienia.
Skrypt uruchamiamy poleceniem:
/etc/ipsec-trans.sh
Generowanie kluczy publicznych i prywatnych zaangaŜowanych stron (opcja)
Edytujemy skrypt cert.sh, generujący klucze publiczny i prywatny (o ile nie zrobiliśmy
tego wcześniej), wstawiając odpowiednie nazwy komputerów w zaleŜności od umownej
roli jaką będą pełnić (klient/serwer):
#!/bin/bash
nazwa="umowna nazwa hosta"
openssl req -new -nodes -newkey rsa:1024 -sha1 -keyform PEM -keyout
${nazwa}.private -outform PEM -out request.pem
openssl
x509
-req
-in
request.pem
-signkey
${nazwa}.private
-out
${nazwa}.public
#skrypt wykonuje polecenia biblioteki openssl. Tworzy klucze prywatne oraz
publiczne dla danej stacji.
#w polu nazwa="" definijemy umowną nazwę komputera
Podczas generowania kluczy odpowiadamy na pytania (kraj, region, nazwa hosta etc. –
vide instrukcja do narzędzia OpenSSL) a wygenerowane pliki kopiujemy do katalogu
/etc/racoon. Za pomocą polecenia scp (moŜemy uŜyć usługi FTP ale równieŜ
skorzystać z Samby lub innej bezpiecznej metody transferu) plik klucza publicznego
(‘klient.public’) naleŜy dostarczyć na stację zdalną – tak, aby obie strony szyfrowanego
połączenia dysponowały kluczem publicznym partnera, np.:
scp klient.public kowalski@domena:/home/kowalski/
a następnie, jako administrator zdalnej stacji (kowalski@domena) przekopiować plik do
katalogu z plikami konfiguracyjnymi:
cp klient.public /etc/racoon/
Konfiguracja dynamicznego tunelu IPSec
W lokalizacji /etc/racoon tworzymy plik konfiguracyjny ‘racoon.conf’ i wstawiamy do
niego odpowiednie nazwy kluczy oraz adres IP zdalnego hosta (miejsca zaznaczone
pogrubieniem):
path certificate "/etc/racoon/";
sainfo anonymous
{
pfs_group 1;
lifetime time 20 sec;
encryption_algorithm 3des ;
authentication_algorithm hmac_sha1;
compression_algorithm deflate ;
}
remote adres_zdalnego_hosta
{
exchange_mode aggressive,main;
my_identifier asn1dn;
peers_identifier asn1dn;
certificate_type x509 "klient.public" "klient.private";
peers_certfile x509 "server.public";
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2 ;
}
}
Wiersz rozpoczynający się od: certificate_type wskazuje pliki stanowiące własne klucz
publiczny i prywatny. Natomiast linia zaczynająca się peers_certfile wskazuje na plik,
który jest kluczem publicznym zdalnego hosta.
Uruchomienie tunelu IPSec
Dopisujemy zawartość skryptu ipsec-trans.sh do pliku /etc/ipsec-tools.conf
Komentujemy linie zaczynające się od poleceń add (definiują tzw. asocjacje, które juŜ
wcześniej zostały stworzone przez uruchomienie skryptu). Następnie za pomocą
polecenia:
/etc/init.d/racoon restart
restartujemy demona IKE. Konfiguracja i uruchomienie stacji zdalnej na drugim końcu
kanału wygląda analogicznie.
Weryfikacja poprawności działania tunelu IPSec
Weryfikacji działania tunelu IPSec moŜna dokonać za pomocą polecenia ‘ping’ lub
programu ‘wireshark’. W oknie konsoli moŜna takŜe otworzyć plik ‘syslog’, który będzie
zawierał ewentualne błędy (komenda ‘tail’ – pokazuje końcowe wpisy w logu, parametr
‘-f’ pozwala podglądać najświeŜsze zdarzenia systemowe):
tail –f /var/log/syslog
Z kolei aktywność samego procesu ‘racoon’ i to, którym plikiem został on zainicjowany,
moŜna zweryfikować poleceniem:
ps –ef |grep racoon
w którym: ‘ps’, to komenda wyświetlająca aktywne procesy, ‘-ef’ to parametr
definiujący sposób formatowania listowanych procesów, symbol ‘|’ przekazuje wyjście
jednego programu na wejście kolejnego (w tym wypadku ‘grep’). Program ‘grep’ w tym
przypadku filtruje wiersze zawierające ciąg ‘racoon’. W przypadku błędów naleŜy
ponownie uruchomić skonfigurować demona IPSec za pomocą skryptu ‘ipsec-trans.sh’
oraz restartować demona IKE (‘racoon’).