Laboratorium nr 6 VPN i PKI Wprowadzenie Sieć VPN (Virtual Private Network) to sieć komputerowa, która pomimo że używa publicznej infrastruktury (np. sieć Internet), jest w stanie zapewnić wysoki poziom bezpieczeństwa porównywalny do sieci prywatnej. Przede wszystkim, sieci VPN zapewniają poufność i integralność przesyłanych danych. Najbardziej znanym rozwiązaniem jest sieć VPN oparta na IPsec. Protokół IPsec, ma na celu ochronę informacji przesyłanych w sieciach komputerowych. Jest on blisko związany z warstwą sieci w modelu ISO/OSI, czyli protokołem IP. Zapewnia zarówno poufność jak i integralność danych. W celu ich realizacji, zdefiniowano dwa rodzaje nagłówków: AH (Authentication Header) oraz ESP (Encapsulation Security Payload). Protokół AH zapewnia ochronę integralności zarówno dla przesyłanych danych, jak i części nagłówka IP. Ochroną obejmowane są te pola nagłówka, które nie ulegają zmianie podczas wędrówki przez sieć (np. adresy, identyfikator). Aby zapewnić ochronę informacji, wykorzystywane są takie funkcje skrótu jak MD-5, SHA-1 lub RIPEMD-160. Protokół ESP jest bardziej złożony niż AH. Zapewnia, obok ochrony integralności danych, także ich szyfrowanie. Integralność sprawdzana jest tylko dla danych użytecznych. Szyfrowanie natomiast może odbywać się przy wykorzystaniu algorytmów, takich jak: DES, 3DES (Triple DES) czy AES. Algorytmy funkcji skrótu są takie same jak w przypadku AH.
Protokół IPsec może pracować w dwóch trybach. Oba z nich przedstawione zostały na rysunku. Pierwszym, najprostszym jest tzw. tryb transportowy. Pomiędzy nagłówkiem IP a protokołem wyższej warstwy (transportowej), dodany został nagłówek IPsec. Chroni on zarówno dane użyteczne jak i nagłówki wyższych warstw. Drugi tryb zapewnia tunelowanie protokołu IP. Dane użyteczne wraz ze wszystkimi nagłówkami są szyfrowane, a protokół IPsec buduje nowy nagłówek IP, w którym umieszcza adresy pośrednich ruterów na trasie między nadawcą a odbiorcą. Dzięki temu, że wewnętrzny pakiet jest szyfrowany w całości, bierny obserwator nie ma możliwości stwierdzenia, między jakimi jednostkami zachodzi komunikacja. Sieci VPN można również budować korzystając z asymetrycznych algorytmów szyfrujących. Na takim sposobie ochrony danych bazuje protokół SSL (Secure Socket Layer). Aby móc zbudować sieć SSL VPN należy stworzyć centrum certyfikacji wraz z całą infrastrukturą klucza publicznego. Przed wysłaniem, dane będą szyfrowane za pomocą kluczy publicznych znajdujących się w odpowiednich certyfikatach. Podczas zajęć laboratoryjnych, do tworzenia testowej sieci VPN opartej o PKI, zostanie użyty program OpenVPN. Przygotowanie 1. Proszę uruchomić komputer w systemie Linux. Następnie zainstalować OpenVPN przy użyciu komend: sudo apt-get update sudo apt-get install openvpn easy-rsa Następnie skopiować katalog easy-rsa do /etc/openvpn i stworzyć katalog keys : sudo su cp -r /usr/share/easy-rsa/ /etc/openvpn mkdir /etc/openvpn/easy-rsa/keys 2. Tworzymy centrum certyfikacyjne za pomocą komend: cd /etc/openvpn/easy-rsa../vars./clean-all./build-ca Można wcześniej zmienić dane w pliku vars, aby ustawić w odpowiedni sposób wszystkie parametry: KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG i KEY_EMAIL (proszę zwrócić uwagę na fakt że w tym pliku jest podana również długość klucza).
3. Generowanie certyfikatów i kluczy dla serwera (server) i klientów (client1, client2):./build-key-server server./build-key client1./build-key client2 Proszę zapoznać się ze wszystkimi polami przykładowego certyfikatu 4. Definicja parametrów do ustalania kluczy za pomocą komendy: openssl dhparam -out /etc/openvpn/dh1024.pem 1024 Lista wygenerowanych plików znajduje się w poniższej tabeli. Część z plików należy dystrybuować do klientów. Które z plików należy dystrybuować do klientów, a które nie możemy? Dlaczego? Filename Needed By Purpose Secret ca.crt server + all clients Root CA certificate NO ca.key key signing machine only Root CA key YES dh{n}.pem server only Diffie Hellman parameters NO server.crt server only Server Certificate NO server.key server only Server Key YES client1.crt client1 only Client1 Certificate NO client1.key client1 only Client1 Key YES client2.crt client2 only Client2 Certificate NO client2.key client2 only Client2 Key YES client3.crt client3 only Client3 Certificate NO client3.key client3 only Client3 Key YES
Połączenie VPN typu klient-serwer (pomiędzy różnymi komputerami) 5. Kopiujemy pliki związane z serwerem do katalogu /etc/openvpn: cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn Następnie, ściągamy ze strony przedmiotu gotowy plik z konfiguracją serwera server.ovpn (plik kopiujemy do katalogu /etc/openvpn) i uruchamiamy serwer komendą: openvpn --config server.ovpn Klient (na innym komputerze) dostaje od serwera pliki: client1.crt, client1.key oraz ca.crt i umieszcza je w katalogu /etc/openvpn (oczywiście wcześniej należy zainstalować środowisko openvpn używając komend z punktu 1). Następnie, ściąga ze strony przedmiotu gotowy plik z konfiguracją klienta client.ovpn (plik również kopiuje do katalogu /etc/openvpn) i uruchamia połączenie komendą: openvpn --config client.ovpn (proszę pamiętać o wpisaniu poprawnego adresu IP serwera adres z podsieci 10.64.0.0 oraz upewnić się że w pliku konfiguracyjnym znajdują się odpowiednie nazwy plików z certyfikatami i kluczem prywatnym klienta) W razie problemów z połączeniem proszę wyłączyć firewall komendą: ufw disable 6. Jeśli udało się nawiązać połączenie, proszę odwołać certyfikat jednego klienta - można to zrobić za pomocą listy unieważnionych certyfikatów CRL (Certificate Revocation List), która będzie sprawdzana podczas każdorazowej próby łączenia klienta z serwerem. Jeśli na liście CRL znajduje się certyfikat klienta połączenie z tym klientem nie będzie ustalone. Przykładowo, aby unieważnić certyfikat dla klienta nr 2, należy wygenerować listę CRL za pomocą komend:../vars./revoke-full client2 Komendy te generują plik crl.pem który należy skopiować do folderu, w którym uruchomiony jest serwer. Następnie w pliku konfiguracyjnym serwera należy dodać linię: crl-verify crl.pem tak aby serwer sprawdzał listę odwołanych certyfikatów przy każdorazowej weryfikacji klientów. Na koniec należy uruchomić serwer (lub zrestartować jeśli już jest uruchomiony) i spróbować podłączyć do niego klienta nr 2.
7. Możliwości konfiguracyjne serwera OpenVPN są bardzo bogate. Proszę zapoznać się z opcjami zawartymi w pliku server.ovpn W szczególności proszę: ustawić inny algorytm szyfrowania danych (np. 3DES) skonfigurować serwer tak aby nasłuchiwał zarówno na porcie UDP jak i TCP (wpis: proto tcp ) sprawdzić informacje dotyczące połączonych klientów (aktualizowane co minutę) w pliku z logami: openvpn-status.log 8. Kolejne ćwiczenie będzie polegało na zarządzanie siecią VPN za pomocą specjalnego interfejsu. Proszę dodać wpis: management localhost 7505 Następnie połączyć się z interfejsem np. poprzez telnet: telnet localhost 7505 Proszę sprawdzić jakie informacje pojawiają się w przypadku łączenia nowego klienta z serwerem. 9. W utworzonej sieci klienci mogą się komunikować jedynie z serwerem. Proszę umożliwić komunikację między klientami sieci VPN (opcja: route) 10. Proszę przetestować alternatywy sposób uwierzytelniania klientów, np. za pomocą haseł (wpisy: client-cert-not-required i username-as-commonname ) Tunel VPN pomiędzy dwoma komputerami 11. Proszę utworzyć tunel VPN pomiędzy dwoma komputerami przy użyciu pliku tunel.ovpn (do ściągnięcia ze strony przedmiotu). Obie osoby muszą wpisać odpowiednie adresy IP w pliku konfiguracyjnym i wygenerować współdzielony klucz za pomocą komendy: openvpn --genkey --secret static.key Współdzielony klucz static.key należy dystrybuować do obu jednostek które chcą utworzyć bezpieczny tunel (proszę zwrócić uwagę na format zapisu danych w tym pliku). Następnie uruchamiamy połączenie. Czy współdzielony klucz static.key powinien być tajny czy jawny? Czym rożni się ten sposób łączenia komputerów w porównaniu z poprzednim (klientserwer)? Jaki algorytm szyfrujący jest użyty w celu zabezpieczenia transmisji? Proszę podać długość klucza i rodzaj trybu szyfrowania. 12. Bezpieczeństwo transmisji można sprawdzić na wiele sposobów, np. wysyłając pakiety ping na adresy IP, ściągając udostępniony plik tekstowy, itd. W celu analizy ruchu można użyć programu do analizy pakietów (Ethereal, WireShark, itp.). Należy upewnić się czy program analizuje pakiety na odpowiedniej karcie sieciowej. Aby zobaczyć różnice, badania należy przeprowadzić dla połączenia VPN oraz bez niego.
Sprawozdanie W sprawozdaniu z laboratorium nr 6 należy opisać wykonane ćwiczenia i ich wyniki. W szczególności należy odpowiedzieć na zadane pytania. Dodatkowo we wnioskach należy wyjaśnić, dlaczego Infrastruktura Klucza Publicznego (PKI) jest w stanie zapewnić bezpieczeństwo połączeń VPN typu klient-serwer.