Najboljši vodnik za nastavitev varnega strežnika OpenVPN v Ubuntu 20.04
Navidezno zasebno omrežje (VPN) vam omogoča, da se varno in zasebno povežete z oddaljenim zasebnim omrežjem, na primer s pisarniškim omrežjem ali internetom, na način, kot da ste neposredno povezani z zasebnim omrežjem.
VPN deluje v arhitekturi strežnik-odjemalec. Strežnik VPN je nameščen na napravi in je javno dostopen prek interneta. Strežnik VPN je mogoče konfigurirati tako, da omogoča povezavo z zasebnim LAN-om, kot je pisarniško omrežje, ali omogoča povezave z internetom. Uporabnik se poveže s strežnikom VPN s pomočjo odjemalca VPN na svojem lokalnem računalniku. Komunikacija med strežnikom VPN in odjemalcem poteka z uporabo varnega protokola tuneliranja. Internetu se zdi, kot da je cilj prometa strežnik VPN; vendar promet prehaja do odjemalca preko strežnika.
VPN ima veliko uporab v vsakdanjem življenju, na primer varno povezovanje z javnim omrežjem Wifi, ki je pogosto ogroženo ali zaobide geo-omejitve na določenih spletnih mestih s povezovanjem na VPN s sedežem v državi, ki jo spletno mesto dovoljuje.
OpenVPN je široko uporabljena implementacija VPN, ki omogoča širok nabor konfiguracij in možnosti. Uporablja protokol Secure Sockets Layer (SSL) za šifriranje podatkov in predhodno skupnih ključev, uporabniškega imena/gesla ali potrdil za avtentikacijo odjemalca VPN. V tem članku bomo videli, kako nastaviti strežnik VPN in odjemalca VPN na Ubuntu 20.04.
Namestitev
OpenVPN je na voljo v uradnih repozitorijih Ubuntuja v paketu openvpn
. Ta paket namesti tako strežnik OpenVPN kot tudi odjemalca.
sudo apt namestite openvpn
Kot smo že omenili, OpenVPN uporablja potrdila SSL za šifriranje podatkov med strežnikom in odjemalcem. Za izdajo potrdil za VPN moramo vzpostaviti lastno potrdilo (CA). Upoštevajte, da je treba to nastaviti na drugem računalniku kot na tistem, kjer je nastavljen OpenVPN; razlog je, da če je na istem strežniku in če je ogrožen, lahko napadalec dostopa do zasebnega ključa in tako napade povezavo VPN.
Za nastavitev overitelja potrdil bomo uporabili orodje, imenovano 'Easy-RSA'. Če ga želite namestiti, zaženite naslednje na napravi CA, strežniškem računalniku OpenVPN in odjemalskem računalniku, saj je za nastavitev CA potrebna konfiguracija na vseh treh.
sudo apt install easy-rsa
Zdaj bomo najprej konfigurirali overitelj potrdil na napravi CA in izvedli nekaj potrebnih konfiguracijskih korakov za isto na strežniku Open VPN.
Nastavitev overitelja potrdil
Začetna nastavitev na napravi CA
Zdaj ta paket namesti ukaz z imenom make-cadir
ki se uporablja za ustvarjanje mape za konfiguracijo overitelja potrdil. S tem ustvarimo mapo in vnesite mapo.
make-cadir cert_authority && cd cert_authority
Odprite imenovano datoteko vars
ustvarjeno v tem imeniku. Ta datoteka vsebuje nekaj konfiguracijskih spremenljivk, ki jih moramo spremeniti. Vrednosti, ki jih je treba spremeniti, so v vrsticah 91-96, za komentarjem o Organizacijska področja ki opisuje ta polja. Odkomentirajte vrstice in izpolnite ustrezne vrednosti namesto vzorčnih vrednosti.
Shranite in zaprite datoteko. Če uporabljate urejevalnik vim, pritisnite Esc
, tip :wq
in pritisnite Vnesite
za shranjevanje in izhod.
Nato zaženemo easyrsa
program v imeniku za nastavitev infrastrukture javnih ključev (PKI), ki bo uporabljena za generiranje javnega ključa in potrdil.
./easyrsa init-pki
Naslednji korak bo ustvaril ključ in potrdilo CA. Ko ukaz zahteva geslo, vnesite geslo za ključ CA. Ob pozivu vnesite tudi skupno ime. Če pustite to prazno, bo uporabljeno privzeto ime Easy-RSA CA ime.
./easyrsa build-ca
Kot lahko vidimo iz izhoda, sta bila certifikat in ključ ustvarjena. Ta ključ bo uporabljen za podpis potrdil odjemalca in strežnika, zato se ga nikoli ne smete dotikati/spreminjati.
Zdaj imamo nastavitev PKI. Naslednji korak je izdelava strežniškega ključa in potrdila na računalniku, ki ga bomo uporabljali kot strežnik OpenVPN. To potrdilo bo kasneje podpisala naprava CA.
Ustvarjanje strežniškega ključa in potrdila na strežniškem računalniku
Easy RSA smo že namestili na strežniško napravo. Zdaj izvedite tri korake na strežniškem stroju, ki smo jih prej izvedli na stroju CA, tj. ustvarjanje imenika CA z uporabo make-cadir
in gredo vanj ter spreminjajo spremenljivke v vars
datoteko in generiranje PKI z uporabo ./easyrsa init-pki
ukaz.
Nato moramo zagnati ukaz za generiranje zahteve in ključa za potrdilo strežnika.
./easyrsa gen-req strežnik nopass
Upoštevajte, da smo možnost prepustili nopass
tako da nas ukaz ne bo pozval, da vnesemo geslo za ključ strežnika. Še vedno bo zahteval skupno ime za strežnik, ki ga lahko vnesete kar koli ali ga pustite prazno za privzeto ime (strežnik) biti uporabljeno.
Premaknite ustvarjeno ključno datoteko v /etc/openvpn
imenik.
sudo mv pki/private/server.key /etc/openvpn
Pošljite zahtevo za potrdilo napravi CA. Uporabili bomo ukaz scp
Za ta namen.
scp pki/reqs/server.req uporabnik@CA_MACHINE_HOSTNAME:/imenik
Na zgornjem posnetku zaslona je gostitelj 45.79.125.41 stroj CA. Potrdilo smo kopirali v imenik /root.
Zdaj je bilo potrdilo strežnika kopirano v CA stroj. Naslednji korak je, da se vrnete na napravo CA in podpišete to potrdilo.
Podpis strežniškega potrdila v CA
Najprej preverimo, ali je bila datoteka zahteve za potrdilo s strežnika kopirana na napravo CA. Pojdite v imenik, kamor smo kopirali datoteko (/root v mojem primeru) in zaženite ls
.
:~# cd /root && ls cert_authority server.req
Kot lahko vidimo, datoteka server.req
je prisoten. Nato pojdite v imenik CA in uvozite to zahtevo.
cd cert_authority ./easyrsa import-req /root/server.req strežnik
Če želite podpisati to zahtevo, zaženite naslednji ukaz.
Strežnik strežnika ./easyrsa sign-req
Tukaj je prvi argument vrsta zahteve, tj. strežnik, drugi argument pa je skupno ime strežniškega stroja, za katerega smo prej uporabili privzeto vrednost, tj. strežnik.
Vnesite besedno zvezo da, in geslo za ključ CA, ko ste pozvani.
Zdaj lahko odstranimo datoteko zahteve za potrdilo in kopiramo ustvarjeno potrdilo za strežnik ter javno potrdilo CA nazaj na strežniško napravo.
rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root
Nato moramo izvesti še nekaj korakov, da zagotovimo varno povezavo VPN.
Generiranje parametrov DH
Izmenjava ključev DH (Diffie-Hellman) je algoritem za zagotavljanje varne izmenjave kripto ključev prek nezaščitenega kanala. Najprej premaknimo prejeto potrdilo in javno potrdilo CA /etc/openvpn
.
mv /root/ca.crt /root/server.crt /etc/openvpn
Pojdite v mapo CA na strežniškem računalniku in zaženite naslednji ukaz, da ustvarite parametre DH. Ustvarjanje lahko traja dolgo.
./easyrsa gen-dh
Zdaj premaknite ustvarjeno datoteko v /etc/openvpn
.
mv /root/cert_authority/pki/dh.pem /etc/openvpn
Ustvarjanje TA ključev
OpenVPN uporablja še en dodaten varnostni ukrep z uporabo ključa za overjanje TLS. Če želite ustvariti ključ za overjanje TLS, zaženite:
openvpn --genkey --secret tls_auth.key
In premaknite ključ na /etc/openvpn
.
mv tls_auth.key /etc/openvpn
Konfiguracija ključa strežnika in nastavitev overitelja potrdil je zdaj končana. Zdaj pa preidimo na dejansko konfiguracijo strežnika VPN.
Konfiguracija strežnika OpenVPN
Konfiguracijska datoteka za strežnik OpenVPN ni samodejno ustvarjena, lahko pa uporabimo konfiguracijsko datoteko predloge iz openvpn
paket.
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz
Odprite datoteko z vim ali katerim koli urejevalnikom po vaši izbiri.
cd /etc/openvpn vim server.conf
Vnesti moramo običajna imena ključev in potrdil, ki smo jih ustvarili prej. Pojdite na vrstico št. 78. Ker smo uporabili vsa privzeta imena, jih ohranimo nespremenjena. Nato preverite ime datoteke parametrov DH v vrstici 85. Uporabili smo ime dh.pem, zato ga spremenimo.
Nato spremenimo privilegije za strežnik OpenVPN. Pojdite na vrstici 274 in 275 in odstranite vodilno ;
da ga razkomentiram.
Podobno pojdite na vrstico 192 in odstranite podpičje. Ta direktiva omogoča, da promet vseh odjemalcev poteka skozi VPN.
Shranite in zaprite datoteko.
Spremenite lastništvo mape /etc/openvpn v root.
sudo chown -R koren: koren /etc/openvpn
Nastavitev omrežja in požarnega zidu
Na strežniku moramo omogočiti posredovanje IP-jev, da omogočimo posredovanje paketov od in do odjemalca VPN. Odkomentiraj vrstico 28 /etc/sysctl.conf
:
Shranite in zaprite datoteko.
Ponovni zagon systemctl
da se te spremembe zgodijo.
sudo sysctl -p
Na strežniku moramo nastaviti prevajanje omrežnih naslovov (NAT) z uporabo požarnega zidu UFW, da omogočimo odjemalcu VPN dostop do interneta z naslovom IP strežnika VPN. Najprej omogočimo posredovanje paketov v konfiguraciji požarnega zidu. Odprto /etc/default/ufw
in spremenite spremenljivko v vrstici 19 v ACCEPT.
Shranite in zaprite datoteko.
Zdaj dodajte naslednja pravila v datoteko /etc/ufw/before.rules
pred filter vrstico v datoteki.
*nat :SPREJEM NASTOPANJE [0:0] -A ODSTAVLJANJE -s 10.8.0.0/8 -o -j MASQUERADE COMMIT
Vnesite svoj omrežni vmesnik namesto . Z ukazom si lahko ogledate svoj omrežni vmesnik ifconfig
.
Dovoli promet za storitev OpenVPN na požarnem zidu in dovoli vrata 1194.
sudo ufw dovoli openvpn && sudo ufw dovoli 1194
Ponovno naložite storitev požarnega zidu.
sudo ufw ponovno naloži
Zdaj lahko znova zaženemo demon strežnika Open VPN z zagonom:
ponovni zagon storitve sudo openvpn
Omogočite zagon ob zagonu tako, da zaženete:
sudo systemctl omogoči openvpn
Strežnik OpenVPN je zdaj konfiguriran in se je začel. Nadaljujmo z zahtevo za potrdilo odjemalca in generiranjem ključev ter drugo konfiguracijo.
Konfiguracija odjemalca OpenVPN
Za stranko moramo ustvariti ključ in zahtevo za potrdilo. Postopek za to je enak kot pri strežniku.
Čeprav je mogoče odjemalski ključ in zahtevo za potrdilo ustvariti na odjemalskem računalniku in nato prenesti na napravo CA, je priporočljivo, da jo ustvarite na strežniškem računalniku. Prednost tega početja na strežniku je, da lahko ustvarite skript za izvajanje vseh zahtevanih korakov na strežniku, kar novemu odjemalcu olajša pridružitev VPN-ju.
Pojdite v mapo CA na strežniku in zaženite naslednje:
cd ~/cert_authority ./easyrsa gen-req client nopass
Na podoben način kot prej vnesite skupno ime, ko ste pozvani, ali pustite prazno, da uporabite privzeto skupno ime, tj. stranko.
Zdaj kopirajmo ustvarjeno zahtevo za potrdilo odjemalca na stroj CA.
scp pki/reqs/client.req [email protected]:/root
Uvozimo to zahtevo v CA stroj:
./easyrsa import-req /root/client.req odjemalec
In zdaj se podpišemo:
./easyrsa sign-req odjemalec odjemalca
Vnesiteda
ko ste pozvani, da nadaljujete. Na vprašanje vnesite geslo za ključ CA.
Zdaj lahko odstranimo zahtevano datoteko za odjemalca in zahtevo kopiramo nazaj na strežnik VPN.
rm /root/client.req scp pki/issued/client.crt [email protected]:/root
Ustvarimo mapo z imenom stranko
za shranjevanje vseh datotek, povezanih z odjemalcem, na strežniku VPN. Odjemalski ključ in potrdilo bomo premaknili v to mapo.
mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client
Zdaj pa ustvarimo konfiguracijsko datoteko iz razpoložljive predloge, podobno kot smo ustvarili konfiguracijsko datoteko strežnika.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client
Odprite datoteko client.conf
. V vrstico 42 vnesite ime gostitelja ali IP naslov vašega strežniškega računalnika namesto moj-strežnik-1
.
Odkomentirajte vrstici 61 in 62, tako da odstranite vodilno podpičje, da znižate privilegije za datoteko.
Nato komentirajte vrstice 88-90 in vrstico 108. Razlog je v tem, da želimo vsebino omenjenih datotek dodati ročno, namesto da bi uporabili lokacije datotek. Namen tega je, da se konfiguracijska datoteka odjemalca kasneje prenese na odjemalca, kjer dejansko ne bomo imeli datotek ključa in potrdil; zato kopiramo vsebino teh v sami konfiguracijski datoteki.
V konfiguracijsko datoteko odjemalca dodajte naslednje. Vnesite vsebino datotek zadevnih datotek znotraj danih oznak.
# Tukaj prilepi vsebino datoteke ca.crt # Sem prilepi vsebino datoteke client.crt # Sem prilepi vsebino datoteke client.key key-direction 1 # Tukaj prilepi vsebino datoteke tls_auth.key
Shranite in zaprite datoteko. Preimenujte to datoteko iz client.conf
do client.ovpn
, saj je slednja razširitev, potrebna za konfiguracijske datoteke, ki jih je mogoče uvoziti kot omrežne konfiguracije.
Zdaj prenesite datoteko client.ovpn
odjemalcu, torej lokalnemu stroju.
teci scp
na vašem odjemalskem računalniku, da prenesete datoteko s strežniškega računalnika na vaš lokalni računalnik.
scp user@server_ip:/pot_do_file local_destination_path
Končno moramo uporabiti to konfiguracijsko datoteko za povezavo s strežnikom VPN. To lahko storite tako prek ukazne vrstice kot tudi GUI.
Če želite zagnati odjemalca VPN iz ukazne vrstice, zaženite:
sudo openvpn --config client.ovpn
In to je edini ukaz, ki ga morate zagnati za zagon odjemalca VPN.
Če želite zagnati odjemalca VPN prek GUI, izvedite naslednje korake.
Pojdite v Nastavitve » Omrežje na vašem odjemalskem računalniku.
Kliknite na + v razdelku VPN in med možnostmi izberite »Uvozi iz datoteke ...«.
Kliknite »Dodaj«, da začnete uporabljati VPN.
Upoštevajte, da je pod »Gateway« to naslov IP strežnika.
Na koncu preklopite gumb »odjemalski VPN«, da omogočite VPN na napravi.
Vzpostavitev povezave VPN lahko traja nekaj sekund. Nov logotip napredka za VPN se bo prikazal v zgornjem levem kotu vašega zaslona, ko se nastavlja, in se bo po nastavitvi spremenil v logotip VPN.
Če želite preveriti, ali VPN deluje pravilno, zaženite naslednje:
curl //ipinfo.io/ip
Vrniti mora naslov IP vašega strežniškega računalnika. Lahko pa tudi preverite svoj IP naslov tako, da preprosto poiščete »Moj IP« v Googlu. Prikazati bi moral naslov IP vašega strežnika VPN, če naša nastavitev VPN deluje pravilno.
Zaključek
V tem članku smo videli, kako konfigurirati strežnik OpenVPN, overitelj potrdil in odjemalca OpenVPN. Če želite v VPN dodati več odjemalcev, moramo zdaj slediti postopku za generiranje in podpis potrdila za odjemalca ter uporabiti isto konfiguracijsko datoteko, ustvarjeno tukaj, pri čemer sta spremenjena le odjemalski ključ in vrednosti potrdila.
V primeru počasnejših internetnih povezav je možno, da če se za komunikacijo uporablja UDP, pride do znatne izgube paketov. Uporabnik lahko preklopi na TCP tako, da razkomentira vrstico proto tcp
in komentiranje vrstice proto udp
v konfiguracijski datoteki strežnika.
Tudi, če obstajajo druge napake, lahko nastavite raven beleženja z glagol
direktivo v konfiguracijskih datotekah strežnika in odjemalca. Vnesete lahko vrednosti med 0 in 9. Višja kot je vrednost te direktive, bolj natančen bo dnevnik.