Dokonalý sprievodca nastavením zabezpečeného servera OpenVPN na Ubuntu 20.04
Virtuálna privátna sieť (VPN) vám umožňuje bezpečne a súkromne sa pripojiť k vzdialenej súkromnej sieti, napríklad k vašej kancelárskej sieti alebo k internetu, a to tak, ako keby ste boli priamo pripojení k súkromnej sieti.
VPN funguje v architektúre server-klient. Server VPN je nasadený na počítači a je verejne prístupný cez internet. Server VPN je možné nakonfigurovať tak, aby umožňoval pripojenie k súkromnej sieti LAN, ako je napríklad kancelárska sieť, alebo aby umožňoval pripojenia na internet. Používateľ sa pripojí k serveru VPN pomocou klienta VPN na svojom lokálnom počítači. Komunikácia medzi serverom VPN a klientom prebieha pomocou zabezpečeného tunelovacieho protokolu. Pre internet sa zdá, že cieľom prenosu je server VPN; prevádzka však prechádza ku klientovi cez server.
VPN má v každodennom živote mnoho využití, napríklad bezpečné pripojenie k verejnej sieti Wi-Fi, ktorá je často ohrozená alebo obchádza geografické obmedzenia na určitých webových stránkach pripojením k sieti VPN so sídlom v krajine, ktorú webová stránka povoľuje.
OpenVPN je široko používaná implementácia VPN, ktorá umožňuje širokú škálu konfigurácií a možností. Používa protokol Secure Sockets Layer (SSL) na šifrovanie dát a predzdieľaných kľúčov, používateľského mena/hesla alebo certifikátov na autentifikáciu klienta VPN. V tomto článku uvidíme, ako nastaviť server VPN a klienta VPN na Ubuntu 20.04.
Inštalácia
OpenVPN je k dispozícii v oficiálnych úložiskách Ubuntu v balíku openvpn
. Tento balík nainštaluje server OpenVPN aj klienta.
sudo apt install openvpn
Ako už bolo spomenuté, OpenVPN používa certifikáty SSL na šifrovanie údajov medzi serverom a klientom. Na vydávanie certifikátov pre VPN musíme nastaviť vlastnú certifikačnú autoritu (CA). Všimnite si, že toto by malo byť nastavené na inom počítači, ako je ten, kde je nastavené OpenVPN; Dôvodom je, že ak je na rovnakom serveri a ak dôjde k jeho kompromitácii, útočník môže získať prístup k súkromnému kľúču a napadnúť tak pripojenie VPN.
Na nastavenie certifikačnej autority použijeme nástroj s názvom „Easy-RSA“. Ak ho chcete nainštalovať, spustite nasledovné na počítači CA, serveri OpenVPN a klientskom počítači, pretože na nastavenie CA je potrebná konfigurácia na všetkých troch z nich.
sudo apt install easy-rsa
Teraz najskôr nakonfigurujeme certifikačnú autoritu na počítači CA a vykonáme niekoľko požadovaných konfiguračných krokov pre to isté na serveri Open VPN.
Nastavenie certifikačnej autority
Počiatočné nastavenie na stroji CA
Teraz tento balík nainštaluje príkaz s názvom make-cadir
ktorý sa používa na vytvorenie priečinka pre konfiguráciu certifikačnej autority. Pomocou toho vytvoríme priečinok a zadajte priečinok.
make-cadir cert_authority && cd cert_authority
Otvorte súbor s názvom vars
vytvorené v tomto adresári. Tento súbor obsahuje niektoré konfiguračné premenné, ktoré musíme upraviť. Hodnoty, ktoré je potrebné upraviť, sú na riadkoch 91-96 za komentárom o Organizačné oblasti ktorý popisuje tieto polia. Odkomentujte riadky a namiesto vzorových hodnôt vyplňte príslušné hodnoty.
Uložte a ukončite súbor. Ak používate editor vim, stlačte Esc
, typ :wq
a stlačte Zadajte
uložiť a ukončiť.
Ďalej spustíme easyrsa
program v adresári na nastavenie infraštruktúry verejného kľúča (PKI), ktorá sa použije na generovanie verejného kľúča a certifikátov.
./easyrsa init-pki
V ďalšom kroku sa vygeneruje kľúč CA a certifikát. Keď príkaz vyzve na zadanie hesla, zadajte heslo pre kľúč CA. Po zobrazení výzvy zadajte aj bežný názov. Ak toto necháte prázdne, použije sa predvolený názov Easy-RSA CA name.
./easyrsa build-ca
Ako vidíme z výstupu, certifikát a kľúč boli vygenerované. Tento kľúč sa použije na podpísanie certifikátov klienta a servera, preto by sa ho nikdy nemalo dotýkať ani upravovať.
Teraz máme nastavenie PKI. Ďalším krokom je vytvorenie serverového kľúča a certifikátu na stroji, ktorý budeme používať ako OpenVPN server. Tento certifikát bude neskôr podpísaný strojom CA.
Generovanie serverového kľúča a certifikátu na serverovom stroji
Easy RSA sme už nainštalovali na server. Teraz vykonajte tri kroky na serveri, ktoré sme predtým vykonali na stroji CA, tj. vytvorenie adresára CA pomocou make-cadir
a ísť dovnútra, modifikovať premenné v vars
súbor a generovanie PKI pomocou ./easyrsa init-pki
príkaz.
Ďalej musíme spustiť príkaz na vygenerovanie žiadosti o certifikát servera a kľúča.
./easyrsa gen-req server nopass
Všimnite si, že sme túto možnosť prešli nopass
takže príkaz nás nevyzve na zadanie hesla pre kľúč servera. Stále sa zobrazí výzva na zadanie bežného názvu servera, ktorý môžete zadať čokoľvek, alebo ho nechať prázdne pre predvolený názov (server) na použitie.
Presuňte vygenerovaný súbor kľúča do /etc/openvpn
adresár.
sudo mv pki/private/server.key /etc/openvpn
Pošlite žiadosť o certifikát do zariadenia CA. Použijeme príkaz scp
pre tento účel.
scp pki/reqs/server.req user@CA_MACHINE_HOSTNAME:/adresár
Na obrázku vyššie je hostiteľ 45.79.125.41 počítač CA. Certifikát sme skopírovali do adresára /root.
Teraz bol certifikát servera skopírovaný do počítača CA. Ďalším krokom je vrátiť sa späť na počítač CA a podpísať tento certifikát.
Podpísanie certifikátu servera v CA
Najprv si overme, či bol súbor žiadosti o certifikát zo servera skopírovaný na stroj CA. Prejdite do adresára, do ktorého sme skopírovali súbor (v mojom príklade / root) a spustite ls
.
:~# cd /root && ls cert_authority server.req
Ako vidíme, súbor server.req
je prítomný. Ďalej prejdite do adresára CA a importujte túto požiadavku.
cd cert_authority ./easyrsa import-req /root/server.req server
Ak chcete podpísať túto žiadosť, spustite nasledujúci príkaz.
./easyrsa sign-req server server
Tu je prvým argumentom typ žiadosti, t.j. server, a druhý argument je bežný názov servera, pre ktorý sme predtým používali predvolenú hodnotu, t.j. server.
Zadajte frázu Áno, a heslo pre kľúč CA, keď sa zobrazí výzva.
Teraz môžeme odstrániť súbor žiadosti o certifikát a skopírovať vygenerovaný certifikát pre server, ako aj verejný certifikát CA späť na server.
rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root
Ďalej musíme vykonať niekoľko ďalších krokov, aby sme zaistili bezpečné pripojenie VPN.
Generovanie parametrov DH
Výmena kľúčov DH (Diffie-Hellman) je algoritmus na zabezpečenie bezpečnej výmeny krypto kľúčov cez nezabezpečený kanál. Najprv presuňte prijatý certifikát a verejný certifikát CA do /etc/openvpn
.
mv /root/ca.crt /root/server.crt /etc/openvpn
Prejdite do priečinka CA na serveri a spustite nasledujúci príkaz na vygenerovanie parametrov DH. Generovanie môže trvať dlho.
./easyrsa gen-dh
Teraz presuňte vygenerovaný súbor do /etc/openvpn
.
mv /root/cert_authority/pki/dh.pem /etc/openvpn
Generovanie kľúčov TA
OpenVPN používa ďalšie dodatočné bezpečnostné opatrenie pomocou autorizačného kľúča TLS. Ak chcete vygenerovať autorizačný kľúč TLS, spustite:
openvpn --genkey --secret tls_auth.key
A posuňte kľúč na /etc/openvpn
.
mv tls_auth.key /etc/openvpn
Konfigurácia kľúča servera a nastavenie certifikačnej autority je teraz hotové. Prejdime teraz k samotnej konfigurácii servera VPN.
Konfigurácia servera OpenVPN
Konfiguračný súbor pre server OpenVPN sa nevytvorí automaticky, môžeme však použiť konfiguračný súbor šablóny 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
Otvorte súbor pomocou vim alebo ľubovoľného editora podľa vášho výberu.
cd /etc/openvpn vim server.conf
Musíme zadať bežné názvy kľúčov a certifikátov, ktoré sme predtým vygenerovali. Choďte na linku č. 78. Keďže sme použili všetky predvolené názvy, ponecháme ich nezmenené. Potom skontrolujte názov súboru parametrov DH na riadku 85. Použili sme názov dh.pem, takže ho zmeňme.
Ďalej upravme oprávnenia pre server OpenVPN. Prejdite na riadok 274 a 275 a odstráňte vedenie ;
odkomentovať to.
Podobne prejdite na riadok 192 a odstráňte bodkočiarku. Táto direktíva umožňuje prevádzke všetkých klientov prechádzať cez VPN.
Uložte a ukončite súbor.
Zmeňte vlastníctvo priečinka /etc/openvpn na root.
sudo chown -R root:root /etc/openvpn
Nastavenie siete a brány firewall
Musíme povoliť presmerovanie IP na serveri, aby sme umožnili posielanie paketov z a do klienta VPN. Zrušte komentár na riadku 28 /etc/sysctl.conf
:
Uložte a ukončite súbor.
Reštart systemctl
aby sa tieto zmeny udiali.
sudo sysctl -p
Musíme nastaviť preklad sieťových adries (NAT) na serveri pomocou brány firewall UFW, aby sme klientovi VPN umožnili prístup na internet pomocou adresy IP servera VPN. Najprv povoľme presmerovanie paketov v konfigurácii brány firewall. Otvorené /etc/default/ufw
a zmeňte premennú na riadku 19 na ACCEPT.
Uložte a ukončite súbor.
Teraz pridajte do súboru nasledujúce pravidlá /etc/ufw/before.rules
pred filter riadok v súbore.
*nat :POSTROUTING AKCEPTOVAŤ [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT
Namiesto toho zadajte svoje sieťové rozhranie . Pomocou príkazu môžete vidieť svoje sieťové rozhranie ifconfig
.
Povoľte prenos pre službu OpenVPN na bráne firewall a povoľte port 1194.
sudo ufw povoliť openvpn && sudo ufw povoliť 1194
Znova načítajte službu brány firewall.
sudo ufw znovu načítať
Teraz môžeme reštartovať démona servera Open VPN spustením:
reštart služby sudo openvpn
Povoľte jej spustenie v čase zavádzania spustením:
sudo systemctl povoliť openvpn
Server OpenVPN je teraz nakonfigurovaný a spustený. Prejdime teraz k žiadosti o certifikát klienta a generovaniu kľúčov a ďalšej konfigurácii.
Konfigurácia klienta OpenVPN
Pre klienta potrebujeme vygenerovať kľúč a žiadosť o certifikát. Postup je rovnaký ako pre server.
Hoci klientsky kľúč a žiadosť o certifikát možno vytvoriť na klientskom počítači a potom preniesť na stroj CA, odporúča sa vytvoriť ho na serveri. Výhodou tohto vykonania na serveri je, že môžete vytvoriť skript na vykonanie všetkých požadovaných krokov na serveri, čo uľahčuje novému klientovi pripojenie k VPN.
Prejdite do priečinka CA na serveri a spustite nasledovné:
cd ~/cert_authority ./easyrsa gen-req klient nopass
Podobným spôsobom ako predtým zadajte po výzve bežný názov alebo nechajte pole prázdne, ak chcete použiť predvolený bežný názov, t.j. zákazník.
Teraz skopírujeme vygenerovanú žiadosť o certifikát klienta do počítača CA.
scp pki/reqs/client.req [email protected]:/root
Importujme túto požiadavku do stroja CA:
./easyrsa import-req /root/client.req klienta
A teraz to podpíšme:
./easyrsa klient klienta sign-req
ZadajteÁno
keď sa zobrazí výzva na pokračovanie. Po zobrazení výzvy zadajte heslo pre kľúč CA.
Teraz môžeme odstrániť požadovaný súbor pre klienta a skopírovať požiadavku späť na server VPN.
rm /root/client.req scp pki/issued/client.crt [email protected]:/root
Vytvorme priečinok s názvom zákazník
uchovávať všetky súbory súvisiace s klientom na serveri VPN. Do tohto priečinka presunieme klientsky kľúč a certifikát.
mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client
Teraz vytvorte konfiguračný súbor z dostupnej šablóny, podobne ako sme vytvorili konfiguračný súbor servera.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client
Otvorte súbor client.conf
. V riadku 42 zadajte namiesto názvu hostiteľa alebo IP adresu vášho servera môj-server-1
.
Odkomentujte riadky 61 a 62 odstránením úvodnej bodkočiarky, čím znížite úroveň práv pre súbor.
Ďalej zakomentujte riadky 88-90 a riadok 108. Dôvodom je, že obsah spomínaných súborov chceme pridať ručne namiesto použitia umiestnení súborov. Účelom toho je, že konfiguračný súbor klienta sa neskôr prenesie na klienta, kde v skutočnosti nebudeme mať súbory kľúča klienta a certifikátu; preto skopírujeme obsah tých v samotnom konfiguračnom súbore.
Do konfiguračného súboru klienta pripojte nasledovné. Do daných značiek zadajte obsah príslušných súborov.
# Sem vložte obsah súboru ca.crt # Sem vložte obsah súboru client.crt # Sem vložte obsah súboru client.key smer kľúča 1 # Sem vložte obsah súboru tls_auth.key
Uložte a ukončite súbor. Premenujte tento súbor z client.conf
do klient.ovpn
, pretože posledne menované je rozšírenie potrebné pre konfiguračné súbory, ktoré možno importovať ako sieťové konfigurácie.
Teraz preneste súbor klient.ovpn
klientovi, t.j. lokálnemu stroju.
Bežať scp
na vašom klientskom počítači na prenos súboru zo servera na váš lokálny počítač.
scp user@server_ip:/path_to_file local_destination_path
Nakoniec musíme použiť tento konfiguračný súbor na pripojenie k serveru VPN. Dá sa to urobiť cez príkazový riadok aj cez GUI.
Ak chcete spustiť klienta VPN z príkazového riadka, spustite:
sudo openvpn --config client.ovpn
A to je jediný príkaz, ktorý musíte spustiť, aby ste spustili klienta VPN.
Ak chcete spustiť klienta VPN cez GUI, vykonajte nasledujúce kroky.
Prejdite na Nastavenia » Sieť na klientskom počítači.
Klikni na + v sekcii VPN a z možností vyberte „Importovať zo súboru...“.
Kliknutím na „Pridať“ začnite používať VPN.
Všimnite si, že v časti „Brána“ je to adresa IP servera.
Nakoniec prepnite tlačidlo „klientská VPN“, aby ste povolili VPN na počítači.
Vytvorenie pripojenia VPN môže trvať niekoľko sekúnd. Počas nastavovania sa v ľavom hornom rohu obrazovky zobrazí nové logo pokroku pre VPN a po nastavení sa zmení na logo VPN.
Ak chcete overiť, či VPN funguje správne, spustite nasledovné:
curl //ipinfo.io/ip
Mal by vrátiť IP adresu vášho servera. Alebo si tiež môžete skontrolovať svoju IP adresu jednoduchým vyhľadaním „Moja IP“ na Google. Ak naše nastavenie VPN funguje správne, mala by zobrazovať IP adresu vášho servera VPN.
Záver
V tomto článku sme videli, ako nakonfigurovať server OpenVPN, certifikačnú autoritu a klienta OpenVPN. Ak chcete pridať ďalších klientov do VPN, musíme teraz postupovať podľa postupu na vygenerovanie a podpísanie certifikátu pre klienta a použiť rovnaký konfiguračný súbor vytvorený tu, len so zmenenými hodnotami kľúča klienta a certifikátu.
V prípade pomalšieho internetového pripojenia je možné, že ak sa na komunikáciu používa UDP, dochádza k značnej strate paketov. Používateľ môže prejsť na TCP zrušením komentára v riadku proto tcp
a komentovanie na linke preto udp
v konfiguračnom súbore servera.
Tiež v prípade, že sa vyskytnú iné chyby, môžete nastaviť úroveň protokolovania pomocou sloveso
v konfiguračných súboroch servera aj klienta. Môžete zadať hodnoty medzi 0 a 9. Čím vyššia je hodnota tejto smernice, tým podrobnejší bude protokol.