VPN w Linuxie
Konrad Madej
15 grudnia 2001
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.
IPsec używa dwóch protokołów do zapewnienia bezpieczeństwa ruchu:
- AH (Authentication Header) dostarcza bezpołączeniowej integralności,
uwierzytalniania źródła danych oraz mechanizmy odrzucające powtórzone pakiety.
- ESP (Encapsulating Security Payload) jest protokołem dostarczającym
poufności (szyfrowania) oraz ograniczoną poufność strumienia ruchu.
Może dodatkowo dostarczać te same usługi co protokół AH.
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:
- tryb transportowy (ang. transport mode) sotsowany do zabezpieczania
przede wszystkim protokołów warstw wyższych
- tryb tunelowania (ang. tunnel mode) stosowany do przenoszenia (tunelowania)
(innych) pakietów IP
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.
IPsec został zaprojektowany to zabezpieczania połączeń pomiędzy hostami.
Ponieważ IPsec działa w warstwie IP, posiada pewne ograniczenia:
- IPsec nie zabezpiecza połączeń end-to-end tak jak to robią protokoły
na wyższych warstwach. IPsec szyfruje połączenie IP pomiędzy dwoma maszynami,
co nie jest równoważne szyfrowaniu wiadomości pomiędzy użytkownikami bądź
aplikacjami.
- IPsec autoryzuje maszyny a nie użytkowników. Mechanizmy silnej autoryzacji
służą do kontrolowania, jakie wiadomości pochodzą z jakich maszyn. Jeżeli jest
potrzebna kontrola dostępu użytkowników należy użyć innych mechanizmów (warstw
wyższych), które mogą być łączone z IPsec.
- IPsec nie potrafi zapobiegać atakom DoS (Denial of Service) aczkolwiek
może skutecznie utrudniać możliwość ich zajścia.
- IPsec nie potrafi powstrzymać analizy ruchu. Analiza ruchu jest próbą
wyciągnięcia z wiadomości jak najwięcej informacji bez oglądania jej treści.
W przypadku IPsec analiza ruchu polega na oglądaniu niezaszyfrowanych
nagłówków pakietów, adresów bramek (źródłowej i docelowej), wielkości pakietu,
częstości itp. Z takich danych można wyciągnąć dużo informacji. IPsec nie potrafi
zapobiegać analizie ruchu ale dzięki stosowaniu różnych technik można
ją skutecznie utrudnić.
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:
- instalujemy IPsec na ścianach ogniowych (ang. firewalls) łączących sieci
lokalne z internetem. Takie rozwiązanie pozwala na stworzenie VPN łączących
wiele oddziałów firmy zlokalizowanych w różnych miejscach i zabezpiecza przed
każdym spoza sieci lokalnych tejże firmy.
- instalujemy IPsec na serwerach oddziałów firmy. W tym przypadku cały ruch
w korporacji jest szyfrowany. Chroni to ruch przed wszystkimi za wyjątkiem
maszyn komunikujących się.
- w innym przypadku może nam nie zależeć na poufności ale na kontroli dostępu
do danych. Możemy wtedy użyć autoryzacji pakietów opartych na IPsec bez
"włączaniazyfrowania.
- możemy z każdej maszyny w sieci zrobić brame IPsec dla samej siebie.
Wtedy wszystkie połączenia są szyfrowane. Dane są chronione przed wszystkimi
poza maszynami do których należy połączenie.
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.
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ą:
- ESP używany do szyfrowania i autoryzacji
- AH używany gdy wymagana jest sama autoryzacja
Standard dopuszcza inne warianty, ale nie są one szeroko stosowane:
- szyfrowanie ESP bez autoryzacji. Takie użycie jest niebezpieczne i nie
należy go używać. Zostało znalezionych wile możliwości ataku na taki
strumień danych.
- szyfrowanie ESP i autoryzacja AH. Takie rozwiązanie jest dużo bardziej
obciążające niż użycie autoryzacji z protkołu ESP. Wyjątkiem, gdy warto
stosować taki wariant, może być przypadek gdy w naszej sieci autoryzacja AH
jest standardem.
- podwójna autoryzacja przez ESP i AH może być używana gdy takie są
wymagania bezpieczeństwa
- autoryzacja ESP bez szyfrowania
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 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).
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).
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.
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.
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:
- ISAKMP (Internet Security Association and Key Management Protocol)
zdefiniowany w RFC 2048 zarządza negocjacją połączenia oraz definiuje
bezpieczne powiązania (ang. Security Associations) co oznacza opisanie
parametrów połączenia.
- IPSEC DOI 8 for ISAKMP zdefionwane
w RFC 2407
- Oakley key determination protocol zdefiniowany w RFC 2412 tworzy klucze
używane w algorytmie uzgadniania Diffiego-Hellmana.
Przed zestawieniem bezpiecznego kanału oraz przy wymianie kluczy odbywa sie
negocjacja. Protokół IKE wyróżnia dwie fazy negocjacji:
- dwa hosty ustawiają dwukierunkowe bezpieczne powiązanie (ISAKMP SA), które
będzie używane w drugiej fazie negocjacji
- 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:
- czas życia SA (bezpiecznego powiązania) przed kolejną wymianą kluczy
- algorytm używany do danego powiązania
- algorytm autentyfikacji
- wybór grupy dla algorytmu uzgadniania klucza Diffiego-Hellmana
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.
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:
- szyfrowanie
- funkcje uwierzytelniające
- tworzenie ESP i nagłówków AH wychodzących pakietów
- interpretacja nagłówków przychodzących pakietów
- PLUTO
- jest demonem, który implementuje protokół IKE. Jego zadaniem
jest:
- obsługiwanie negocjacji
- autoryzacja hostów
- tworzenie bezpiecznych powiązań (SAs) IPsec i przekazanie danych
wymaganych do przejęcia ich przez KLIPS
- dostrojenie konfiguracji rutingu i firewall do spełnienia wymagań
IPsec
- 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.
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'':
- program
ipsec (domyślnie) w /usr/local/sbin
- inne programy (domyślnie) w
/usr/local/lib/ipsec
- strony podręcznika systemowego (ang. manual) w
/usr/local/man
- tworzymy plik konfiguracyjny, kontrolujący FreeS/WAN
/etc/ipsec.conf
- tworzymy parę kluczy RSA publiczny/prywatny dla naszego systemu i
umieszamy w
/etc/ipsec.secrets. Oczywiście możemy tam też umieścić
zamiast kluczy RSA dzielony sekret (ang. shared secret) ale ta metoda
autoryzacji jest niepolecana jako mało bezpieczna.
- instalujemy skrypty startowe uruchamiające IPsec przy starcie systemu
Wszystkie powyższe czynności mogą zostać wykonane automatycznie przy instalacji
FreeS/WAN poprzez uruchomienie odpowiedniego ,,Makefile'a''.
Możliwości jakie zostały zaimplementowane we FreeS/WAN do wersji 1.9:
- mechanizmy zarządzania kluczem
- manualna - przy pomocy kluczy umieszczanych w
/etc/ipsec.conf
- automatyczna - klucze są ustalane w czasie negocjacji i odnawiane
po określonym czasie. Automatycznym zarządzaniem kluczem zajmuje sie
demon PLUTO, który implementuje protokół IKE.
- metody autoryzacji używane przez protokół IKE
- dzielone sekrety (and. shared secrets)
- sygnatury RSA
- szukanie kluczy RSA w DNS (w pełni bezpieczne dopiero z Secure DNS)
- grupy dla negocjacji kluczy Diffiego-Hellmana - zaimplementowane
- grupa 2 (1024 bity)
- grupa 5 (1536 bity)
- grupa 1 nie jest implementowana jako niebezpieczna mimo, że
wymagana przez RFC
- algorytmy szyfrowania
- zerowe szyfrowanie (ang. null encryption) używane gdy ESP ma spełniać
rolę tylko uwierzytelniającą
- 3DES
- DES jest tylko zawarty w kodach źródłowych (potrzebny do implementacji
potrójnego DES) ale niedostępny z poziomu użytkownika (mimo, że dokumenty
RFC wymagają go) ponieważ jest niebezpieczny
- algorytmy używane do autentyfikacji
- MD5 (Message Digest Algorithm)
- SHA (Secure Hash Algorithm)
- algorytmy kompresji
Istnieją inne implementacje IPsec dla jądra Linuksa, które są dystrybuowane
bez ograniczeń:
- pipsecd (
http://perso.enst.fr/~beyssac/pipsec/) jest ,,lekką''
implementacją protokołu IPsec, która nie wymaga rekompilacji jądara.
Korzysta z bilbiotek OpenSSL, z których czerpie algorytmy kryptograficzne.
Wspiera tylko tryb tunelowania.
- ipnsec (
ftp://ftp.eunet.cz/icz/ipnsec/) oparty na implementacji
z OpenBSD i używający do zarządzania kluczami eksperymentalnego protokołu
Photuris opisanego w RFC 2522 i 2523.
- 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''
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