IPSec
Pojem IPsec(IP Security Protocol) definuje přidání bezpečnostního mechanismu do standardní IP vrstvy. Bezpečnostní mechanismy, které definuje IPsec jsou dva:
autentifikace
Definuje vlastní původ dat. Příjemce si muže ověřit, že právě přijatý IP paket pochází opravdu od toho, kdo paket vyslal.
kryptování
Všechno kromě vlastní hlavičky IP paketu je zakryptováno pomocí předem domluveného algoritmu. Příjemce musí umět tento paket dešifrovat. To znamená, že před vlastním přenosem dat se musí obě komunikující strany domluvit na způsobu šifrování dat.
Jak již bylo řečeno výše toto rozšíření je definováno na IP ůrovni. Je tedy nezávislé na protokolech vyšších vrstev. Aplikace nemusí podporovat žádné speciální komunikační metody, aby mohla komunikovat přes IPsec. Mohou se vytvářet šifrované tunely (VPN) nebo se může jenom šifrovat komunikace mezi dvěma počítači.
Rodina protokolů IPSec se skládá z těchto protokolů:
AH (Authentication Header)
Ověřování původu jednotlivých paketů.
AH v transportním módu v IPv4
AH v tunnel módu v IPv4
ESP (Encapsulating Security Payload)
Šifrování a ověřování původu dat.
ESP v transportním módu v IPv4
ESP v tunnel módu v IPv4
IKE (Internet Key Exchange)
Dohoda o parametrech spojení, výměna klíčů,...
FreeS/WAN implementuje protokoly ESP a AH na úrovni jádra částí nazvanou KLIPS a protokol IKE, nastavení směrování a další podpůrné služby prostřednictvím démonu Pluto.
Zde uvádíme postup instalace na strojích ve školní laboratoři (postup je shodný pro oba stroje):
Nejprve jsme aktualizovali indexy zdrojů pro instalaci balíčků příkazem apt-get update
Instalace záplaty (patche) na OS Linux příkazem: apt-get install kernel-patch-freeswan
Instalace zdrojů jádra příslušné verze (v našem případě 2.4.18): apt-get install kernel-source-2.4.18
Rozbalení: cd /usr/src/
tar xvfj kernel-source-2.4.18.tar.bz2
K vytvoření balíčku jsme museli doinstalovat nástroj make-kpkg:
apt-get install kernel-package
Přeložení a vytvoření balíčku: cd /usr/src/kernel-source-2.4.18
PATCH_THE_KERNEL=YES make-kpkg --config=menuconfig --revision=ipsec1 kernel_image
Instalace vytvořeného jádra dpkg -i /usr/src/kernel-image-2.4.18-ipsec1.deb
Instalace obslužných programů, konfiguračnních souborů, ... apt-get install freeswan
Zvolili jsme automatické vygenerování klíčů „Plain RSA“ čímž mi byly jednotlivé komponenty klíče uloženy přehledně textově v šestnáctkové soustavě do souboru /etc/ipsec.secrets
.
Na závěr jsme upravili nastavení sítě v souboru /etc/network/options:
ip_forward=no
spoofprotect=no
syncookies=no
Úplně posledním krokem je nastavení firewallu pomocí Povolení přístupu protokolu UDP na port 500 iptables
.iptables -A INPUT -p UDP -i ipsec0 --dport 500 -j ACCEPT
Povolení protokolu 50 (ESP) a 51 (AH) iptables -A INPUT -p 50 -j ACCEPT
iptables -A OUTPUT -p 50 -j ACCEPT
iptables -A INPUT -p 51 -j ACCEPT
iptables -A OUTPUT -p 51 -j ACCEPT
Spojení mezi dvěma počítači se vytvoří přidáním sekce conn název_spojení
do souboru /etc/ipsec.conf
, ve které se pomocí parametrů a jejich hodnot nastaví vlastnosti spojení. Spojení mezi počítači s adresami 158.196.135.21 a 158.196.135.22 se vytvoří následovně: conn MicPet
left=158.196.135.21
right=158.196.135.22
auth=ah
auto=route
leftrsasigkey=0sAQN1+...
rightrsasigkey=0sAQNgT...
Parametry left
a right
definují IP adresy levé a pravé strany spojení.
Parametr auth
říká, jestli se má použít protokol AH.
Parametr auto
ovlivňuje, co se s tímto spojením bude dít při bootování systému. V tomto případě se spojení aktivuje. Parametry leftrsasigkey
a rightrsasigkey
jsou veřejné klíče levé a pravé strany spojení.
Výsledkem našeho snažení je bezpečná komunikace mezi dvěma stroji (konkrétně 158.196.135.22 a 158.196.135.21) přes rozhraní „ipsec0“. Používá se protokol ESP, autentifikaci zajišťuje hlavička AH. Na obou stranách (levé i pravé) je soubor /etc/ipsec.conf
, který obsahuje konfiguraci spojení conn
. Ta je shodná pro obě strany, obsahuje mj. ip identifikace a veřejné klíče. Klíče jsme „nakopírovali“ manuálně ze souborů /etc/ipsec.secret
.
Potom jsme vyzkoušeli připojit ještě jeden počítač „.17“ (158.196.135.21 a 158.196.135.17). Postup byl stejný, ale na „.21“ jsou nyní v ipsec.conf
nakonfigurována dvě spojení conn
. (Pozn. Kdybychom chtěli tímto způsobem propojit n strojů každý s každým, znamenalo by to n(n-1)/2 konfigurací na každém z nich)
Kryptovaný přenos dat jsme otestovali zachycením paketů programem Ethereal na „cizím“ stroji, zatímco jsme přenášeli pomocí protokolu ftp textový soubor. Byly zachyceny pouze ESP pakety, které v sobě samozřejmě obsahují i datovou část ftp paketů, ovšem v zašifrované podobě.
Výstup programu Ethereal, sledujícího rozhraní ipsec0
(zachycen ftp přenos), AH - autentifikace, ESP - šifrovaná data