-
IPsec host-to-host i racoon w CentOS 5
Bezpieczna komunikacja między serwerami jest niezwykle ważna, w szczególności, gdy w grę wchodzą usługi które domyślnie nie są w żaden sposób zabezpieczone przed podsłuchaniem. Przykładem może być np. syslog działający na porcie 514 udp. W takim przypadku, dobrym rozwiązaniem jest zastosowanie szyfrowanego tunelu (VPN). Na łamach naszej strony, omawiany był openvpn w wersji 1 i 2. Teraz przyszedł czas na IPsec-a. Omówię najprostszą z możliwych opcji, czy host-to-host. Do jego konfiguracji niezbędny jest pakiet „ipsec-tools”, który domyślnie powinien być zainstalowany. Jakby go nie było to wystarczy użyć komendy:
yum install ipsec-tools
Następnie edytujemy/tworzymy plik „/etc/sysconfig/network-scripts/ifcfg-ipsec0”. Jego zawartość powinna być następująca:
IKE_METHOD=PSK
TYPE=IPSEC
ONBOOT=no
DST=adres_ip_drugiego_końca_tunelu
AH_PROTO=none
Kolejnym krokiem powinna być edycja skryptu startowego „/etc/sysconfig/network-scripts/ifup-ipsec”. Powinniśmy zakomentować następujące linie:
if [ "$IKE_METHOD" = "PSK" ]; then
tmpfile=`mktemp /etc/racoon/psk.XXXXXX`
grep -v "^$DST" /etc/racoon/psk.txt > $tmpfile
echo "$DST $IKE_PSK" >> $tmpfile
mv -f $tmpfile /etc/racoon/psk.txt
fi
Dzięki powyższemu zabiegowi, nie zmieni się pre shared key w pliku „/etc/racoon/psk.txt”. Następnie edytujemy wspomniany plik i dopisujemy:
adres_ip_drugiego_końca_tunelu klucz_taki_sam_na_obu_końcach_tunelu
Następnie powtarzamy operację na drugim końcu tunelu. Ostatnim etapem jest wykonanie poniższego polecenie na obydwu maszynach:ifup ipsec0
Używając poniższego polecenia na obydwu serwerach
setkey -D
powinniśmy otrzymać coś podobnego:
IP-A IP-B
esp mode=transport spi=253560251(0x0f1d05bb) reqid=16420(0x00004024)
E: 3des-cbc 6709c3d5 681d801b 6d9791bd 1b092bfb 7c934a3f ec5834fe
A: hmac-sha1 e8ed200d e11cf05f 5f71625e 67112ff9 82926f6c
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Jul 22 23:25:02 2012 current: Jul 22 23:27:43 2012
diff: 161(s) hard: 3600(s) soft: 2880(s)
last: Jul 22 23:25:04 2012 hard: 0(s) soft: 0(s)
current: 27912(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 127 hard: 0 soft: 0
sadb_seq=1 pid=3922 refcnt=0
IP-B IP-A
esp mode=transport spi=107074164(0x0661d274) reqid=16421(0x00004025)
E: 3des-cbc fa1d4be7 05a4f3b4 f7941f07 7652871d 7926b8df 47b274da
A: hmac-sha1 26258b10 0fecc427 6a42c4bd 2c2ff1fe 4a69dd63
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Jul 22 23:25:02 2012 current: Jul 22 23:27:43 2012
diff: 161(s) hard: 3600(s) soft: 2880(s)
last: Jul 22 23:25:04 2012 hard: 0(s) soft: 0(s)
current: 7204(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 167 hard: 0 soft: 0
sadb_seq=0 pid=3922 refcnt=0
Najważniejsze, aby była komunikacja pomiędzy obydwoma końcami tunelu. Wykonujemy proste polecenie:ping ip_drugiego_konca
Jeśli powyższe polecenie zwraca prawidłowe wartości, to znaczy że wszystko działa. Ostatecznym testem może być uruchomienie narzędzia tcpdump np. na maszynie IP-A i „puszczenie pinga” z IP-B:
tcpdump host IP-A
Powinniśmy zobaczyć coś podobnego:
00:36:24.515915 IP-B > IP-A: ESP(spi=0x0f23dea5,seq=0x73f), length 100
00:36:25.515273 IP-A > IP-B: ESP(spi=0x044ee49e,seq=0x600), length 100
Nie widzimy oznaczenie ICMP, a zamiast niego ESP, co jest ostatecznym dowodem na to, iż pomiędzy omawianymi dwoma serwerami zestawiony jest tunel IPsec. Uprzedzam, że nie zawsze zestawienie tunelu IPsec idzie prosto i łatwo, czasem z niewiadomych przyczyn, serwery nie potrafię się „dogadać”.
Witam, jeszcze jedną drogą do zestawienia bezpiecznego tunelu IPSEC jest zawarte w CENTOS GUI wraz z narzędziem RACOON, które w semi-automatyczny sposób „zadba” o klucze możliwe tryby to sieć-sieć oraz opisany powyżej host-host. Pozdrawiam.