GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nastavit server OpenVPN na Ubuntu 20.04

Ubuntu 20.04 Focal Fossa je poslední dlouhodobá podpora jedné z nejpoužívanějších distribucí Linuxu. V tomto tutoriálu uvidíme, jak použít tento operační systém k vytvoření serveru OpenVPN a jak vytvořit .ovpn soubor, pomocí kterého se k němu připojíme z našeho klientského počítače.

V tomto tutoriálu se naučíte:

  • Jak vygenerovat certifikační autoritu
  • Jak vygenerovat serverový a klientský certifikát a klíč
  • Jak podepsat certifikát u certifikační autority
  • Jak vytvořit parametry Diffie-Hellman
  • Jak vygenerovat klíč tls-auth
  • Jak nakonfigurovat server OpenVPN
  • Jak vygenerovat soubor .ovpn pro připojení k síti VPN

Jak nastavit server OpenVPN na Ubuntu 20.04

Požadavky na software a použité konvence

Softwarové požadavky a konvence příkazového řádku systému Linux
Kategorie Požadavky, konvence nebo použitá verze softwaru
Systém Ubuntu 20.04 Focal Fossa
Software openvpn, ufw, easy-rsa
Jiné Kořenová oprávnění k provádění administrativních úkolů
Konvence # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz
$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel

Nastavení scénáře

Než přistoupíme ke skutečné konfiguraci VPN, promluvme si o konvencích a nastavení, které přijmeme v tomto tutoriálu.

Budeme používat dva stroje, oba poháněné Ubuntu 20.04 Focal Fossa . První, camachine budou použity k hostování naší Certifikační autority; druhý, openvpnmachine bude ta, kterou nastavíme jako skutečnou VPN server. Je možné použít stejný stroj pro oba účely, ale bylo by to méně bezpečné, protože osoba, která naruší server, by se mohla „vydávat“ za certifikační autoritu a používat ji k podepisování nechtěných certifikátů (problém je zvláště relevantní pouze v případě, že plánujete mít více než jeden server nebo pokud plánujete používat stejnou CA pro jiné účely). Pro přesun souborů mezi jedním počítačem a druhým použijeme scp příkaz (zabezpečená kopie). 10 hlavních kroků, které provedeme, je následujících:

  1. Vytvoření certifikační autority;
  2. Generování klíče serveru a žádosti o certifikát;
  3. Podepsání žádosti o certifikát serveru s CA;
  4. Generování parametrů Diffie-Hellman na serveru;
  5. Vygenerování klíče tls-auth na serveru;
  6. Konfigurace OpenVPN;
  7. Konfigurace sítě a firewallu (ufw) na serveru;
  8. Generování klientského klíče a žádosti o certifikát;
  9. Podpis klientského certifikátu s CA;
  10. Vytvoření souboru .ovpn klienta používaného k připojení k síti VPN.

Krok 1 – Vygenerování certifikační autority (CA)

Prvním krokem na naší cestě je vytvoření Certifikační autority na vyhrazeném stroji. Budeme pracovat jako neprivilegovaný uživatel, abychom vygenerovali potřebné soubory. Než začneme, musíme nainstalovat easy-rsa balíček:

$ sudo apt-get update &&sudo apt-get -y install easy-rsa

S nainstalovaným balíčkem můžeme použít make-cadir příkaz pro vygenerování adresáře obsahujícího potřebné nástroje a konfigurační soubory, v tomto případě jej budeme nazývat certificate_authority . Po vytvoření se do něj přesuneme:

$ make-cadir certificate_authority &&cd certificate_authority

Uvnitř adresáře najdeme soubor s názvem vars . V souboru můžeme definovat některé proměnné, které budou použity pro generování certifikátu. Komentovanou sadu těchto proměnných lze nalézt na řádku 91 na 96 . Stačí odstranit komentář a přiřadit příslušné hodnoty:

set_var EASYRSA_REQ_COUNTRY "US"set_var EASYRSA_REQ_PROVINCE "Kalifornie"set_var EASYRSA_REQ_CITY "San Francisco"set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"set_var Unit_var EASYRSA_REQAample_EMAIL" "QOURSEampleAreample_EMAIL" "Q 

Jakmile jsou změny uloženy, můžeme pokračovat a vygenerovat PKI (Public Key Infrastructure), pomocí následujícího příkazu, který vytvoří adresář s názvem pki :

$ ./easyrsa init-pki

Se zavedenou infrastrukturou můžeme vygenerovat náš klíč CA a certifikát. Po spuštění níže uvedeného příkazu budeme požádáni o zadání přístupové fráze pro klíč ca . Při každé interakci s úřadem budeme muset zadat stejné heslo. Obecné jméno neboť by měl být předložen i certifikát. To může být libovolná hodnota; pokud ve výzvě pouze stiskneme enter, použije se výchozí, v tomto případě Easy-RSA CA :

$ ./easyrsa build-ca

Zde je výstup příkazu:

Poznámka:pomocí konfigurace Easy-RSA z:./varsUsing SSL:openssl OpenSSL 1.1.1d 10. září 2019Zadejte nové přístupové heslo klíče CA:Znovu zadejte nové přístupové heslo klíče CA:Generování soukromého klíče RSA, 2048 bitů dlouhý modul (2 prvočísla ...........++++++ ...................................... ...................................++++++e je 65537 (0x010001)Nelze načíst / home/egdoc/certificate_authority/pki/.rnd do RNG140296362980608:error:2406F079:generátor náhodných čísel:RAND_load_file:Nelze otevřít soubor:../crypto/rand/randfile.c:98:Filename=/home_authorki/certity/eghordoc /.rnd Chystáte se být požádáni o zadání informací, které budou začleněny do vaší žádosti o certifikát. Chystáte se zadat to, co se nazývá rozlišovací jméno nebo DN. Existuje poměrně málo polí, ale některá můžete nechat prázdná. bude výchozí hodnota. Pokud zadáte '.', pole zůstane prázdné.-----Common Name (např.:váš uživatel, název hostitele nebo serveru) [Easy-RSA CA]:Vytvoření CA dokončeno a nyní můžete importovat a s ign cert requirements. Váš nový soubor certifikátu CA pro publikování je na adrese:/home/egdoc/certificate_authority/pki/ca.crt

build-ca příkaz vygeneroval dva soubory; jejich cesta vzhledem k našemu pracovnímu adresáři je:

  • pki/ca.crt
  • pki/private/ca.key

První je veřejný certifikát, druhý je klíč, který bude použit k podepsání serverových a klientských certifikátů, takže by měl být co nejbezpečnější.

Malá poznámka, než přejdeme vpřed:ve výstupu příkazu jste si mohli všimnout chybové zprávy. Přestože chyba není násilná, řešením, jak se jí vyhnout, je zakomentovat třetí řádek souboru openssl-easyrsa.cnf soubor, který je uvnitř vygenerovaného pracovního adresáře. Problém je diskutován v úložišti openssl github. Po úpravě by soubor měl vypadat takto:

# Pro použití s ​​Easy-RSA 3.1 a OpenSSL nebo LibreSSLRANDFILE =$ENV::EASYRSA_PKI/.rnd

To znamená, že přejdeme na stroj, který budeme používat jako server OpenVPN, a vygenerujeme klíč serveru a certifikát.

Krok 2 – Generování klíče serveru a žádosti o certifikát

V tomto kroku vygenerujeme klíč serveru a žádost o certifikát, která bude následně podepsána certifikační autoritou. Na stroji, který budeme používat jako OpenVPN server, musíme nainstalovat openvpn , easy-rsa a ufw balíčky:

$ sudo apt-get update &&sudo apt-get -y install openvpn easy-rsa ufw

Pro vygenerování klíče serveru a žádosti o certifikát provedeme stejný postup, jaký jsme použili na počítači hostujícím certifikační autoritu:

  1. Vygenerujeme pracovní adresář pomocí make-cadir příkazu a pohybujte se v něm.
  2. Nastavte proměnné obsažené v vars soubor, který bude použit pro certifikát.
  3. Vygenerujte infrastrukturu veřejného klíče pomocí ./easyrsa init-pki příkaz.

Po těchto předběžných krocích můžeme vydat příkaz pro vygenerování souboru certifikátu serveru a klíče:

$ ./easyrsa gen-req server nopass

Tentokrát, protože jsme použili nopass možnost, nebudeme během generování klíče serveru vyzváni k zadání hesla . Stále budeme požádáni o zadání Common Name pro certifikát serveru . V tomto případě je použita výchozí hodnota server . To je to, co použijeme v tomto tutoriálu:

Poznámka:pomocí konfigurace Easy-RSA z:./varsUsing SSL:openssl OpenSSL 1.1.1d 10. září 2019Generování soukromého klíče RSA...................+ ++++.................++++++zápis nového soukromého klíče do '/home/egdoc/openvpnserver/pki/private/server.key.9rU3WfZMbW'- ----Jste požádáni o zadání informací, které budou začleněny do vaší žádosti o certifikát. To, co se chystáte zadat, se nazývá rozlišovací jméno nebo DN. Existuje poměrně málo polí, ale některá můžete nechat prázdná. některá pole budou mít výchozí hodnotu. Pokud zadáte '.', pole zůstane prázdné.-----Common Name (např.:název vašeho uživatele, hostitele nebo serveru) [server]:Pár klíčů a žádost o certifikát dokončeno. Vaše soubory jsou:req:/home/egdoc/openvpnserver/pki/reqs/server.reqkey:/home/egdoc/openvpnserver/pki/private/server.key

Žádost o podpis certifikátu a soukromý klíč bude vygenerováno:

  • /home/egdoc/openvpnserver/pki/reqs/server.req
  • /home/egdoc/openvpnserver/pki/private/server.key .

Soubor klíče musí být přesunut do /etc/openvpn adresář:

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

Místo toho musí být žádost o certifikát odeslána na stroj certifikační autority, aby byla podepsána. Můžeme použít scp příkaz k přenosu souboru:

$ scp pki/reqs/server.req egdoc@camachine:/home/egdoc/

Vraťme se k camachine a autorizovat certifikát.

Krok 3 – Podepsání certifikátu serveru pomocí CA

Na počítači certifikační autority bychom měli najít soubor, který jsme zkopírovali v předchozím kroku v $HOME adresář našeho uživatele:

$ ls ~certificate_authority server.req

První věc, kterou uděláme, je importovat žádost o certifikát. Ke splnění úkolu používáme import-req akce easyrsa skript. Jeho syntaxe je následující:

import-req  

V našem případě to znamená:

$ ./easyrsa import-req ~/server.req server

Příkaz vygeneruje následující výstup:

Poznámka:pomocí konfigurace Easy-RSA z:./varsUsing SSL:openssl OpenSSL 1.1.1d 10. září 2019Požadavek byl úspěšně importován s krátkým názvem:serverTento název nyní můžete použít k provádění operací podepisování tohoto požadavku. 

K podepsání požadavku používáme sing-req akce, která bere typ požadavku jako první argument (v tomto případě server) a short_basename jsme použili v předchozím příkazu (server). Spouštíme:

server serveru $ ./easyrsa sign-req

Budeme požádáni o potvrzení, že chceme certifikát podepsat, ao zadání hesla, které jsme použili pro klíč certifikační autority. Pokud vše proběhne podle očekávání, certifikát bude vytvořen:

Poznámka:pomocí konfigurace Easy-RSA z:./varsUsing SSL:openssl OpenSSL 1.1.1d 10. září 2019Chystáte se podepsat následující certifikát. Zkontrolujte prosím podrobnosti uvedené níže kvůli přesnosti. Upozorňujeme, že tento požadavek nebyl kryptograficky ověřen. Ujistěte se prosím, že pochází z důvěryhodného zdroje nebo že jste ověřili kontrolní součet požadavku u odesílatele. Předmět požadavku, který má být podepsán jako certifikát serveru po dobu 1080 dní:subject=commonName =serverZadejte slovo 'ano' a pokračujte nebo jakékoli jiné vstup k přerušení. Potvrďte podrobnosti požadavku:yesPoužití konfigurace z /home/egdoc/certificate_authority/pki/safessl-easyrsa.cnfZadejte heslo pro /home/egdoc/certificate_authority/pki/private/ca.key:Zkontrolujte, zda požadavek odpovídá podpisuPodpis okThe Subject's je následujícícommonName :ASN.1 12:'server'Certifikát má být certifikován do 20. března 02:12:08 2023 GMT (1080 dní)Zapište databázi s 1 novými položkamiDatabáze AktualizovanýCertifikát vytvořen na:/home/egdoc/certificate_authority/ pki/issued/server.crt

Nyní můžeme smazat soubor požadavku, který jsme dříve přenesli z openvpnmachine . A zkopírujte vygenerovaný certifikát zpět do našeho OpenVPN serveru spolu s veřejným certifikátem CA:

$ rm ~/server.req$ scp pki/{ca.crt,issued/server.crt} egdoc@openvpnmachine:/home/egdoc

Zpět na openvpnmachine měli bychom najít soubory v našem domovském adresáři. Nyní je můžeme přesunout do /etc/openvpn :

$ sudo mv ~/{ca.crt,server.crt} /etc/openvpn

Krok 4 – Generování parametrů Diffie-Hellman

Dalším krokem je vygenerování Diffie-Hellmana parametry. Diffie-Hellman výměna klíčů je metoda používaná k přenosu krypto klíčů přes veřejný, nezabezpečený kanál. Příkaz pro vygenerování klíče je následující (dokončení může chvíli trvat):

$ ./easyrsa gen-dh

Klíč bude vygenerován uvnitř pki adresář jako dh.pem . Přesuňme to do /etc/openvpn jako dh2048.pem :

$ sudo mv pki/dh.pem /etc/openvpn/dh2048.pem

Krok 5 – Vygenerování klíče tls-auth (ta.key)

Chcete-li zlepšit zabezpečení, OpenVPN implementuje tls-auth . Citace z oficiální dokumentace:

Direktiva tls-auth přidává další podpis HMAC ke všem paketům handshake SSL/TLS pro ověření integrity. Jakýkoli paket UDP, který nenese správný podpis HMAC, lze zahodit bez dalšího zpracování. Podpis tls-auth HMAC poskytuje další úroveň zabezpečení nad rámec zabezpečení SSL/TLS. Dokáže chránit proti:
– útokům DoS nebo zahlcení portů na portu OpenVPN UDP.
– Skenování portů k určení, které porty UDP serveru jsou ve stavu naslouchání.
– Chyby zabezpečení v oblasti přetečení vyrovnávací paměti Implementace SSL/TLS.
– Iniciace handshake SSL/TLS z neautorizovaných počítačů (zatímco takové handshake by se nakonec nepodařilo ověřit, tls-auth je může přerušit v mnohem dřívější fázi).

Pro vygenerování klíče tls_auth můžeme spustit následující příkaz:

$ openvpn --genkey --secret ta.key

Po vygenerování přesuneme ta.key soubor do /etc/openvpn :

$ sudo mv ta.key /etc/openvpn

Nastavení klíčů našeho serveru je nyní dokončeno. Můžeme pokračovat ve skutečné konfiguraci serveru.

Krok 6 – Konfigurace OpenVPN

Konfigurační soubor OpenVPN ve výchozím nastavení v /etc/openvpn neexistuje . K jeho vygenerování používáme šablonu, která se dodává s openvpn balík. Spusťte tento příkaz:

$ zcat \ /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz \ | sudo tee /etc/openvpn/server.conf> /dev/null

Nyní můžeme upravit /etc/openvpn/server.conf soubor. Příslušné části jsou uvedeny níže. První věc, kterou chceme udělat, je ověřit, že název odkazovaných klíčů a certifikátů odpovídá těm, které jsme vygenerovali. Pokud jste postupovali podle tohoto návodu, rozhodně by tomu tak mělo být (řádky 78-80 a 85 ):

ca ca.crtcert server.crtkey server.key # Tento soubor by měl být uchován v tajnosti dh2048.pem

Chceme, aby démon OpenVPN běžel s nízkými oprávněními, nobody uživatel a nogroup skupina. Příslušná část konfiguračního souboru je na řádcích 274 a 275 . Potřebujeme pouze odstranit úvodní ; :

uživatel nonegroup nogroup

Další řádek, ze kterého chceme odstranit komentář, je 192 . To způsobí, že všichni klienti přesměrují svou výchozí bránu přes VPN:

stiskněte "redirect-gateway def1 bypass-dhcp"

Řádky 200 a 201 to lze také použít k povolení serveru odesílat konkrétní servery DNS klientům. Ty v konfiguračním souboru jsou ty, které poskytuje opendns.com :

push "dhcp-option DNS 208.67.222.222"push "dhcp-option DNS 208.67.220.220"

V tomto bodě /etc/openvpn adresář by měl obsahovat tyto soubory, které jsme vygenerovali:

/etc/openvpn├── ca.crt├── dh2048.pem├── server.conf├── server.crt├── server.key└── ta.key

Ujistěte se, že jsou všechny vlastněny rootem:

$ sudo chown -R root:root /etc/openvpn

Můžeme přejít k dalšímu kroku:konfigurace síťových možností.

Krok 7 – nastavení sítě a ufw

Aby naše VPN fungovala, musíme povolit přesměrování IP na našem serveru. K tomu stačí odkomentovat řádek 28 z /etc/sysctl.conf soubor:

# Odkomentováním dalšího řádku povolíte předávání paketů pro IPv4net.ipv4.ip_forward=1

Chcete-li znovu načíst nastavení:

$ sudo sysctl -p

Musíme také povolit předávání paketů v ufw firewallu a modifikovat /etc/default/ufw a změnou DEFAULT_FORWARD_POLICY z DROP ACCEPT (řádek 19 ):

# Nastavte výchozí zásadu předávání na ACCEPT, DROP nebo REJECT. Vezměte prosím na vědomí, že # pokud toto změníte, pravděpodobně budete chtít upravit svá pravidlaDEFAULT_FORWARD_POLICY="ACCEPT"

Nyní musíme přidat následující pravidla na začátek /etc/ufw/before.rules soubor. Zde předpokládáme, že rozhraní použité pro připojení je eth0 :

*nat:POSTROUTING ACCEPT [0:0]-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADECOMMIT

Nakonec musíme povolit příchozí provoz pro openvpn služba ve správci brány firewall ufw:

$ sudo ufw povolit openvpn

V tomto okamžiku můžeme restartovat ufw, aby se změny uplatnily. Pokud váš firewall nebyl v tomto okamžiku povolen, ujistěte se, že ssh služba je vždy povolena, jinak můžete být odpojeni, pokud pracujete na dálku.

$ sudo ufw zakázat &&sudo ufw povolit

Nyní můžeme spustit a povolit službu openvpn.service při bootování:

$ sudo systemctl restart openvpn &&sudo systemctl povolit openvpn

Krok 8 – Generování klientského klíče a žádosti o certifikát

Nastavení našeho serveru je nyní dokončeno. Další krok spočívá ve vygenerování klientského klíče a žádosti o certifikát. Postup je stejný, jaký jsme použili pro server:jen jako jméno použijeme „klient“ místo „sever“, vygenerujeme klíč a žádost o certifikát a poté předáme CA stroji, který má být podepsán.

$ ./easyrsa gen-req klient nopass

Stejně jako dříve budeme požádáni o zadání běžného názvu. Budou vygenerovány následující soubory:

  • /home/egdoc/openvpnserver/pki/reqs/client.req
  • /home/egdoc/openvpnserver/pki/private/client.key

Zkopírujeme client.req do stroje CA:

$ scp pki/reqs/client.req egdoc@camachine:/home/egdoc

Jakmile je soubor zkopírován, na camachine , importujeme požadavek:

$ ./easyrsa import-req ~/client.req client

Poté certifikát podepíšeme:

$ ./easyrsa sign-req klientský klient

Po zadání hesla CA bude certifikát vytvořen jako pki/issued/client.crt . Odeberte soubor požadavku a zkopírujte podepsaný certifikát zpět na server VPN:

$ rm ~/client.req$ scp pki/issued/client.crt egdoc@openvpnmachine:/home/egdoc

Pro usnadnění si vytvořte adresář, do kterého budou uloženy všechny věci související s klientem, a přesuneme do něj klientský klíč a certifikát:

$ mkdir ~/client$ mv ~/client.crt pki/private/client.key ~/client

Dobře, už jsme skoro tam. Nyní musíme zkopírovat šablonu konfigurace klienta, /usr/share/doc/openvpn/examples/sample-config-files/client.conf uvnitř ~/client adresář a upravit jej tak, aby vyhovoval našim potřebám:

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

Zde jsou řádky, které musíme v souboru změnit. Na řádku 42 vložte skutečnou IP adresu serveru nebo název hostitele místo my-server-1 :

vzdálený můj-server-1 1194

Na řádcích 61 a 62 odstraňte úvodní ; znak pro snížení úrovně oprávnění po inicializaci:

uživatel nonegroup nogroup

Na řádcích 88 na 90 a 108 vidíme, že se odkazuje na certifikát CA, klientský certifikát, klientský klíč a klíč tls-auth. Tyto řádky chceme okomentovat, protože skutečný obsah souborů vložíme mezi dvojici vyhrazených „tagů“:

  • <ca></ca> pro certifikát CA
  • <cert></cert> pro klientský certifikát
  • <key></key> pro klientský klíč
  • <tls-auth></tls-auth> pro klíč tls-auth

Jakmile jsou řádky okomentovány, připojíme na konec souboru následující obsah:

# Zde je obsah souboru ca.crt# Zde je obsah souboru client.crt# Zde je obsah klienta .key souborkey-direction 1# Zde je obsah souboru ta.key

Po dokončení úprav souboru jej přejmenujeme na .ovpn přípona:

$ mv ~/client/client.conf ~/client/client.ovpn

Zbývá pouze importovat soubor do naší klientské aplikace, aby se mohl připojit k naší VPN. Pokud například používáme desktopové prostředí GNOME, můžeme importovat soubor ze Sítě části ovládacího panelu. V sekci VPN stačí kliknout na + a poté na „importovat ze souboru“ pro výběr a import souboru „.ovpn“, který jste dříve přenesli do klientského počítače.



Rozhraní GNOME pro import souboru .ovpn

Závěry

V tomto tutoriálu jsme viděli, jak vytvořit fungující nastavení OpenVPN. Vygenerovali jsme certifikační autoritu a použili jsme k podepisování serverových a klientských certifikátů, které jsme vygenerovali společně s odpovídajícími klíči. Viděli jsme, jak nakonfigurovat server a jak nastavit síť, umožňující předávání paketů a provádění potřebných úprav konfigurace ufw firewallu. Nakonec jsme viděli, jak vygenerovat klienta .ovpn soubor, který lze importovat z klientské aplikace za účelem snadného připojení k naší VPN. Užijte si to!


Ubuntu
  1. Jak nastavit Rsyslog Server na Ubuntu 18.04 LTS

  2. Jak nastavit NTP server na Ubuntu a LinuxMint

  3. Nastavení serveru Rsyslog na Ubuntu 20.04 – Jak na to?

  1. Základní nastavení připojení klienta/serveru Ubuntu 20.04 OpenVPN

  2. Základní nastavení připojení klienta/serveru Ubuntu 22.04 OpenVPN

  3. Jak nainstalovat OpenVPN na Ubuntu 18.04

  1. Jak nastavit FTP server s VSFTPD na Ubuntu 20.04

  2. Jak nastavit FTP server s VSFTPD na Ubuntu 18.04

  3. Jak nastavit server OpenVPN na Ubuntu 18.04