VPN w Linuxie

Konrad Madej

15 grudnia 2001


Spis rzeczy

Protokół IP Security

Wprowadzenie do IPSec

Protokół IPsec dostarcza mechanizmy pofuności oraz autentykacji w warstwie IP. Systemy implementujące ten protokół mają możliwość wyboru wymaganego bezpiecznego protokołu, określenia algorytmów, które mają być używane dla serwisów oraz kluczy kryptograficznych wymaganych do dostarczenia żądanych usług. IPsec może być użyty do ochrony jednej lub więcej ścieżki pomiędzy parą hostów, parą ,,bezpiecznych bram''1 lub pomiędzy bezpieczną bramą i hostem.

Zbiór usług bezpieczeństwa, które IPsec może dostarczać zawiera kontrole dostępu, bezpołączeniową integralność, uwierzytelnienie źródła danych, odrzucanie powtórzonych pakietów (forma częściowej integralności kolejności), poufność (szyfrowanie) oraz ograniczoną poufność strumienia ruchu. Ponieważ te usługi dostarczane są w warstwie IP, IPsec może być wykorzystany do zabezpieczenia dowolnego protokołu warstwy wyższej, bez jakichkolwiek zmian w nim, przykładowo TCP, UDP, BGP, HTTP itd.

DOI (Domain Of Interpretation) dodatkowo wspiera negocjację kompresji pakietów IP. Możliwość ta została stworzona poprzez obserwację, że gdy szyfrowanie jest wykorzystywane z IPsec, skutacznie uniemożliwia efektywną kompresję w niższych warstwach.

Jak działa IPsec

IPsec używa dwóch protokołów do zapewnienia bezpieczeństwa ruchu: Obydwa protokoły AH i ESP są mechanizmami do kontroli dostępu bazujących na zastosowaniu dystrybucji kluczy kryptograficznych oraz zarządzaniu strumienia danych.

Te protokoły mogą być stosowane razem lub razem, dostarczając wymaganego zbioru usług bezpieczeństwa dla protokołów IPv4 oraz IPv6. Każdy z tych protkołów obsługuje dwa tryby pracy:

IPsec pozwala użytkownikowi lub administratorowi systemu do kontroli szczegółowości oferowanych usług bezpieczeństwa. Przykładowo możemy stworzyć pojedynczy szyfrowany tunel do przenoszenia całego ruchu pomiędzy dwoma bramami albo oddzielny szyfrowany tunel może być stworzony dla każdego połączenia TCP pomiędzy dowolną parą hostów komunikujących się poprzez te bramy.

Ponieważ usuługi bezpieczeństwa oferowane przez IPsec, używają współdzielonych kluczy kryptograficznych, protkół ten zależy od odzielnego zbioru mechanizmów, których zadaniem jest dostarczenie i wymiana kluczy. Możliwe są dwa schematy wymiany kluczy: automatyczny i manualny. Do automatycznej dystrybucji kluczy mogą być stosowane różne mechanizmy: IKE (Internet Key Exchange) oparty na kryptosystemie klucza publicznego, Kerberos oparty na KDC, SKIP (Simple Key management for Internet Protocols), ISAKMP (Internet Security Association and Key Management Protocol) i inne. Najczęściej używanym protokołem wymiany kluczy jest IKE.

Ograniczenia IPsec

IPsec został zaprojektowany to zabezpieczania połączeń pomiędzy hostami. Ponieważ IPsec działa w warstwie IP, posiada pewne ograniczenia:

IPsec i VPN

Protokół IPsec bardzo dobrze nadaje się do tworzenia Wirtualnych Sieci Prywatnych (VPN 2). IPsec tworzy bezpieczny kanał poprzez niezaufną sieć. Sieci połączone poprzez ten tunel tworzą VPN. Mamy wiele możliwości instalacji IPsec:

Przedstawione powyżej techniki mogą być łączone w różny sposób. Można przykładowo używać autoryzacji dla wszystkich połączeń a szyfrowania tylko dla niektórych. IPsec dostarcza mechanizmów natomiast człowiek tworzy strategie. Dodatkowo IPsec może być, i często powinien być, łączony z protokołami bezpieczeństwa wyższych warstw.

Tryby pracy IPsec

IPsec dostarcza dwa podstawowe mechanizmy bezpieczeństwa: autoryzację oraz szyfrowanie. Szyfrowania dostarcza ,,podprotokół'' ESP 3 natomiast autoryzacji może dostarczać ESP lub AH 4. Typowymi rozwiązaniami są:

Standard dopuszcza inne warianty, ale nie są one szeroko stosowane:

Elementy kryptografii w IPsec

IPsec łączy w sobie różne techniki kryptograficzne. Wszystkie one są dobrze znane i przeanalizowane. Pierwszą zasadą przy tworzeniu IPsec jest niedodawanie nowych słabo zrozumiałych technik kryptograficznych.

Szyfrowanie

Szyfrowanie w protokole ESP odbywa się poprzez zastosowanie jednego z symetrycznych algorytmów. Obecnie dokumenty RFC mówią, że algorytm DES 5 musi być implementowany w IPsec, 3DES (Triple DES) powinien a wiele innych może (w tym Rijndeal zwycięzca konkursu AES 6).

HMAC

Autentyfikacja jest w IPsec wykonywana za pomocą funkcj HMAC (Hashed Message Authentication Code). Nie jest to prosta funkcja haszująca ale bardziej złożona operacja, kóra używa jakiegoś algorytmu haszującego (MD5 lub SHA) oraz klucza. Zwykła funkcja skrótu mówi nam, że dane nie zostały zmienione podczas transmisji bądź były zmienione i dla nich został wygenerowany nowy skrót. Gdy używamy HMAC mamy pewność, że wysyłający zna ponadto klucz. Atakujący zatem nie może wygenerować nowych danych i zregenerować skrót ponieważ nie zna klucza. Długość skrótu HMAC wynosi 96 bitów (pierwotny skrót jest obcinany do tej wielkości).

Diffie-Hellman

Algorytm uzgadniania klucza Diffiego-Hellmana pozwala dwóm stronom ustalić klucz w taki sposób, że nawet ten kto podsłuchuje całą konwersację nie może ustalić jaki to klucz. Protokół bazuje na problemie dyskretnego logarytmu i z tego powodu jest uważany za bezpieczny. Matematycy pracują nad tym problemem od wielu lat i nie udało im się przybliżyć do rozwiązania aczkolwiek również nie udowodniono, że rozwiązanie efektywne nie istnieje.

RSA

Algorytm RSA (Rivest, Shamir and Adleman) jest bardzo szeroko używanym kryptosystemem klucza publicznego. Bazuje on na trudności obliczeniowej faktoryzacji dużych liczb. W IPsec jest używany jako jedna z technik do uwierzytelniania bram (hostów) dla prowadzenia dalszej negocjacji klucza.

Zarządzenie kluczem

Protokół zarządzania (wymiany) klucza pełni w IPsec kluczową rolę. Jego zadaniem jest negocjacja odpowiednich parametrów połączenia, czasy życia, algorytmu który będzie w dalszej części używany. Cała negocjacja odbywa się poprzez wymiane pakietów UDP na porcie 500 pomiędzy bramkami.

Najczęściej używanym protokołem służącym do tego jest IKE 7. W dalszej części punktu skupie się na nim opisując zarządzanie kluczem. Protokół ten został zdefiniowany w dokumencie RFC 2409 ,,The Internet Key Exchange (IKE)''. IKE jest rezultatem długiego i złożonego procesu w którym kilka protokołów zostało zaproponowanych i przeanalizowanych. Łagodnie upraszczając, możem powiedzieć, że IKE łączy następujące protokoły:

Negocjacja IKE

Przed zestawieniem bezpiecznego kanału oraz przy wymianie kluczy odbywa sie negocjacja. Protokół IKE wyróżnia dwie fazy negocjacji:
  1. dwa hosty ustawiają dwukierunkowe bezpieczne powiązanie (ISAKMP SA), które będzie używane w drugiej fazie negocjacji
  2. używając bezpiecznego połączenia z fazy pierwszej są negocjowane właściwe połączenia IPsec (IPsec SAs). Połączenia te są jednokierunkowe (różne klucze są używane do każdego kierunku) i zawsze tworzone w parache, żeby zapewnić dwustronną komunikację. Pomiędzy dwomy bramami może zostać zdefiniowanych więcej niż jedna para takich połączeń.
Przed stworzeniem bezpiecznych powiązań bramy muszą móc siebie zautoryzować. Uwierzytelnienie partnera odbywa się na początku fazy pierwszej i może zostać wykonane w różny sposób. Dopuszczalne mechanizmy to m.in. dzielony klucz, RSA, certyfikaty X.509.

Protokół IKE jest bardzo elastyczny. Pozwala m.in. na negocjacje takich parametrów jak:

Linux i IPsec

FreeS/WAN

Założenia projektu

FreeS/WAN jest implementacją protokołu IPsec dostępną dla jądra Linux. Nie jest ona dystrybuowana wraz z główną linią jądra ze względu na ograniczenia na silną kryptografię w Stanach Zjednoczonych oraz wielu innych krajach. Projekt FreeS/WAN jest obecnie najpełniejszą i najbardziej zaawansowaną implementacją IPsec na platformę z jądrem Linux.

Głównym celem jaki przyświeca twórcą FreeS/WAN jest uczynienie Internetu bezpieczniejszym. Dzięki temu, że program jest rozprowadzany na zasadach licencji GNU 9 General Public License może być dowolnie używany i rozprowadzany wraz z kodem źródłowym. FreeS/WAN działa na wszystkich platformach na jakie dostępny jest Linux.

Zwiększenie bezpieczeństwa internetu ma być osiągnięte przede wszystkim przez rozszerzenie FreeS/WAN o możliwość tzw. oportunistycznego szyfrowania (ang. opportunistic encryption). Jest to bardzo ciekawa cecha, która pozwala zabezpieczyć komunikację między dowolnymi dwoma hostami w Internecie, bez wcześniejszego dzielenia klucza (ang. pre-shared secret) ani wcześniejszej wymiany kluczy publicznych. Uwierzytelnienie hosta odbywa się na podstawie informacji zawartych w bezpiecznym DNS (ang. Secure DNS). Niestety Secure DNS nie jest powszechnie używany obecnie być może dlatego, że ,,agencjom bezpieczeństwa'' zależy na możliwości monitorowania sieci.

Budowa FreeS/WAN

FreeS/WAN składa się z kilku części:
KLIPS
(KerneL IPsec Support) jest to łata na jądrą wprowadzająca niezbędne rozszerzenia dla IPsec w Linuksie:

PLUTO
jest demonem, który implementuje protokół IKE. Jego zadaniem jest:

ipsec
polecenie kontrolujące IPsec
/etc/ipsec.conf
plik konfiguracyjny dla FreeS/WAN w Linuksie. W nim można definiować większość parametrów kontrolujących zachowanie IPsec.

Instalacja FreeS/WAN

Aby zainstalować FreeS/WAN musimy posiadać źródła jądra i skompilować je z nałożonymi łatami rozszerzającymi możliwości o IPsec. Obecnie wspierane są wszystkie serie stabilne czyli 2.0.x, 2.2.x oraz 2.4.x. IPsec możemy wkompilować statycznie w jądro bądź jako ładowalne moduły. Po skompilowaniu nowego jądra instalujemy je następnie kompilujemy dodatkowe narzędzia w ,,przestrzeni użytkownika'': Wszystkie powyższe czynności mogą zostać wykonane automatycznie przy instalacji FreeS/WAN poprzez uruchomienie odpowiedniego ,,Makefile'a''.

Możliwości FreeS/WAN

Możliwości jakie zostały zaimplementowane we FreeS/WAN do wersji 1.9:

Inne implementacje IPsec

Istnieją inne implementacje IPsec dla jądra Linuksa, które są dystrybuowane bez ograniczeń:

Literatura

1
Dokumentacja do FreeS/WAN wersja 1.9

2
RFC 2411, ,,IP Security Document Roadmap''

3
RFC 2401, ,,Security Architecture for the Internet Protocol''

4
RFC 2764, ,,A Framework for IP Based Virtual Private Networks''

5
RFC 2409, ,,The Internet Key Exchange (IKE)''

6
RFC 2408, ,,Internet Security Association and Key Management Protocol (ISAKMP)''

7
RFC 2407, ,,The Internet IP Security Domain of Interpretation for ISAKMP''

8
RFC 2412, ,,Oakley key determination protocol''

About this document ...

VPN w Linuxie

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 -verbosity 0 -no_navigation -dir /home/konrad/public_html/elektron/mydocs/vpn /home/konrad/buda/mgr/mydocs/vpn.tex

The translation was initiated by on 2003-12-21


Footnotes

... bram''1
Wyrażenie bezpieczna brama jest używane do systemów pośredniczących, które implementują protokół IPsec. Mogą to być przykładowo rutery, ściany ogniowe itp.
... (VPN2
Virtual Private Networks
... ESP3
Encapsulated Security Payload
... AH4
Authentication Header
... DES5
Data Encryption Standard
... AES6
Advanced Encyprtion Stnadard
... IKE7
Internet Key Exchange
... DOI8
Domain of Interpretation
... GNU9
Gnu is Not Unix


2003-12-21