COMPUTING > Wirtualny Private Cloud > VMware vCloud Director > Jak skonfigurować połączenie VPN za pomocą OpenVPN na Ubuntu 20.04

3.4.1.2 Jak skonfigurować połączenie VPN za pomocą OpenVPN na Ubuntu 20.04

VPN (Virtual Private Network) jest wirtualną prywatną siecią, która odpowiada za chronione połączenie sieciowe pomiędzy dwoma niezależnymi sieciami danych. Korzystając z VPN, serwer lub komputer (klient) połączony do internetu z jednej lokalizacji może uzyskać dostęp do zasobów sieciowych innego serwera poprzez utworzenie bezpośredniego połączenia w sieci wirtualnej pomiędzy dwoma nośnikami, co sprowadza się do skopiowania fizycznego połączenia między dwoma punktami sieciowymi.

VPN może zostać postawiony z wykorzystaniem podstawowych systemów operacyjnych, między innymi Windows, oraz usługi pokroju OpenVPN. Oprogramowanie open source tworzy szyfrowany tunel wirtualny, bazujący na TLS/SSL (Transport Layer Security/Secure Sockets Layer), uruchamiany z wykorzystaniem certyfikatów, które pozwalają na bezpieczny ruch pomiędzy serwerem i jednym lub więcej klientów.
 
W niniejszym poradniku przedstawimy instrukcję konfiguracji VPN za pomocą OpenVPN na Serwerze oraz Kliencie wykorzystującym Ubuntu 20.04. Niektóre punkty poradnika (odwołujące się do Serwera lub Klienta) mogą również być wykorzystywane w przypadku konfiguracji hybrydowej (np. Serwer Windows i Klient Linux lub odwrotnie).

Do wykonania kroków podanych w poradniku wymagane są:
  • Serwer – główny serwer (Ubuntu) dla połączenia VPN;
  • Maszyna CA - serwer (Ubuntu), który będzie wykorzystywany jako maszyna CA (Certificate Authority) i odpowiadać będzie za weryfikację ważności certyfikatów (do tego celu można również wykorzystać Serwer główny, wykorzystywany do połączenia VPN);
  • Klient – dodatkowe urządzenie (Ubuntu) dla połączenia VPN.
 Będziesz musiał połączyć się ze swoim Serwerem, maszyną CA oraz Klientem poprzez połączenie SSH.
 
Zaloguj się do swojego Serwera i zainstaluj OpenVPN (poradnik obowiązuje również dla instalacji po stronie Klienta).
 
Instalator moży być wykorzystany na Serwerze oraz Kliencie bazującym na systemie operacyjnym Linux.

Uwaga: OpenVPN jest dostępny w oficjalnych instalacjach Ubuntu, więc nie ma potrzeby wgrywania dodatkowych plików.

Wprowadź:
 

$ sudo apt update
$ sudo apt install openvpn

Po wykonaniu operacji OpenVPN zostanie zainstalowany na serwerze.
 
Dokładnie taką samą operację należy wykonać po stronie Klienta.
Pobierz EasyRSA na swój serwer oraz CA poprzez wprowadzenie komendy na obu maszynach:
 

$ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

 Możesz pobrać najnowszą wersję ze strony https://github.com/OpenVPN/easy-rsa/releases
 

$ cd ~
$ sudo tar xvf EasyRSA-3.0.4.tgz



Uwaga: Nazwa może się różnić zależnie od pobranej wersji.
Zakończ konfigurację serwera za pomocą komend:
 

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

Znajdź sekcję odnoszącą się do HMAC ("tls-auth"). Jeśli linia jest zakomentowana, usuń ";".
Znajdź sekcję szyfrowania ("cipher"). Jeśli jest zakomentowana, usuń ";". Pod spodem dodaj nową linię zawierającą tekst "auth SHA256".
najdź sekcję "dh" definiującą parametry Diffie-Hellman i usuń "2048" z nazwy (powinieneś uzyskać "dh dh.pem").
Znajdź sekcje "user" oraz "group" i usuń ";" w celu odkomentowania linii.
Zainstalowanie EasyRSA wiąże się z utworzeniem pliku konfiguracyjnego do definiowania zmiennych CA. Wprowadź:
 

$ cd ~/EasyRSA-3.0.4/
$ sudo cp vars.example vars
$ sudo nano vars

Usuń "#" dla instrukcji z obrazka poniżej:

Modifica le variabili

Uruchom skrypt "easyrsa" w celu zainicjowania Public Key Infrastructure (PKI):
 

$ sudo ./easyrsa init-pki
$ sudo ./easyrsa build-ca nopass

Za pomocą komendy zostaną utworzone dwa pliki:
  • ca.crt: publiczny certyfikat CA wykorzystywany przez serwery oraz klienty do wzajemnego przekazywania informacji o przynależności do zaufanej sieci.
  • ca.key: klucz prywatny wykorzystywany przez maszynę CA w celu podpisywania kluczy oraz certyfikatów dla serwerów i klientów. Ten plik musi znajdować się na maszynie CA (niedostępnej dla stron trzecich), gdyż w przeciwnym wypadku bezpieczeństwo sieci może zostać naruszone.
Zostaniesz poproszony o wprowadzenie nazwy. Pozostaw pole puste i wciśnij Enter.
Po skonfigurowaniu maszyny CA, wygeneruj klucz prywatny oraz żądanie certyfikatu na serwerze i prześlij je na maszynę CA w celu podpisania:
 

$ cd ~/EasyRSA-3.0.4
$ sudo ./easyrsa init-pki
$ sudo ./easyrsa gen-req server nopass

Dla uproszczenia pozostaw "server" jako nazwę serwera, aby uniknąć wykonywania dodatkowych zmian.

Właśnie stworzyłeś klucz prywatny dla serwera i żądanie certyfikatu o nazwie "server.req":
 

$ sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/

Skopiuj plik server.req na maszynę CA:
 

$ sudo scp ~/EasyRSA-3.0.4/pki/reqs/server.req user@your_CA_ip:/tmp

Zaimportuj przekopiowany plik do folderu EasyRSA na maszynie CA i podpisz go:
 

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/server.req server
$ sudo ./easyrsa sign-req server server

Wprowadź “yes” i wciśnij Enter.

Przenieś podpisany certyfikat i ca.crt na Serwer VPN:
 

$ sudo scp pki/issued/server.crt user@your_server_ip:/tmp
$ sudo scp pki/ca.crt user@your_server_ip:/tmp

Następnie przekopiuj otrzymane pliki do odpowiednich lokalizacji na serwerze:
 

$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
$ cd ~/EasyRSA-3.0.4/

i wygeneruj wymianę kluczy:
 

$ sudo ./easyrsa gen-dh
$ sudo openvpn --genkey --secret ta.key

Przekopiuj wygenerowane pliki do folderu "/ etc / openvpn /"
 

$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

W niniejszym kroku będziesz potrzebował dostępu do maszyny Ubuntu, która będzie Klientem w połączeniu VPN.

Po zainstalowaniu OpenVPN na maszynie, stwórz folder do przechowywania certyfikatów i kluczy klienta (poradnik przedstawia tylko jeden klucz o nazwie ‘client1’, ale operacja musi zostać powtórzona dla każdego klienta, który korzysta z innej denominacji).
 

$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa gen-req client1 nopass

Wciśnij Enter żeby zaakceptować zaproponowaną standardową nazwę.
Przekopiuj klucz Klienta do wcześniej utworzonego folderu:
 

$ sudo cp pki/private/client1.key ~/client-configs/keys/


Prześlij plik client1.req na maszynę CA:
 

$ sudo scp pki/reqs/client1.req user@your_CA_IP:/tmp

Zaimportuj żądanie certyfikatu na CA:
 

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1
$ sudo ./easyrsa sign-req client client1

Wprowadź "yes" w celu autoryzacji podpisu.
Przenieś certyfikat na Serwer:
 

$ sudo scp pki/issued/client1.crt utente@IP_SERVER:/tmp

Przekopiuj następujące pliki do odpowiednich folderów na Serwerze:
 

$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ sudo cp /tmp/client1.crt ~/client-configs/keys/
$ sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Teraz zarówno certyfikaty, jak i klucze serwera oraz klienta zostały wygenerowane.
Zmień zasady przekazywania IP:
 

$ sudo nano /etc/sysctl.conf

Znajdź sekcję "net.ipv4.ip_forward" i usuń "#" w celu odkomentowania instrukcji

Zmień reguły firewall w celu poprawnego kierowania połączeń klienta.
 

$ ip route | grep default

Zapamiętaj nazwę po "dev" ("eth0" w przykładzie poniżej)

Configura la rete di OpenVPN

$ sudo nano /etc/ufw/before.rules

Dodaj komendy jak na obrazku poniżej, zmieniając "eth0" na nazwę swojego interfejsu sieciowego.

Configura la rete di OpenVPN

Zapisz i wyjdź.
 

$ sudo nano /etc/default/ufw

Zmień wartość parametru "DEFAULT_FORWARD_POLICY" na "ACCEPT"

Dodaj port 1194 dla ruchu UDP i port 22 dla ruchu SSH:
 

$ sudo ufw allow 1194/udp $ sudo ufw allow OpenSSH

Zrestartuj firewall:
 

$ sudo ufw disable
$ sudo ufw enable

Uruchom usługę OpenVPN:
 

$ sudo systemctl start openvpn

Sprawdź status usługi. Jeśli proces został zakończony powodzeniem, wyświetlona zostanie informacja jak poniżej.
 

$ sudo systemctl status openvpn

Stato del servizio di OpenVPN

Ustaw uruchomienie usługi przy włączeniu serwera:
 

$ sudo systemctl enable openvpn

Stwórz podstawową konfigurację dla Klientów:
 

$ sudo mkdir -p ~/client-configs/files
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ sudo nano ~/client-configs/base.conf

Znajdź sekcję "remote" i upewnij się, że przedstawia wartość "remote IP_Server 1194"
 
  • IP_Server: Wprowadź adres IP Serwera
  • 1194: wcześniej wybrany port
Znajdź sekcję "proto" i upewnij się, że serwer jest ustawiony na UDP (linia TCP powinna być zakomentowana przez ";").

Znajdź sekcje "user" oraz "group" i usuń ";", aby je odkomentować.

Znajdź sekcje "ca.crt" - "client.crt" - "client.key" - "ta.key" i zakomentuj je dodając "#" na początku każdej linii.

Znajdź sekcję "cipher" i dodaj linię "auth SHA256" pod "cipher AES-256-CBC".

Dodaj linię "key-direction 1" w dowolnym miejscu

Dodaj poniższe, zakomentowane linie w dowolnym miejscu. Jeśli klientem jest maszyna Linux, odkomentuj je.
 

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Zapisz i wyjdź.
Na swoim serwerze stwórz skrypt do automatycznej kompilacji konfiguracji klienta:
 

$ sudo nano ~/client-configs/make_config.sh

Skopiuj i wklej tekst:
 

#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Zapisz plik i upewnij się, że jest wykonywalny:
 

$ sudo chmod 700 ~/client-configs/make_config.sh

Spróbuj wygenerować konfigurację Klienta:
 

$ cd ~/client-configs
$ sudo ./make_config.sh client1

Zostanie utworzony plik “client1.ovpn”.

Przenieś plik na urządzenie, z którego chcesz korzystać. Będzie on wykorzystywany przez oprogramowanie VPN do ustanowienia połączenia.
W celu unieważnienia certyfikatu Klienta, wprowadź następujące komendy na maszynie CA:
 

$ cd EasyRSA-3.0.4/
$ sudo ./easyrsa revoke client1

client1 to nazwa klienta, którego uprawnienia zostały cofnięte

Wprowadź "yes", aby zatwierdzić.

Wygeneruj plik crl.pem i prześlij go na swój serwer:
 

$ sudo ./easyrsa gen-crl
$ sudo scp ~/EasyRSA-3.0.4/pki/crl.pem user@IP_Server:/tmp

Zaktualizuj konfigurację na serwerze, aby zweryfikować cofnięcie certyfikatu:
 

$ sudo cp /tmp/crl.pem /etc/openvpn
$ sudo nano /etc/openvpn/server.conf

Na końcu pliku dodaj "crl-verify crl.pem".

Zapisz i wyjdź.
 

$ sudo systemctl restart openvpn@server

Zrestartuj serwer w celu wprowadzenia zmian.