Powrót do bloga

Konfiguracja OpenVPN na Ubuntu 18.04

Konfiguracja OpenVPN na Ubuntu 18.04

Wprowadzenie

Czy chcesz bezpiecznie korzystać z Internetu ze swojego smartfona lub laptopa, gdy łączysz się z niezaufaną siecią (np. Wi-Fi w hotelu lub kawiarni)? Na szczęście istnieje sposób, aby spełnić Twoje życzenia. Możesz bezpiecznie połączyć się z niezaufaną siecią tak, jakbyś był w sieci prywatnej, korzystając z Wirtualnej Sieci Prywatnej (VPN).

Co to jest VPN?

VPN to skrót od Virtual Private Network (Wirtualna Sieć Prywatna). Oferuje możliwość otwarcia bezpiecznego tunelu do zaufanego serwera. Wszystkie żądania są następnie wysyłane i odbierane za pośrednictwem tego serwera. Zaletą jest zabezpieczenie dostępu i transakcji podczas korzystania z sieci publicznych, takich jak bezpłatne Wi-Fi w hotelu.

Przez VPN wszystkie dane są szyfrowane i przetwarzane za pośrednictwem serwera. Urządzenia pośredniczące, takie jak routery firm trzecich i tym podobne, nie mają możliwości przekierowania ruchu do niepożądanych miejsc docelowych. Ponadto po pomyślnym nawiązaniu połączenia stajesz się częścią sieci serwera. Inne serwery, komputery lub urządzenia, takie jak drukarki, które normalnie byłyby dostępne tylko w sieci lokalnej serwera, mogą być teraz również osiągalne przez tunel VPN. Ponieważ jednak nie wszystkie dane muszą być przesyłane przez szyfrowany tunel, możliwe jest skonfigurowanie klienta VPN tak, aby tylko określona część żądań była przesyłana przez tunel VPN. Reszta ruchu jest przetwarzana normalnie przez Internet.

W tym samouczku przeprowadzimy Cię przez kroki konfiguracji serwera OpenVPN na systemie Ubuntu 18.04.

Wymagania

Musisz mieć dostęp do serwera Ubuntu 18.04, aby hostować swoją OpenVPN usługę, aby ukończyć ten samouczek. Przed rozpoczęciem tego przewodnika musisz również skonfigurować użytkownika innego niż root z uprawnieniami sudo. Możesz łatwo zainstalować swój serwer, postępując zgodnie z naszym samouczkiem dotyczącym konfiguracji serwera Ubuntu.

Dodatkowo będziesz potrzebować osobnego komputera, który będzie działał jako urząd certyfikacji (CA). Technicznie możesz użyć swojego serwera OpenVPN lub lokalnego komputera jako urzędu certyfikacji. Nie zalecamy jednak tego rozwiązania, ponieważ narazi ono Twój VPN na luki w zabezpieczeniach. Zgodnie z oficjalną dokumentacją OpenVPN, urząd certyfikacji należy umieścić na osobnym komputerze przeznaczonym do importowania i podpisywania żądań certyfikatów. Zakładamy więc, że Twój urząd certyfikacji znajduje się na osobnym serwerze Ubuntu 18.04, który również posiada użytkownika innego niż root z uprawnieniami sudo oraz podstawową zaporę sieciową (firewall). W tym przewodniku wszystkie kroki instalacji i konfiguracji będą tak proste, jak to tylko możliwe dla każdej z instalacji. Możesz również zapoznać się z naszym samouczkiem dotyczącym konfiguracji serwera OpenVPN w Dockerze.

Krok 1 – Instalacja OpenVPN i EasyRSA

Najpierw zaktualizuj indeks pakietów serwera VPN i zainstaluj OpenVPN. Możesz zainstalować OpenVPN za pomocą apt, ponieważ jest on dostępny w domyślnych repozytoriach Ubuntu:

Krok 2: Utworzenie urzędu certyfikacji

Utwórz prosty urząd certyfikacji (CA), aby wystawiać zaufane certyfikaty dla serwera OpenVPN. Aby to zrobić, pobierz najnowszą wersję EasyRSA zarówno na maszynę CA, jak i na serwer OpenVPN za pomocą wget. Aby pobrać najnowszą wersję, przejdź do strony wydań (Releases) oficjalnego projektu EasyRSA na GitHubie, skopiuj link do pobrania pliku z rozszerzeniem .tgz i wklej go do następującego polecenia:

Następnie rozpakuj archiwum tarball:

 OpenVPN EasyRSA software

W tym momencie całe wymagane oprogramowanie zostało pomyślnie zainstalowane na komputerze CA i serwerze.

Krok 3 – Konfiguracja zmiennych EasyRSA i budowa CA

EasyRSA zawiera plik konfiguracyjny, który można edytować, aby zdefiniować szereg zmiennych dla urzędu certyfikacji (CA) za pomocą tego polecenia:

W katalogu znajduje się plik o nazwie vars.example. Utwórz kopię tego pliku i nazwij ją vars bez rozszerzenia pliku:

Użyj preferowanego edytora tekstu, aby otworzyć ten nowy plik:

Następnie znajdź ustawienia, które określają domyślne wartości pól dla nowych certyfikatów. Będzie to wyglądać podobnie do tego:

Zaktualizuj te zmienne według własnego uznania, jak pokazano poniżej:

Zapisz i zamknij plik, gdy będziesz gotowy. Następnym krokiem jest wywołanie skryptu easyrsa i uruchomienie go z opcją init-pki w celu zainicjowania infrastruktury klucza publicznego na serwerze CA:

easyrsa init-pki

Następnie uruchom polecenie build-ca z opcją nopass, aby nie być pytanym o hasło za każdym razem, gdy wchodzisz w interakcję ze swoim CA:

W danych wyjściowych zostaniesz poproszony o potwierdzenie nazwy powszechnej (common name) dla swojego CA:

 OpenVPN build-ca

W ten sposób Twoje CA jest gotowe i może zacząć podpisywać żądania certyfikatów.

Krok 4 – Generowanie certyfikatu serwera, klucza i plików szyfrowania

Gdy CA będzie gotowe, możesz wygenerować klucz prywatny i żądanie certyfikatu z serwera, a następnie wysłać je do CA w celu podpisania poprzez utworzenie wymaganego certyfikatu. Najpierw przejdź do katalogu EasyRSA na serwerze OpenVPN:

Stamtąd uruchom skrypt easyrsa z opcją init-pki. Chociaż to polecenie zostało już uruchomione na komputerze CA, tutaj również musi zostać uruchomione. Wynika to z faktu, że katalogi PKI serwera i CA są różne:

Następnie wywołaj skrypt easyrsa ponownie, tym razem z opcją gen-req, a po niej podaj nazwę ogólną komputera:

Spowoduje to utworzenie klucza prywatnego dla serwera oraz pliku żądania certyfikatu o nazwie server.req. Skopiuj klucz serwera do katalogu /etc/openvpn/:

Prześlij plik server.req na komputer CA za pomocą bezpiecznej metody (takiej jak SCP w poniższym przykładzie):

Następnie przejdź do katalogu EasyRSA na komputerze CA:

Użyj ponownie skryptu easyrsa, aby zaimportować plik server.req i dodaj jego nazwę powszechną (common name) po ścieżce pliku:

Następnie podpisz żądanie, uruchamiając skrypt easyrsa z opcją sign-req, a po niej podaj typ żądania i nazwę powszechną (common name). W przypadku żądania certyfikatu serwera OpenVPN upewnij się, że używasz typu żądania server:

Wynik działania programu poprosi Cię o zweryfikowanie, czy żądanie pochodzi z zaufanego źródła. Wpisz yes i naciśnij Enter, aby potwierdzić. Sprawdź poniższe szczegóły, aby upewnić się, że są poprawne. Pamiętaj, że to żądanie nie zostało jeszcze zweryfikowane hasłem.

Zażądaj podmiotu i podpisz go jako certyfikat serwera na 3650 dni:

 OpenVPN sign certificate for server

Jeśli zaszyfrowałeś klucz CA, w tym momencie zostaniesz poproszony o hasło. Następnie użyj bezpiecznej metody, aby przesłać podpisany certyfikat z powrotem na swój serwer VPN:

Prześlij plik ca.rt na serwer przed wylogowaniem się z komputera CA:

Następnie zaloguj się ponownie na swój serwer OpenVPN i skopiuj pliki server.crt oraz ca.crt do katalogu /etc/openvpn/:

Następnie przejdź do swojego katalogu EasyRSA:

Wprowadź następujący kod, aby utworzyć silny klucz Diffie-Hellmana, którego możesz użyć podczas wymiany kluczy:

Po zakończeniu wygeneruj podpis HMAC, aby usprawnić funkcję sprawdzania stanu TLS serwera:

Po zakończeniu wykonywania polecenia skopiuj dwa nowe pliki do katalogu / etc / openvpn /:

W ten sposób generowane są wszystkie certyfikaty i pliki kluczy wymagane przez serwer. Teraz możesz utworzyć odpowiedni certyfikat i klucz, których komputer kliencki będzie używał do uzyskania dostępu do serwera OpenVPN.

Krok 4 – Generowanie certyfikatu klienta i pary kluczy

Następnie utworzymy klucz klienta i kilka certyfikatów. Jeśli masz wielu klientów, możesz powtórzyć ten proces dla każdego z nich. Pamiętaj jednak, że dla każdego klienta musisz przekazać do skryptu unikalną wartość nazwy. W tym samouczku nazwiemy pierwszą parę certyfikat/klucz client1. Najpierw utwórz strukturę katalogów w swoim katalogu domowym, aby przechowywać certyfikaty i pliki kluczy klienta:

Ponieważ ze względów bezpieczeństwa zapisujesz parę certyfikat/klucz oraz plik konfiguracyjny klienta w tym katalogu, powinieneś teraz cofnąć uprawnienia:

Następnie przejdź z powrotem do katalogu EasyRSA i uruchom skrypt easyrsa z opcjami gen-req i nopass oraz ogólną nazwą klienta:

Naciśnij Enter, aby potwierdzić nazwę pospolitą. Następnie skopiuj plik client1.key do wcześniej utworzonego katalogu / client-configs / keys /:

Następnie użyj bezpiecznej metody, aby przesłać plik client1.req na swój komputer CA:

Zaloguj się na swój komputer CA, przejdź do katalogu EasyRSA i zaimportuj żądanie certyfikatu:

import client.req

Then, as in the previous step, sign the request on the server. But this time you need to specify the client request type:

Po wyświetleniu monitu wpisz yes, aby potwierdzić, że chcesz podpisać żądanie certyfikatu i że żądanie certyfikatu pochodzi z zaufanego źródła. Wpisz słowo “yes”, aby kontynuować, lub wpisz cokolwiek innego, aby odrzucić:

sign certificate

Jeśli zaszyfrowałeś klucz CA, tutaj również zostaniesz poproszony o wprowadzenie hasła. Spowoduje to utworzenie pliku certyfikatu klienta o nazwie client1.crt. Prześlij ten plik z powrotem na serwer:

Połącz się ponownie przez SSH ze swoim serwerem OpenVPN i skopiuj certyfikat klienta do katalogu / client-configs / keys /:

Następnie skopiuj pliki ca.crt i ta.key do katalogu / client-configs / keys /:

W tym samym czasie wszystkie certyfikaty i klucze serwera oraz klienta zostały wygenerowane i zapisane w odpowiednich katalogach na serwerze. Teraz możesz kontynuować konfigurację OpenVPN na serwerze.

 Krok 5 – Konfiguracja usługi OpenVPN

Po wygenerowaniu certyfikatów klienta i serwera możesz skonfigurować usługę OpenVPN, aby korzystała z tych poświadczeń. Najpierw skopiuj przykładowy plik konfiguracyjny OpenVPN do swojego katalogu konfiguracyjnego, a następnie rozpakuj go, aby użyć go jako podstawy konfiguracji:

Otwórz plik konfiguracyjny serwera w swoim preferowanym edytorze tekstu:

Następnie znajdź sekcję HMAC, szukając polecenia tls-auth:

Znajdź sekcję hasła, szukając zakomentowanej linii hasła. Szyfrowanie AES-256-CBC oferuje dobry poziom szyfrowania i jest dobrze obsługiwane. Linia ta nie powinna być zakomentowana, ale jeśli jest, usuń znak “;” przed nią:

Poniżej dodaj polecenie Auth, aby wybrać algorytm skrótu wiadomości HMAC. SHA256 to dobry wybór:

Następnie znajdź linię z instrukcją dh, która definiuje parametry Diffiego-Hellmana. Ze względu na niedawne zmiany w EasyRSA, nazwa pliku klucza Diffiego-Hellmana może różnić się od nazwy podanej w przykładowym pliku konfiguracyjnym serwera. W razie potrzeby zmień podaną tutaj nazwę pliku, usuwając 2048, aby dopasować ją do klucza z poprzedniego kroku:

Na koniec znajdź ustawienia użytkownika (user) i grupy (group) i usuń znak “;” na początku każdej linii:

Dotychczasowe zmiany wprowadzone w przykładowym pliku server.conf powinny pozwolić na uruchomienie OpenVPN.

Krok 6 – Konfiguracja sieciowa serwera

Skonfiguruj przekazywanie IP, aby prawidłowo kierować ruch przez VPN. Jest to niezbędne do działania funkcji VPN zapewnianych przez Twój serwer:

Znajdź zakomentowaną linię ustawiającą net.ipv4.ip_forward. Usuń znak „#” z początku linii, aby odkomentować to ustawienie:

Zapisz plik i zamknij go po zakończeniu. Aby odczytać plik i dostosować wartości dla bieżącej sesji, wpisz:

sysctl -p

Następnie dodaj publiczny interfejs sieciowy swojej maszyny:

Twój publiczny interfejs to ciąg znaków w danych wyjściowych tego polecenia, który następuje po słowie „dev”. Na przykład ten wynik pokazuje interfejs o nazwie ens3.

default ip route

Otwórz plik /etc/ufw/before.rules, aby dodać odpowiednią konfigurację:

Na górze pliku dodaj wyróżnione poniżej linie, aby ustawić domyślną politykę dla łańcucha POSTROUTING w tabeli nat i maskować cały ruch pochodzący z VPN. Zmień ens3 w poniższej linii -A POSTROUTING na interfejs znaleziony w powyższym poleceniu:

Zapisz plik i zamknij go po zakończeniu. Następnie musisz poinstruować UFW, aby domyślnie zezwalał również na przekazywane pakiety. Aby to zrobić, otwórz plik /etc/default/ufw:

Wewnątrz znajdź dyrektywę DEFAULT_FORWARD_POLICY i zmień jej wartość z DROP na ACCEPT:

Zapisz i zamknij plik po zakończeniu. Następnie dostosuj zaporę sieciową (firewall), aby umożliwić ruch do OpenVPN. Jeśli nie zmieniłeś portu i protokołu w pliku /etc/openvpn/server.conf, musisz otworzyć ruch UDP na porcie 1194. Jeśli zmodyfikowałeś port i/lub protokół, podstaw tutaj wybrane wartości. W przypadku, gdy zapomniałeś dodać port SSH podczas wykonywania wstępnego samouczka, dodaj go również tutaj:

Po dodaniu tych reguł wyłącz i ponownie włącz UFW, aby go zrestartować i załadować zmiany ze wszystkich zmodyfikowanych plików:

ufw commands

Gratulacje, Twój serwer jest teraz skonfigurowany do poprawnej obsługi ruchu OpenVPN!

Podsumowanie

Jeśli przeszedłeś ten samouczek do samego końca, możesz teraz bezpiecznie przeglądać Internet. Będziesz mógł chronić swoją tożsamość, lokalizację i ruch przed wścibskimi spojrzeniami.

Udanego korzystania!

 

 

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.