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