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:
|
1 2 |
sudo apt update sudo apt install openvpn |
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:
|
1 |
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz <span class="s1">--no-check-certificate</span> |
Następnie rozpakuj archiwum tarball:
|
1 2 |
cd ~ tar xvf EasyRSA-3.0.4.tgz |

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:
|
1 |
cd ~/EasyRSA-3.0.4/ |
W katalogu znajduje się plik o nazwie vars.example. Utwórz kopię tego pliku i nazwij ją vars bez rozszerzenia pliku:
|
1 |
cp vars.example vars |
Użyj preferowanego edytora tekstu, aby otworzyć ten nowy plik:
|
1 |
nano vars |
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:
|
1 2 3 4 5 6 |
#set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit" |
Zaktualizuj te zmienne według własnego uznania, jak pokazano poniżej:
|
1 2 3 4 5 6 |
set_var EASYRSA_REQ_COUNTRY "SL" set_var EASYRSA_REQ_PROVINCE "Zurich" set_var EASYRSA_REQ_CITY "Zurich City" set_var EASYRSA_REQ_ORG "CloudSigma" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" |
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:
|
1 |
./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:
|
1 |
./easyrsa build-ca nopass |
W danych wyjściowych zostaniesz poproszony o potwierdzenie nazwy powszechnej (common name) dla swojego 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:
|
1 |
cd EasyRSA-3.0.4 |
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:
|
1 |
./easyrsa init-pki |
Następnie wywołaj skrypt easyrsa ponownie, tym razem z opcją gen-req, a po niej podaj nazwę ogólną komputera:
|
1 |
./easyrsa gen-req server nopass |
Spowoduje to utworzenie klucza prywatnego dla serwera oraz pliku żądania certyfikatu o nazwie server.req. Skopiuj klucz serwera do katalogu /etc/openvpn/:
|
1 |
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/ |
Prześlij plik server.req na komputer CA za pomocą bezpiecznej metody (takiej jak SCP w poniższym przykładzie):
|
1 |
scp ~/EasyRSA-3.0.4/pki/reqs/server.req cloudsigma@your_CA_ip:/tmp |
Następnie przejdź do katalogu EasyRSA na komputerze CA:
|
1 |
cd EasyRSA-3.0.4/ |
Użyj ponownie skryptu easyrsa, aby zaimportować plik server.req i dodaj jego nazwę powszechną (common name) po ścieżce pliku:
|
1 |
./easyrsa import-req /tmp/server.req server |
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:
|
1 |
./easyrsa sign-req server 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:

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:
|
1 |
scp pki/issued/server.crt siigma@your_server_ip:/tmp |
Prześlij plik ca.rt na serwer przed wylogowaniem się z komputera CA:
|
1 |
scp pki/ca.crt siigma@our_server_ip:/tmp |
Następnie zaloguj się ponownie na swój serwer OpenVPN i skopiuj pliki server.crt oraz ca.crt do katalogu /etc/openvpn/:
|
1 |
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/ |
Następnie przejdź do swojego katalogu EasyRSA:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Wprowadź następujący kod, aby utworzyć silny klucz Diffie-Hellmana, którego możesz użyć podczas wymiany kluczy:
|
1 |
./easyrsa gen-dh |
Po zakończeniu wygeneruj podpis HMAC, aby usprawnić funkcję sprawdzania stanu TLS serwera:
|
1 |
openvpn --genkey --secret ta.key |
Po zakończeniu wykonywania polecenia skopiuj dwa nowe pliki do katalogu / etc / openvpn /:
|
1 2 |
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /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:
|
1 |
mkdir -p ~/client-configs/keys |
Ponieważ ze względów bezpieczeństwa zapisujesz parę certyfikat/klucz oraz plik konfiguracyjny klienta w tym katalogu, powinieneś teraz cofnąć uprawnienia:
|
1 |
chmod -R 700 ~/client-configs |
Następnie przejdź z powrotem do katalogu EasyRSA i uruchom skrypt easyrsa z opcjami gen-req i nopass oraz ogólną nazwą klienta:
|
1 2 |
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass |
Naciśnij Enter, aby potwierdzić nazwę pospolitą. Następnie skopiuj plik client1.key do wcześniej utworzonego katalogu / client-configs / keys /:
|
1 |
cp pki/private/client1.key ~/client-configs/keys/ |
Następnie użyj bezpiecznej metody, aby przesłać plik client1.req na swój komputer CA:
|
1 |
scp pki/reqs/client1.req sigma@your_CA_ip:/tmp |
Zaloguj się na swój komputer CA, przejdź do katalogu EasyRSA i zaimportuj żądanie certyfikatu:
|
1 2 3 |
ssh siigma@your_CA_ip cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1 |

Then, as in the previous step, sign the request on the server. But this time you need to specify the client request type:
|
1 |
./easyrsa sign-req client client1 |
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ć:
|
1 |
Confirm Request Details: Yes |

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:
|
1 |
scp pki/issued/client1.crt siigma@your_server_ip:/tmp |
Połącz się ponownie przez SSH ze swoim serwerem OpenVPN i skopiuj certyfikat klienta do katalogu / client-configs / keys /:
|
1 |
cp /tmp/client1.crt ~/client-configs/keys/ |
Następnie skopiuj pliki ca.crt i ta.key do katalogu / client-configs / keys /:
|
1 2 |
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/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:
|
1 2 |
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 konfiguracyjny serwera w swoim preferowanym edytorze tekstu:
|
1 |
sudo nano /etc/openvpn/server.conf |
Następnie znajdź sekcję HMAC, szukając polecenia tls-auth:
|
1 |
tls-auth ta.key 0 # Ten plik jest poufny |
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ą:
|
1 |
cipher AES-256-CBC |
Poniżej dodaj polecenie Auth, aby wybrać algorytm skrótu wiadomości HMAC. SHA256 to dobry wybór:
|
1 |
auth SHA256 |
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:
|
1 |
dh dh.pem |
Na koniec znajdź ustawienia użytkownika (user) i grupy (group) i usuń znak “;” na początku każdej linii:
|
1 2 |
user nobody group nogroup |
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:
|
1 |
sudo nano /etc/sysctl.conf |
Znajdź zakomentowaną linię ustawiającą net.ipv4.ip_forward. Usuń znak „#” z początku linii, aby odkomentować to ustawienie:
|
1 |
net.ipv4.ip_forward=1 |
Zapisz plik i zamknij go po zakończeniu. Aby odczytać plik i dostosować wartości dla bieżącej sesji, wpisz:
|
1 |
sudo sysctl -p |

Następnie dodaj publiczny interfejs sieciowy swojej maszyny:
|
1 |
ip route | grep default |
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.

Otwórz plik /etc/ufw/before.rules, aby dodać odpowiednią konfigurację:
|
1 |
$ sudo nano /etc/ufw/before.rules |
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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# rules.before # Reguły, które powinny być uruchomione przed regułami dodanymi z linii komend ufw. Własne # reguły powinny być dodane do jednego z tych łańcuchów: # ufw-before-input # ufw-before-output # ufw-before-forward # POCZĄTEK REGUŁ OPENVPN # Reguły tabeli NAT *nat :POSTROUTING ACCEPT [0:0] # Zezwalaj na ruch z klienta OpenVPN do wlp11s0 (zmień na wykryty interfejs!) -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE COMMIT # KONIEC REGUŁ OPENVPN # Nie usuwaj tych wymaganych linii, w przeciwnym razie wystąpią błędy . . . |
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:
|
1 |
sudo nano /etc/default/ufw |
Wewnątrz znajdź dyrektywę DEFAULT_FORWARD_POLICY i zmień jej wartość z DROP na ACCEPT:
|
1 |
DEFAULT_FORWARD_POLICY="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:
|
1 2 |
sudo ufw allow 1194/udp sudo ufw allow OpenSSH |
Po dodaniu tych reguł wyłącz i ponownie włącz UFW, aby go zrestartować i załadować zmiany ze wszystkich zmodyfikowanych plików:
|
1 2 |
sudo ufw disable sudo ufw enable |

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!
Komentarze
Brak komentarzy. Bądź pierwszy.