Seminární práce do ISA Vytvoření bezpečného spojení mezi

Transkript

Seminární práce do ISA Vytvoření bezpečného spojení mezi
Seminární práce do ISA
Vytvoření bezpečného spojení
mezi vzdálenými sítěmi pomocí IPsec
Zdeněk Ziegler
15. listopadu 2004
Obsah
1 Úvod
2
2 Použití VPN
3
3 Vytvoření VPN připojení
3.1 Vytvoření propojení . . . . . . . . . . . . . . . . . . . . . . .
3.2 Zabezpečení . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
5
4 Ukázka konfiguračních souborů
6
5 Závěr
7
1
1
Úvod
IPSec je množina rozšíření IP protokolu, která zajišťuje bezpečnost na síťové vrstvě. Výhoda práce spočívá v tom, že aplikace nemusí vědět že IPsec
existuje, aby ho mohly používat. Pracuje pro IPv4 i pro IPv6. V sadě IPsec
protokolů jsou tři hlavní protokoly:
• Authentication Header (AH) protokol
• Encapsulation Security payload (ESP) protokol.
AH protokol poskytuje integritu a autenticitu paketu, ale neposkytuje utajení. Do datagramu se vkládá mezi hlavičku IP a TCP/UDP segment, obsahuje kryptografické hashe dat a informace o identifikaci.
ESP protokol poskytuje autenticitu původu, integritu dat a utajení paketu.
Obrázek 1: Schéma protokolu ESP [1]
TCP/UDP segment a ESP trailer jsou šifrovány, utajení je prováděno pomocí DES-CBC kódování. Chrání data IP paketu proti narušení cizí osobou.
IPsec může být použit:
• pro přímé šifrování dat mezi dvěma hosty(Transportní mód), je určen
pro uživatelem iniciované VPN. Schéma je na obrázku 2.
• k vybudování virtuálních tunelů mezi sítěmi(Tunel mód), je určen pro
transparentní VPN, protože původní datagram je chráněn a zapouzdřen
do další vrstvy IP hlaviček. Schéme je na obrázku 3.
Obrázek 2: Transportní mód [3]
Zabezpečené spoje IPsec jsou definovány pomocí Security Assosiations
(SA). Každý SA je definován pro jednosměrný tok dat, většinou z jednoho
bodu k druhému, ponechávající proud dat rozlišitelný pomocí unikátního
identifikátoru. S veškerými daty tekoucími přes SA je nakládáno stejně.
2
Obrázek 3: Tunel mód [3]
Pro VPN není definován žádný standard který by říkal z čeho se VPN
skládá. VPN může být implementováno za použití různých technologií. Zde
bude uvedena implementace pomocí dvou FreeBSD bran do internetu.
2
Použití VPN
Chceme propojit dvě vzdálené sítě připojené do internetu pomocí VPN.
Ukázka jak vypadá tato situace je na obrázku 4.
Obrázek 4: Ukázka topologie sítě [2]
Podmínky propojení:
• Sítě by měly být připojeny k internetu přes bránu na které běží FreeBSD.
• Brána na každé síti má veřejnou IP adresu.
3
• Interní IP adresy sítí můžou být privátní i veřejné.
• IP adresy uvnitř sítí by neměly kolidovat.
Pro veřejné IP adresy bude v popisu použito písmen. Obě brány mají ve
vnitřní síti adresu .1 a obě sítě mají různé privátní IP adresy (192.168.1.x a
192.168.2.x). Všechny počítače v síti používají .1 adresu jako výchozí bránu.
Cílem je, aby se počítače v obou sítích ”viděly” jako kdyby byly v jedné
síti a aby komunikace byla šifrovaná.
3
Vytvoření VPN připojení
Má tři fáze:
• Vytvoření virtuálního propojení skrz internet a otestování, např. pomocí ping.
• Uplatnit zásady zabezpečení aby bylo zajištěno šifrování dat. Otestovat, např. pomocí tcpdump.
• Nakonfigurování dalšího softwaru na FreeBSD branách, aby se stroje s
Windows ”viděly” skrz VPN.
3.1
Vytvoření propojení
Buďme přihlášeni k bráně v první síti. Potřebujeme vytvořit tunel mezi
dvěma sítěmi. Dva vstupy do tunelu jsou IP adresy A.B.C.D a W.X.Y.Z.
a tunelu musíme sdělit adresy privátních IP adres které budou mít dovoleno
tunelem projít. Tento tunel se vytvoří pomocí rozhraní, nebo gif zařízení
ve FreeBSD. Rozhraní gif musí být nakonfigurováno se čtyřmi IP adresami,
dvěma pro veřejné IP adresy a dvěma pro privátní adresy. Podpora pro zařízení gif musí být zkompilována v kernelu FreeBSD, k tomu slouží následující
příkaz:
pseudo-device gif
Je třeba ho přidat do konfiguračních souborů kernelu na obou strojích, zkompilovat, nainstalovat a restartovat.
Tunelu se musí sdělit které jsou vnější IP adresy příkazem gifconfig, potom
i privátní adresy příkazem ifconfig:
gifconfig gif0 A.B.C.D. W.X.Y.Z.
ifconfig gif0 inet 192.168.1.1 192.168.2.1 netmask 0xffffffff
Na druhé bráně je třeba spustit ty samé příkazy, ale s opačnými IP adresami.
4
Potom můžeme spustit:
gifconfig gif0
pro zjištění konfigurace. Pomocí příkazu netstat -rn můžeme zkontrolovat
zda byl přidán záznam do routovací tabulky.
Dále je potřeba nastavit firewall. Jednodušší je nastavit veškerý provoz
přes VPN. Pokud používáte ipfw, příkaz by mohl vypadat takto:
ipfw add 1 allow ip from any to any via gif0
Nyní můžeme vyzkoušet příkaz ping z jedné brány na druhou. Ještě ale
nebude možné se dostat na vnitřní IP adresy. Brány sice ví jak se dostat
z jedné na druhou, ale neví jak se dostat do sítě která je za nimi. Musí se
přidat statické routování na obou branách(na druhé s adresami 192.168.1.x):
route add 192.168.2.0 192.168.2.1 netmask 0xffffff00
Takto jsme vytvořili virtuální síť, ale ještě není privátní.
3.2
Zabezpečení
K zabezpečení použijeme protokol IPsec. IPsec poskytuje mechanismus pro
dva hosty, aby se shodli na šifrovacím klíči a poté používali tento klíč k
šifrování dat mezi sebou.
Podpora IPsec a ESP musí být podporována kernelem:
options IPSEC
options IPSEC ESP
Jsou dvě možnosti jak nastavit security assosiations: ručně nebo pomocí
daemonů kteří implementují Internet Key Exchange protokol (IKE). Tato
možnost zde bude popsána.
Editování a zobrazování zásad zabezpečení je ovládáno příkazem setkey.
Je víc možností démonů na správu security associations ve FreeBSD. Zde
bude popsán daemon racoon. Racoon musí být spuštěn na obou branách.
Na každé straně musí být nastavena IP adresa druhé strany VPN a tajný
klíč(musí být stejný na obou branách). Konfigurace racoon je v
${PREFIX}/etc/racoon/psk.txt. Tento soubor musí mít nastavena práva
0600. Je třeba přidat řádek:
W.X.Y.Z. secret
Na druhé bráně:
A.B.C.D. secret
Dále bude potřeba přidat pravidla firewallu pro povolení provozu IKE, který
je přenášen UDP na ISAKMP(Internet Security Association Key Management Protocol) port:
ipfw add 1 allow udp from A.B.C.D. to W.X.Y.Z. isakmp
5
ipfw add 1 allow udp from W.X.Y.Z. to A.B.C.D. isakmp
Nyní je možné zkusit příkaz ping mezi branami. Spojení ještě není šifrované, ale racoon nastaví security associations mezi hosty. Jakmile je nastaví,
můžeme je zkontrolovat:
setkey -D
V této fázi jsou pakety mezi sítěmi zapouzdřeny do dalších paketů, ale
stále jsou viditelné(nešifrované) IP adresy zdroje a cíle. Pro zašifrování veškerého provozu mezi sítěmi je potřeba uplatnit tuto zásadu zabezpečení:
”Pokud paket odchází z A.B.C.D. a paket zapouzdřuje jiný paket a je určen
pro W.X.Y.Z., potom ho zašifruj pomocí potřebných security associations.”
A naopak.
Zásady zabezpečení se také nastavují pomocí setkey. Konfigurace pro
šifrování provozu z brány 1 na W.X.Y.Z. je:
spdadd A.B.C.D./32 W.X.Y.Z./32 ipencap -P out
ipsec esp/tunnel/A.B.C.D.-W.X.Y.Z./require;
Tyto příkazy vložíme do souboru, např. /etc/ipsec.conf a spustíme:
# setkey -f etcipsec.conf
Příkaz spdadd nastaví zásady zabezpečení pro dané IP adresy. Příkaz
ipencap říká kernelu, že tato zásada platí pouze pro pakety, které zapouzdřují
jiné pakety. Druhý řádek specifikuje způsob jakým budou pakety zašifrovány.
Musíme ještě přidat příkazy pro příchozí pakety:
spdadd A.B.C.D./32 W.X.Y.Z./32 ipencap -P in
ipsec esp/tunnel/A.B.C.D.-W.X.Y.Z./require;
Na druhé bráně jsou potřeba podobná pravidla.
Nakonec ještě potřebujeme přidat pravidla firewallu pro povolení ESP a
IPENCAP paketů tam a zpět. Tato pravidla přidáme na obě brány:
ipfw add 1 allow esp from A.B.C.D. to W.X.Y.Z.
ipfw add 1 allow esp from W.X.Y.Z. to A.B.C.D.
ipfw add 1 allow ipencap from A.B.C.D. to W.X.Y.Z.
ipfw add 1 allow ipencap from W.X.Y.Z. to A.B.C.D.
Nyní můžeme pomocí příkazů ping a tcpdump ověřit zabezpečení připojení.
4
Ukázka konfiguračních souborů
• Konfigurace obou kernelů: pseudo-device gif
• Editace souboru /etc/rc.conf na bráně 1(na bráně 2 s opačnými IP ad6
resami):
gifconfig gif0="A.B.C.D. W.X.Y.Z."
ifconfig gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff"
static routes="vpn"
route vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00"
• Editace souboru /etc/rc.firewall na obou branách:
ipfw add 1 allow ip from any to any via gif0
• Konfigurace kernelu pro podporu IPsec:
options IPSEC
options IPSEC ESP
• Instalace security/racoon, editace ${PREFIX}/etc/racoon/psk.txt na
obou branách, přidání IP adres a tajného klíče.
• Přidání nastavení do /etc/rc.conf na obou branách:
ipsec enable="YES"
ipsec file="etc/ipsec.conf"
• Vytvoření souboru /etc/ipsec.conf: spdadd A.B.C.D./32 W.X.Y.Z./32
ipencap -P out
ipsec esp/tunnel/A.B.C.D.-W.X.Y.Z./require;
spdadd A.B.C.D./32 W.X.Y.Z./32 ipencap -P in
ipsec esp/tunnel/A.B.C.D.-W.X.Y.Z./require;
Na druhé bráně je potřeba prohodit IP adresy.
• Přidání pravidel firewallu na povolení IKE, ESP a IPENCAP na obou
branách:
ipfw add 1 allow esp from A.B.C.D. to W.X.Y.Z.
ipfw add 1 allow esp from W.X.Y.Z. to A.B.C.D.
ipfw add 1 allow ipencap from A.B.C.D. to W.X.Y.Z.
ipfw add 1 allow ipencap from W.X.Y.Z. to A.B.C.D.
ipfw add 1 allow udp from A.B.C.D. to W.X.Y.Z. isakmp
ipfw add 1 allow udp from W.X.Y.Z. to A.B.C.D. isakmp
5
Závěr
Toto nastavení by mělo postačovat k fungování VPN propojení mezi dvěma
sítěmi. Počítače se chovají jako kdyby byly v jedné síti a zároveň je veškerá
komunikace mezi nimi šifrovaná.
7
Reference
[1] James F. Kurose and Keith W. Ross: Computer Networking: A TopDown Approach Featuring the Internet. Addison-Wesley, 2003.
[2] VPN over IPsec, dokument dostupný na URL:
http://www.freebsd.org/doc/en US.ISO88591/books/handbook/ipsec.html (listopad 2004)
[3] IPsec outline, dokument dostupný na URL:
http://people.freebsd.org/˜julian/IPSEC 4 Dummies.html
(listopad 2004).
[4] Manuálové stránky příkazu gif
[5] Manuálové stránky příkazu setkey
[6] IPsec
White
Paper,
dokument
dostupný
na
URL:
http://www.cisco.com/warp/public/cc/so/neso/sqso/eqso/ipsec wp.htm
(listopad 2004)
8