Nejlepší průvodce nastavením zabezpečeného serveru OpenVPN na Ubuntu 20.04
Virtuální privátní síť (VPN) vám umožňuje bezpečně a soukromě se připojit ke vzdálené privátní síti, například vaší kancelářské síti nebo Internetu, a to tak, jako byste byli přímo připojeni k privátní síti.
VPN funguje v architektuře server-klient. Server VPN je nasazen na počítači a je veřejně přístupný přes internet. Server VPN lze nakonfigurovat tak, aby umožňoval připojení k soukromé síti LAN, jako je například kancelářská síť, nebo umožňoval připojení k internetu. Uživatel se připojí k serveru VPN pomocí klienta VPN na svém místním počítači. Komunikace mezi VPN serverem a klientem probíhá pomocí zabezpečeného tunelovacího protokolu. Pro internet se zdá, jako by cílem provozu byl server VPN; provoz však předává klientovi přes server.
VPN má mnoho využití v každodenním životě, jako je bezpečné připojení k veřejné Wifi síti, která je často kompromitována nebo obcházení geografických omezení na určitých webech připojením k VPN se sídlem v zemi, kterou web povoluje.
OpenVPN je široce používaná implementace VPN, která umožňuje širokou škálu konfigurací a možností. Používá protokol Secure Sockets Layer (SSL) pro šifrování dat a předsdílených klíčů, uživatelského jména/hesla nebo certifikátů pro autentizaci VPN klienta. V tomto článku uvidíme, jak nastavit server VPN a klienta VPN na Ubuntu 20.04.
Instalace
OpenVPN je k dispozici v oficiálních repozitářích Ubuntu v balíčku openvpn
. Tento balíček nainstaluje jak server OpenVPN, tak klienta.
sudo apt install openvpn
Jak již bylo zmíněno, OpenVPN používá SSL certifikáty k šifrování dat mezi serverem a klientem. Potřebujeme nastavit vlastní certifikační autoritu (CA), která bude vydávat certifikáty pro VPN. Všimněte si, že toto by mělo být nastaveno na jiném počítači, než na kterém je nastaveno OpenVPN; důvodem je, že pokud je na stejném serveru a dojde-li k jeho kompromitaci, může se útočník dostat k privátnímu klíči a napadnout tak připojení VPN.
K nastavení certifikační autority použijeme nástroj s názvem ‚Easy-RSA‘. Chcete-li jej nainstalovat, spusťte následující postup na počítači CA, serveru OpenVPN a klientském počítači, protože pro nastavení CA je nutná konfigurace na všech třech z nich.
sudo apt install easy-rsa
Nyní nejprve nakonfigurujeme certifikační autoritu na počítači CA a provedeme některé požadované konfigurační kroky pro totéž na počítači serveru Open VPN.
Nastavení certifikační autority
Počáteční nastavení na stroji CA
Nyní tento balíček nainstaluje příkaz s názvem make-cadir
který se používá k vytvoření složky pro konfiguraci certifikační autority. Vytvořme pomocí toho složku a zadejte složku.
make-cadir cert_authority && cd cert_authority
Otevřete soubor s názvem vars
vytvořené v tomto adresáři. Tento soubor obsahuje některé konfigurační proměnné, které musíme upravit. Hodnoty, které je třeba upravit, jsou na řádcích 91-96 za komentářem o Organizační pole která tato pole popisuje. Odkomentujte řádky a místo vzorových hodnot vyplňte příslušné hodnoty.
Uložte a ukončete soubor. Pokud používáte editor vim, stiskněte Esc
, typ :wq
a stiskněte Vstupte
uložit a ukončit.
Dále spustíme easyrsa
program v adresáři pro nastavení infrastruktury veřejného klíče (PKI), která bude použita pro generování veřejného klíče a certifikátů.
./easyrsa init-pki
V dalším kroku se vygeneruje klíč CA a certifikát. Když příkaz vyzve k zadání hesla, zadejte heslo pro klíč CA. Po zobrazení výzvy zadejte také běžný název. Pokud toto pole ponecháte prázdné, použije se výchozí název Easy-RSA CA name.
./easyrsa build-ca
Jak vidíme z výstupu, certifikát a klíč byly vygenerovány. Tento klíč bude použit k podepsání klientských a serverových certifikátů, proto by se ho nikdy neměl dotýkat ani jej upravovat.
Nyní máme nastavení PKI. Dalším krokem je vytvoření klíče serveru a certifikátu na stroji, který budeme používat jako OpenVPN server. Tento certifikát bude později podepsán strojem CA.
Generování klíče serveru a certifikátu na počítači serveru
Easy RSA jsme již nainstalovali na server. Nyní proveďte tři kroky na stroji serveru, které jsme dříve provedli na stroji CA, viz. vytvoření adresáře CA pomocí make-cadir
a jít dovnitř a upravit proměnné v vars
soubor a generování PKI pomocí ./easyrsa init-pki
příkaz.
Dále musíme spustit příkaz pro vygenerování žádosti o certifikát serveru a klíče.
./easyrsa gen-req server nopass
Všimněte si, že jsme prošli možností nopass
aby nás příkaz nevyzval k zadání hesla pro klíč serveru. Stále se zobrazí výzva k zadání běžného názvu serveru, který můžete zadat cokoli, nebo jej ponechat prázdné pro výchozí název (server) být použit.
Přesuňte vygenerovaný soubor klíče dovnitř /etc/openvpn
adresář.
sudo mv pki/private/server.key /etc/openvpn
Odešlete žádost o certifikát na počítač CA. Použijeme příkaz scp
pro tento účel.
scp pki/reqs/server.req user@CA_MACHINE_HOSTNAME:/adresář
Na výše uvedeném snímku obrazovky je hostitelem 45.79.125.41 počítač CA. Certifikát jsme zkopírovali do adresáře /root.
Nyní byl certifikát serveru zkopírován do počítače CA. Dalším krokem je vrátit se na stroj CA a podepsat tento certifikát.
Podepsání certifikátu serveru v CA
Nejprve ověřte, zda byl soubor žádosti o certifikát ze serveru zkopírován na stroj CA. Přejděte do adresáře, kam jsme soubor zkopírovali (v mém příkladu / root) a spusťte ls
.
:~# cd /root && ls cert_authority server.req
Jak vidíme, soubor server.req
je přítomen. Dále přejděte do adresáře CA a importujte tento požadavek.
cd cert_authority ./easyrsa import-req /root/server.req server
Chcete-li podepsat tento požadavek, spusťte následující příkaz.
./easyrsa server sign-req server
Zde je prvním argumentem typ požadavku, tj. server, a druhý argument je běžný název serveru, pro který jsme dříve používali výchozí hodnotu, tj. server.
Zadejte frázi Ano, a po zobrazení výzvy heslo pro klíč CA.
Nyní můžeme odstranit soubor žádosti o certifikát a zkopírovat vygenerovaný certifikát pro server i veřejný certifikát CA zpět na server.
rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root
Dále musíme provést několik dalších kroků, abychom zajistili bezpečné připojení VPN.
Generování parametrů DH
Výměna klíčů DH (Diffie-Hellman) je algoritmus, který zajišťuje bezpečnou výměnu krypto klíčů přes nezabezpečený kanál. Nejprve přesuňte přijatý certifikát a veřejný certifikát CA do /etc/openvpn
.
mv /root/ca.crt /root/server.crt /etc/openvpn
Přejděte do složky CA na serveru a spusťte následující příkaz pro vygenerování parametrů DH. Vygenerování může trvat dlouho.
./easyrsa gen-dh
Nyní přesuňte vygenerovaný soubor do /etc/openvpn
.
mv /root/cert_authority/pki/dh.pem /etc/openvpn
Generování klíčů TA
OpenVPN používá další dodatečné bezpečnostní opatření pomocí autentizačního klíče TLS. Chcete-li vygenerovat ověřovací klíč TLS, spusťte:
openvpn --genkey --secret tls_auth.key
A přesuňte klíč na /etc/openvpn
.
mv tls_auth.key /etc/openvpn
Konfigurace klíče serveru a nastavení certifikační autority je nyní hotovo. Přejděme nyní k samotné konfiguraci VPN serveru.
Konfigurace serveru OpenVPN
Konfigurační soubor pro server OpenVPN se nevytváří automaticky, můžeme však použít konfigurační soubor šablony z openvpn
balík.
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz
Otevřete soubor pomocí vim nebo libovolného editoru podle vašeho výběru.
cd /etc/openvpn vim server.conf
Musíme zadat běžné názvy klíčů a certifikátů, které jsme vygenerovali dříve. Přejděte na linku č. 78. Protože jsme použili všechny výchozí názvy, ponecháváme je beze změny. Poté zkontrolujte název souboru parametrů DH na řádku 85. Použili jsme název dh.pem, takže jej změňme.
Dále upravíme oprávnění pro server OpenVPN. Přejděte na řádek 274 a 275 a odstraňte vedení ;
odkomentovat to.
Podobně přejděte na řádek 192 a odstraňte středník. Tato direktiva umožňuje, aby provoz všech klientů procházel přes VPN.
Uložte a ukončete soubor.
Změňte vlastnictví složky /etc/openvpn na root.
sudo chown -R root:root /etc/openvpn
Nastavení sítě a firewallu
Musíme povolit předávání IP na serveru, abychom umožnili předávání paketů z a do klienta VPN. Odebrat komentář na řádku 28 /etc/sysctl.conf
:
Uložte a ukončete soubor.
Restartujte systemctl
aby k těmto změnám došlo.
sudo sysctl -p
Potřebujeme nastavit překlad síťových adres (NAT) na serveru pomocí firewallu UFW, abychom klientovi VPN umožnili přístup k internetu pomocí IP adresy serveru VPN. Nejprve povolme předávání paketů v konfiguraci brány firewall. Otevřeno /etc/default/ufw
a změňte proměnnou na řádku 19 na ACCEPT.
Uložte a ukončete soubor.
Nyní přidejte do souboru následující pravidla /etc/ufw/before.rules
před filtr řádek v souboru.
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT
Místo toho zadejte své síťové rozhraní . Pomocí příkazu můžete vidět své síťové rozhraní ifconfig
.
Povolte provoz pro službu OpenVPN na bráně firewall a povolte port 1194.
sudo ufw povolit openvpn && sudo ufw povolit 1194
Znovu načtěte službu brány firewall.
sudo ufw znovu načíst
Nyní můžeme restartovat démona serveru Open VPN spuštěním:
restartování služby sudo openvpn
Povolte spuštění při spouštění spuštěním:
sudo systemctl povolit openvpn
Server OpenVPN je nyní nakonfigurován a spuštěn. Nyní přejdeme k žádosti o klientský certifikát a generování klíčů a další konfiguraci.
Konfigurace klienta OpenVPN
Potřebujeme pro klienta vygenerovat klíč a žádost o certifikát. Postup je stejný jako u serveru.
Přestože klientský klíč a žádost o certifikát lze vytvořit na klientském počítači a poté přenést na stroj CA, doporučuje se vytvořit je na serveru. Výhodou tohoto provedení na serveru je, že můžete vytvořit skript pro provedení všech požadovaných kroků na serveru, což usnadní novému klientovi připojení k VPN.
Přejděte do složky CA na serveru a spusťte následující:
cd ~/cert_authority ./easyrsa gen-req klient nopass
Podobným způsobem jako dříve zadejte po výzvě běžný název nebo jej ponechte prázdné, chcete-li použít výchozí běžný název, tj. klienta.
Nyní zkopírujeme vygenerovaný požadavek klientského certifikátu na počítač CA.
scp pki/reqs/client.req [email protected]:/root
Naimportujme tento požadavek do stroje CA:
./easyrsa import-req /root/client.req klienta
A teď to podepišme:
./easyrsa klientský klient sign-req
VstupteAno
až budete vyzváni k pokračování. Na výzvu zadejte heslo pro klíč CA.
Nyní můžeme odstranit požadovaný soubor pro klienta a zkopírovat požadavek zpět na server VPN.
rm /root/client.req scp pki/issued/client.crt [email protected]:/root
Vytvoříme složku s názvem klienta
uchovat všechny soubory související s klientem na serveru VPN. Do této složky přesuneme klientský klíč a certifikát.
mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client
Nyní vytvoříme konfigurační soubor z dostupné šablony, podobně jako jsme vytvořili konfigurační soubor serveru.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client
Otevřete soubor client.conf
. Na řádek 42 zadejte místo názvu hostitele nebo IP adresu vašeho serverového stroje můj-server-1
.
Odkomentujte řádky 61 a 62 odstraněním úvodního středníku, abyste snížili oprávnění pro soubor.
Dále zakomentujte řádky 88-90 a řádek 108. Důvodem je, že chceme přidat obsah zmíněných souborů ručně místo použití umístění souborů. Účelem toho je, že konfigurační soubor klienta bude později přenesen na klienta, kde ve skutečnosti nebudeme mít soubory klientského klíče a certifikátu; proto zkopírujeme obsah těch v samotném konfiguračním souboru.
Ke konfiguračnímu souboru klienta připojte následující. Do daných značek zadejte obsah souborů příslušných souborů.
# Sem vložte obsah souboru ca.crt # Sem vložte obsah souboru client.crt # Sem vložte obsah souboru client.key směr klíče 1 # Sem vložte obsah souboru tls_auth.key
Uložte a ukončete soubor. Přejmenujte tento soubor z client.conf
na klient.ovpn
, protože posledně jmenovaný je rozšířením požadovaným pro konfigurační soubory, které lze importovat jako síťové konfigurace.
Nyní přeneste soubor klient.ovpn
ke klientovi, tj. místnímu počítači.
Běh scp
na vašem klientském počítači k přenosu souboru ze serveru na váš místní počítač.
scp uživatel@ip_serveru:/cesta_k_souboru místní_cílová_cesta
Nakonec musíme tento konfigurační soubor použít k připojení k serveru VPN. To lze provést jak pomocí příkazového řádku, tak pomocí GUI.
Chcete-li spustit klienta VPN z příkazového řádku, spusťte:
sudo openvpn --config client.ovpn
A to je jediný příkaz, který musíte spustit ke spuštění klienta VPN.
Chcete-li spustit klienta VPN prostřednictvím GUI, proveďte následující kroky.
Přejděte na Nastavení » Síť na klientském počítači.
Klikněte na + v sekci VPN a z možností vyberte „Importovat ze souboru…“.
Kliknutím na „Přidat“ začněte používat VPN.
Všimněte si, že pod ‚Brána‘ je to IP adresa serveru.
Nakonec přepněte tlačítko „klientská VPN“, abyste povolili VPN na počítači.
Navázání připojení VPN může trvat několik sekund. Během nastavování se v levém horním rohu obrazovky zobrazí nové logo průběhu pro VPN a po nastavení se změní na logo VPN.
Chcete-li ověřit, zda VPN funguje správně, spusťte následující:
curl //ipinfo.io/ip
Měl by vrátit IP adresu vašeho serveru. Nebo můžete také zkontrolovat svou IP adresu jednoduše vyhledáním „Moje IP“ na Googlu. Pokud naše nastavení VPN funguje správně, měla by ukazovat IP adresu vašeho VPN serveru.
Závěr
V tomto článku jsme viděli, jak nakonfigurovat server OpenVPN, certifikační autoritu a klienta OpenVPN. Chcete-li přidat další klienty do VPN, musíme nyní postupovat podle postupu pro vygenerování a podepsání certifikátu pro klienta a použít stejný konfigurační soubor vytvořený zde, pouze se změněným klientským klíčem a hodnotami certifikátu.
V případě pomalejšího internetového připojení je možné, že pokud se pro komunikaci používá UDP, dochází ke značné ztrátě paketů. Uživatel může přejít na TCP zrušením komentáře na řádku proto tcp
a komentování na lince proto udp
v konfiguračním souboru serveru.
Také v případě, že se vyskytnou další chyby, můžete nastavit úroveň protokolování pomocí sloveso
v konfiguračních souborech serveru i klienta. Můžete zadat hodnoty mezi 0 a 9. Čím vyšší je hodnota této směrnice, tím podrobnější bude protokol.