Jak skonfigurować serwer OpenVPN na Ubuntu 20.04

Najlepszy przewodnik po konfiguracji bezpiecznego serwera OpenVPN na Ubuntu 20.04

Wirtualna sieć prywatna (VPN) umożliwia bezpieczne i prywatne łączenie się ze zdalną siecią prywatną, na przykład siecią biurową lub Internetem, w taki sposób, jakbyś był bezpośrednio połączony z siecią prywatną.

VPN działa w architekturze serwer-klient. Serwer VPN jest wdrażany na komputerze i jest publicznie dostępny przez Internet. Serwer VPN można skonfigurować tak, aby umożliwiał łączenie się z prywatną siecią LAN, taką jak sieć biurowa, lub zezwalał na połączenia z Internetem. Użytkownik łączy się z serwerem VPN za pomocą klienta VPN na swoim komputerze lokalnym. Komunikacja między serwerem VPN a klientem odbywa się za pomocą bezpiecznego protokołu tunelowania. Internetowi wydaje się, że celem ruchu jest serwer VPN; jednak ruch przechodzi do klienta za pośrednictwem serwera.

VPN ma wiele zastosowań w życiu codziennym, takich jak bezpieczne łączenie się z publiczną siecią Wi-Fi, która często jest zagrożona, lub omijanie ograniczeń geograficznych na niektórych stronach internetowych poprzez łączenie się z VPN z siedzibą w kraju, na który zezwala strona internetowa.

OpenVPN to szeroko stosowana implementacja VPN, która umożliwia szeroki zakres konfiguracji i opcji. Wykorzystuje protokół Secure Sockets Layer (SSL) do szyfrowania danych i kluczy wstępnych, nazwy użytkownika/hasła lub certyfikatów do uwierzytelniania klienta VPN. W tym artykule zobaczymy, jak skonfigurować serwer VPN i klienta VPN na Ubuntu 20.04.

Instalacja

OpenVPN jest dostępny w oficjalnych repozytoriach Ubuntu w pakiecie otwórz VPN. Ten pakiet instaluje zarówno serwer OpenVPN, jak i klienta.

sudo apt zainstaluj openvpn

Jak wspomniano wcześniej, OpenVPN używa certyfikatów SSL do szyfrowania danych między serwerem a klientem. Musimy założyć własny urząd certyfikacji (CA) do wystawiania certyfikatów dla VPN. Zwróć uwagę, że należy to skonfigurować na innej maszynie niż ta, na której skonfigurowano OpenVPN; powodem jest to, że jeśli znajduje się na tym samym serwerze i zostanie przejęty, atakujący może uzyskać dostęp do klucza prywatnego, a tym samym zaatakować połączenie VPN.

Do skonfigurowania urzędu certyfikacji użyjemy narzędzia o nazwie „Easy-RSA”. Aby go zainstalować, uruchom następujące czynności na komputerze CA, serwerze OpenVPN i komputerze klienta, ponieważ konfiguracja jest wymagana na wszystkich trzech, aby skonfigurować CA.

sudo apt install easy-rsa

Teraz najpierw skonfigurujemy urząd certyfikacji na maszynie CA i wykonamy kilka wymaganych czynności konfiguracyjnych na maszynie serwera Open VPN.

Konfiguracja urzędu certyfikacji

Wstępna konfiguracja na komputerze CA

Teraz ten pakiet instaluje polecenie o nazwie make-cadir który służy do tworzenia folderu do konfiguracji urzędu certyfikacji. Stwórzmy folder za pomocą tego i wejdźmy do folderu.

make-cadir cert_authority && cd cert_authority

Otwórz plik o nazwie vars utworzone w tym katalogu. Ten plik zawiera kilka zmiennych konfiguracyjnych, które musimy zmodyfikować. Wartości, które należy zmienić, znajdują się w wierszach 91-96, po komentarzu o Pola organizacyjne który opisuje te pola. Odkomentuj wiersze i wpisz odpowiednie wartości w miejsce wartości przykładowych.

Zapisz i wyjdź z pliku. Jeśli używasz edytora vim, naciśnij wyjście, rodzaj :wq i naciśnij Wchodzić zapisać i wyjść.

Następnie uruchamiamy easyrsa program w katalogu do skonfigurowania infrastruktury klucza publicznego (PKI), która posłuży do wygenerowania klucza publicznego i certyfikatów.

./easyrsa init-pki

Następnym krokiem będzie wygenerowanie klucza CA i certyfikatu. Gdy polecenie wyświetli monit o hasło, wprowadź hasło dla klucza CA. Po wyświetleniu monitu wprowadź również nazwę pospolitą. Jeśli zostawisz to pole puste, zostanie użyta domyślna nazwa Easy-RSA CA.

./easyrsa build-ca

Jak widać z danych wyjściowych, został wygenerowany certyfikat i klucz. Ten klucz będzie używany do podpisywania certyfikatów klienta i serwera, dlatego nigdy nie należy go dotykać/modyfikować.

Teraz mamy konfigurację PKI. Następnym krokiem jest utworzenie klucza serwera i certyfikatu na maszynie, którego będziemy używać jako serwera OpenVPN. Ten certyfikat zostanie później podpisany przez komputer urzędu certyfikacji.

Generowanie klucza i certyfikatu serwera na komputerze serwera

Zainstalowaliśmy już Easy RSA na maszynie serwerowej. Teraz wykonaj trzy kroki na maszynie serwerowej, które wcześniej wykonywaliśmy na maszynie CA, a mianowicie. tworzenie katalogu CA za pomocą make-cadir i wchodząc do niego, modyfikując zmienne w vars plik i generowanie PKI za pomocą ./easyrsa init-pki Komenda.

Następnie musimy uruchomić polecenie, aby wygenerować żądanie i klucz certyfikatu serwera.

./easyrsa gen-req serwer nopass

Zauważ, że przekazaliśmy opcję Brak przejścia aby komenda nie prosiła nas o podanie hasła do klucza serwera. Nadal będzie monitować o nazwę pospolitą dla serwera, którą możesz wpisać cokolwiek lub pozostawić puste dla nazwy domyślnej (serwer) być używana.

Przenieś wygenerowany plik klucza do /etc/openvpn informator.

sudo mv pki/private/server.key /etc/openvpn

Wyślij żądanie certyfikatu do komputera CA. Użyjemy polecenia scp w tym celu.

scp pki/reqs/server.req user@CA_MACHINE_HOSTNAME:/katalog

Na powyższym zrzucie ekranu host 45.79.125.41 to maszyna CA. Skopiowaliśmy certyfikat w katalogu /root.

Teraz certyfikat serwera został skopiowany do maszyny CA. Następnym krokiem jest powrót do maszyny CA i podpisanie tego certyfikatu.

Podpisanie certyfikatu serwera w CA

Najpierw sprawdźmy, czy plik żądania certyfikatu z serwera został skopiowany na maszynę CA. Przejdź do katalogu, do którego skopiowaliśmy plik (w moim przykładzie /root) i uruchom ls.

:~# cd /root && ls cert_authority server.req

Jak widzimy, plik server.req jest obecny. Następnie przejdź do katalogu CA i zaimportuj to żądanie.

cd cert_authority ./easyrsa import-req /root/server.req serwer

Aby podpisać to żądanie, uruchom następujące polecenie.

./easyrsa sign-req server server

Tutaj pierwszym argumentem jest rodzaj żądania, tj. serwer, a drugim argumentem jest nazwa zwyczajowa maszyny serwerowej, dla której wcześniej używaliśmy wartości domyślnej, tj. serwer.

Wpisz frazę tak, i hasło do klucza CA po wyświetleniu monitu.

Teraz możemy usunąć plik żądania certyfikatu i skopiować wygenerowany certyfikat dla serwera, a także certyfikat publiczny CA z powrotem na serwer.

rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root

Następnie musimy wykonać jeszcze kilka kroków, aby zapewnić bezpieczne połączenie VPN.

Generowanie parametrów ciepłowniczych

Wymiana kluczy DH (Diffie-Hellman) to algorytm zapewniający bezpieczną wymianę kluczy kryptograficznych przez niezabezpieczony kanał. Najpierw przenieśmy otrzymany certyfikat i certyfikat publiczny CA do /etc/openvpn.

mv /root/ca.crt /root/server.crt /etc/openvpn

Przejdź do folderu CA na serwerze i uruchom następujące polecenie, aby wygenerować parametry DH. Generowanie może zająć dużo czasu.

./easyrsa gen-dh

Teraz przenieś wygenerowany plik do /etc/openvpn.

mv /root/cert_authority/pki/dh.pem /etc/openvpn

Generowanie kluczy TA

OpenVPN wykorzystuje kolejny dodatkowy środek bezpieczeństwa za pomocą klucza uwierzytelniania TLS. Aby wygenerować klucz uwierzytelniania TLS, uruchom:

openvpn --genkey --secret tls_auth.key

I przesuń klucz do /etc/openvpn.

mv tls_auth.key /etc/openvpn

Konfiguracja klucza serwera i ustawienie urzędu certyfikacji zostały zakończone. Przejdźmy teraz do faktycznej konfiguracji serwera VPN.

Konfiguracja serwera OpenVPN

Plik konfiguracyjny dla serwera OpenVPN nie jest tworzony automatycznie, jednak możemy użyć szablonu pliku konfiguracyjnego z otwórz VPN pakiet.

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz

Otwórz plik za pomocą vima lub dowolnego wybranego edytora.

cd /etc/openvpn vim server.conf

Musimy podać nazwy zwyczajowe kluczy i certyfikatów, które wcześniej wygenerowaliśmy. Przejdź do linii nr. 78. Ponieważ użyliśmy wszystkich domyślnych nazw, nie zmieniamy ich. Następnie sprawdź nazwę pliku parametrów DH w linii 85. Użyliśmy nazwy dh.pem, więc zmieńmy ją.

Następnie zmodyfikujmy uprawnienia dla serwera OpenVPN. Przejdź do linii 274 i 275 i usuń wiodący ; odkomentować to.

Podobnie przejdź do wiersza 192 i usuń średnik. Ta dyrektywa umożliwia przepływ ruchu wszystkich klientów przez VPN.

Zapisz i wyjdź z pliku.

Zmień własność folderu /etc/openvpn na root.

sudo chown -R root:root /etc/openvpn

Konfiguracja sieci i zapory

Musimy zezwolić na przekazywanie IP na serwerze, aby umożliwić przekazywanie pakietów od i do klienta VPN. Odkomentuj wiersz 28 włączony /etc/sysctl.conf:

Zapisz i wyjdź z pliku.

Uruchom ponownie systemowy aby te zmiany miały miejsce.

sudo sysctl -p

Musimy skonfigurować translację adresów sieciowych (NAT) na serwerze za pomocą zapory sieciowej UFW, aby umożliwić klientowi VPN dostęp do Internetu przy użyciu adresu IP serwera VPN. Najpierw włączmy przekazywanie pakietów w konfiguracji zapory. otwarty /etc/domyślnie/ufw i zmień zmienną w linii 19 na ACCEPT.

Zapisz i wyjdź z pliku.

Teraz dodaj następujące reguły do ​​pliku /etc/ufw/before.rules zanim filtr wiersz w pliku.

*nat :POSTROUTING AKCEPTUJ [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASKARADA ZATWIERDZENIE

Wpisz swój interfejs sieciowy zamiast . Możesz zobaczyć swój interfejs sieciowy za pomocą polecenia ifconfig.

Zezwól na ruch dla usługi OpenVPN na zaporze i zezwól na port 1194.

sudo ufw zezwól na openvpn && sudo ufw zezwól na 1194

Załaduj ponownie usługę zapory.

sudo ufw przeładuj

Możemy teraz ponownie uruchomić demona serwera Open VPN, uruchamiając:

usługa sudo openvpn restart

Włącz go, aby uruchamiał się w czasie rozruchu, uruchamiając:

sudo systemctl włącz openvpn

Serwer OpenVPN został skonfigurowany i uruchomiony. Przejdźmy teraz do żądania certyfikatu klienta, generowania kluczy i innej konfiguracji.

Konfiguracja klienta OpenVPN

Musimy wygenerować klucz i żądanie certyfikatu dla klienta. Procedura jest taka sama jak w przypadku serwera.

Chociaż żądanie klucza klienta i certyfikatu można utworzyć na komputerze klienta, a następnie przesłać do komputera urzędu certyfikacji, zaleca się utworzenie go na komputerze serwera. Zaletą robienia tego na serwerze jest to, że możesz utworzyć skrypt do wykonywania wszystkich wymaganych kroków na serwerze, co ułatwia nowemu klientowi dołączenie do VPN.

Przejdź do folderu CA na serwerze i uruchom następujące polecenie:

cd ~/cert_authority ./easyrsa gen-req klient nopass

W podobny sposób jak poprzednio, po wyświetleniu monitu wprowadź nazwę pospolitą lub pozostaw ją pustą, aby użyć domyślnej nazwy pospolitej, tj. klient.

Skopiujmy teraz wygenerowane żądanie certyfikatu klienta do maszyny CA.

scp pki/reqs/client.req [email protected]:/root

Zaimportujmy to żądanie do maszyny CA:

./easyrsa import-req /root/client.req klient

A teraz podpiszmy to:

./easyrsa sign-req klient klienta

Wchodzićtak po wyświetleniu monitu o kontynuowanie. Wprowadź hasło do klucza CA, gdy zostaniesz o to poproszony.

Możemy teraz usunąć żądany plik dla klienta i skopiować żądanie z powrotem do maszyny serwera VPN.

rm /root/client.req scp pki/issued/client.crt [email protected]:/root

Stwórzmy folder o nazwie klient aby zachować wszystkie pliki związane z klientem na serwerze VPN. Przeniesiemy klucz klienta i certyfikat do tego folderu.

mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client

Teraz utwórzmy plik konfiguracyjny z dostępnego szablonu, podobnie jak stworzyliśmy plik konfiguracyjny serwera.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client

Otwórz plik klient.conf. W wierszu 42 wprowadź nazwę hosta lub adres IP komputera serwera w miejsce mój-serwer-1.

Odkomentuj wiersze 61 i 62, usuwając początkowy średnik, aby obniżyć uprawnienia do pliku.

Następnie zakomentuj wiersze 88-90 i wiersz 108. Powodem jest to, że chcemy ręcznie dodać zawartość wspomnianych plików zamiast korzystać z lokalizacji plików. Celem tego jest to, że plik konfiguracyjny klienta zostanie później przesłany do klienta, gdzie tak naprawdę nie będziemy mieć plików kluczy i certyfikatów klienta; dlatego kopiujemy ich zawartość w samym pliku konfiguracyjnym.

Dołącz następujące elementy do pliku konfiguracyjnego klienta. Wprowadź zawartość odpowiednich plików wewnątrz podanych tagów.

 # Wklej zawartość pliku ca.crt tutaj # Wklej zawartość pliku client.crt tutaj # Wklej zawartość pliku client.key tutaj key-direction 1 # Wklej zawartość pliku tls_auth.key tutaj 

Zapisz i wyjdź z pliku. Zmień nazwę tego pliku z klient.conf do klient.ovpn, ponieważ to ostatnie jest rozszerzeniem wymaganym dla plików konfiguracyjnych, które można importować jako konfiguracje sieciowe.

Teraz przenieś plik klient.ovpn do klienta, tj. maszyny lokalnej.

Uruchomić scp na komputerze klienckim, aby przesłać plik z serwera na komputer lokalny.

scp użytkownik@ip_serwera:/ścieżka_do_pliku lokalna_ścieżka_docelowa

Na koniec musimy użyć tego pliku konfiguracyjnego, aby połączyć się z serwerem VPN. Można to zrobić zarówno za pomocą wiersza poleceń, jak i GUI.

Aby uruchomić klienta VPN z wiersza poleceń, uruchom:

sudo openvpn --config client.ovpn

I to jest jedyne polecenie, które musisz uruchomić, aby uruchomić klienta VPN.

Aby uruchomić klienta VPN za pomocą GUI, wykonaj następujące kroki.

Przejdź do Ustawienia » Sieć na komputerze klienckim.

Kliknij na + w sekcji VPN i wybierz „Importuj z pliku…” z opcji.

Kliknij „Dodaj”, aby rozpocząć korzystanie z VPN.

Zwróć uwagę, że w sekcji „Brama” jest to adres IP serwera.

Na koniec przełącz przycisk „VPN klienta”, aby włączyć VPN na komputerze.

Nawiązanie połączenia VPN może zająć kilka sekund. Podczas konfiguracji w lewym górnym rogu ekranu pojawi się nowe logo postępu VPN, które po skonfigurowaniu zmieni się w logo VPN.

Aby sprawdzić, czy VPN działa poprawnie, uruchom następujące polecenie:

curl //ipinfo.io/ip

Powinien zwrócić adres IP twojego serwera. Możesz też sprawdzić swój adres IP, po prostu wyszukując „Moje IP” w Google. Powinien pokazywać adres IP twojego serwera VPN, jeśli nasza konfiguracja VPN działa poprawnie.

Wniosek

W tym artykule zobaczyliśmy, jak skonfigurować serwer OpenVPN, urząd certyfikacji i klienta OpenVPN. Aby dodać więcej klientów do sieci VPN, musimy teraz wykonać procedurę generowania i podpisywania certyfikatu dla klienta oraz używać tego samego pliku konfiguracyjnego utworzonego tutaj, zmieniając tylko klucz klienta i wartości certyfikatu.

W przypadku wolniejszych połączeń internetowych możliwe jest, że jeśli do komunikacji jest używany protokół UDP, dochodzi do znacznej utraty pakietów. Użytkownik może przełączyć się na TCP przez odkomentowanie linii protokół tcp i komentowanie na linii proto udp w pliku konfiguracyjnym serwera.

Ponadto, w przypadku innych błędów, możesz ustawić poziom rejestrowania za pomocą czasownik dyrektywy w plikach konfiguracyjnych serwera i klienta. Możesz wprowadzić wartości od 0 do 9. Im wyższa wartość tej dyrektywy, tym bardziej szczegółowy będzie dziennik.