Konačan vodič za postavljanje sigurnog OpenVPN poslužitelja na Ubuntu 20.04
Virtualna privatna mreža (VPN) omogućuje vam sigurno i privatno povezivanje s udaljenom privatnom mrežom, na primjer, vašom uredskom mrežom ili internetom na način kao da ste izravno spojeni na privatnu mrežu.
VPN radi u arhitekturi poslužitelj-klijent. VPN poslužitelj je postavljen na stroj i javno je dostupan putem Interneta. VPN poslužitelj može se konfigurirati tako da dopušta povezivanje s privatnim LAN-om, kao što je uredska mreža, ili dopušta povezivanje s internetom. Korisnik se povezuje na VPN poslužitelj koristeći VPN klijent na svom lokalnom računalu. Komunikacija između VPN poslužitelja i klijenta odvija se pomoću sigurnog protokola tuneliranja. Internetu se čini kao da je odredište prometa VPN poslužitelj; međutim, promet prolazi do klijenta preko poslužitelja.
VPN ima mnoge namjene u svakodnevnom životu, poput sigurnog povezivanja na javnu Wifi mrežu, koja je često ugrožena ili zaobilazi geo-ograničenja na određenim web-stranicama povezivanjem na VPN sa sjedištem u zemlji koju web lokacija dopušta.
OpenVPN je široko korištena implementacija VPN-a koja omogućuje širok raspon konfiguracija i opcija. Koristi Secure Sockets Layer (SSL) protokol za enkripciju podataka i unaprijed dijeljenih ključeva, korisničkog imena/lozinke ili certifikata za autentifikaciju VPN klijenta. U ovom članku ćemo vidjeti kako postaviti VPN poslužitelj i VPN klijent na Ubuntu 20.04.
Montaža
OpenVPN je dostupan u službenim Ubuntu repozitorijumima u paketu openvpn
. Ovaj paket instalira i OpenVPN poslužitelj kao i klijenta.
sudo apt instalirajte openvpn
Kao što je ranije spomenuto, OpenVPN koristi SSL certifikate za šifriranje podataka između poslužitelja i klijenta. Moramo postaviti vlastito certifikacijsko tijelo (CA) za izdavanje certifikata za VPN. Imajte na umu da ovo treba postaviti na drugom stroju od onog na kojem je postavljen OpenVPN; razlog je taj što ako je na istom poslužitelju i ako bude kompromitiran, napadač može pristupiti privatnom ključu i tako napasti VPN vezu.
Koristit ćemo alat pod nazivom 'Easy-RSA' za postavljanje certifikacijskog tijela. Da biste ga instalirali, pokrenite sljedeće na CA stroju, OpenVPN poslužiteljskom stroju i klijentskom stroju, jer je konfiguracija potrebna na sva tri za postavljanje CA.
sudo apt install easy-rsa
Sada ćemo prvo konfigurirati certifikacijsko tijelo na CA stroju i izvesti neke potrebne korake konfiguracije za isto na Open VPN poslužiteljskom stroju.
Postavljanje certifikacijskog tijela
Početno postavljanje na CA stroju
Sada ovaj paket instalira naredbu pod nazivom make-cadir
koji se koristi za kreiranje mape za konfiguraciju certifikacijskog tijela. Napravimo mapu pomoću ovoga i unesite mapu.
make-cadir cert_authority && cd cert_authority
Otvorite datoteku pod nazivom vars
kreiran u ovom imeniku. Ova datoteka sadrži neke konfiguracijske varijable koje moramo izmijeniti. Vrijednosti koje je potrebno izmijeniti nalaze se u redovima 91-96, nakon komentara o Organizacijska polja koji opisuje ova polja. Odkomentirajte retke i popunite odgovarajuće vrijednosti umjesto vrijednosti uzorka.
Spremite i izađite iz datoteke. Ako koristite vim editor, pritisnite Esc
, tip :wq
i pritisnite Unesi
za spremanje i izlaz.
Zatim pokrećemo easyrsa
program u direktoriju za postavljanje infrastrukture javnih ključeva (PKI), koja će se koristiti za generiranje javnog ključa i certifikata.
./easyrsa init-pki
Sljedeći korak će generirati CA ključ i certifikat. Kada naredba zatraži lozinku, unesite lozinku za CA ključ. Također, unesite uobičajeno ime kada se to od vas zatraži. Ako ostavite ovo prazno, koristit će se zadani naziv Easy-RSA CA naziv.
./easyrsa build-ca
Kao što možemo vidjeti iz izlaza, certifikat i ključ su generirani. Ovaj ključ će se koristiti za potpisivanje certifikata klijenta i poslužitelja, stoga ga se nikada ne smije dirati/izmijeniti.
Sada imamo PKI postavku. Sljedeći korak je kreiranje ključa poslužitelja i certifikata na stroju koji ćemo koristiti kao OpenVPN poslužitelj. Ovaj certifikat će kasnije biti potpisan od strane CA stroja.
Generiranje poslužiteljskog ključa i certifikata na poslužiteljskom stroju
Već smo instalirali Easy RSA na poslužiteljskom stroju. Sada izvršite tri koraka na poslužiteljskom stroju, koje smo prethodno izveli na CA stroju, tj. stvaranje CA imenika pomoću make-cadir
i ući u njega, mijenjajući varijable u vars
datoteku i generiranje PKI-a pomoću ./easyrsa init-pki
naredba.
Zatim moramo pokrenuti naredbu za generiranje zahtjeva i ključa za certifikat poslužitelja.
./easyrsa gen-req server nopass
Imajte na umu da smo prošli opciju nopass
tako da nas naredba neće tražiti da unesemo lozinku za ključ poslužitelja. I dalje će tražiti zajednički naziv za poslužitelj, koji možete unijeti bilo što, ili ga ostavite praznim za zadani naziv (poslužitelj) koristiti.
Premjestite generiranu ključnu datoteku unutar /etc/openvpn
imenik.
sudo mv pki/private/server.key /etc/openvpn
Pošaljite zahtjev za certifikat CA stroju. Koristit ćemo naredbu scp
za ovu svrhu.
scp pki/reqs/server.req korisnik@CA_MACHINE_HOSTNAME:/direktorij
Na gornjoj snimci zaslona, host 45.79.125.41 je CA stroj. Kopirali smo certifikat u /root direktorij.
Sada je certifikat poslužitelja kopiran na CA stroj. Sljedeći korak je povratak na CA stroj i potpisivanje ovog certifikata.
Potpisivanje certifikata poslužitelja u CA
Prvo, provjerimo je li datoteka zahtjeva za certifikatom s poslužitelja kopirana na CA stroj. Idite na direktorij u koji smo kopirali datoteku (/root u mom primjeru) i pokrenite ls
.
:~# cd /root && ls cert_authority server.req
Kao što vidimo, datoteka poslužitelj.req
je prisutan. Zatim idite na CA imenik i uvezite ovaj zahtjev.
cd cert_authority ./easyrsa import-req /root/server.req poslužitelj
Da biste potpisali ovaj zahtjev, pokrenite sljedeću naredbu.
./easyrsa poslužitelj sign-req poslužitelja
Ovdje je prvi argument vrsta zahtjeva, tj. poslužitelj, a drugi argument je zajednički naziv poslužiteljskog stroja, za koji smo prethodno koristili zadanu vrijednost, tj. poslužitelju.
Unesite izraz Da, i lozinku za CA ključ kada se to od vas zatraži.
Sada možemo ukloniti datoteku zahtjeva za certifikat i kopirati generirani certifikat za poslužitelj, kao i CA javni certifikat natrag na stroj poslužitelja.
rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root
Zatim moramo izvršiti još nekoliko koraka kako bismo osigurali sigurnu vezu VPN-a.
Generiranje DH parametara
DH (Diffie-Hellman) razmjena ključeva je algoritam koji osigurava sigurnu razmjenu kripto ključeva preko nesigurnog kanala. Prvo, premjestimo primljeni certifikat i javni certifikat CA /etc/openvpn
.
mv /root/ca.crt /root/server.crt /etc/openvpn
Idite u CA mapu na poslužiteljskom stroju i pokrenite sljedeću naredbu za generiranje DH parametara. Generiranje bi moglo potrajati dugo.
./easyrsa gen-dh
Sada premjestite generiranu datoteku u /etc/openvpn
.
mv /root/cert_authority/pki/dh.pem /etc/openvpn
Generiranje TA ključeva
OpenVPN koristi još jednu dodatnu sigurnosnu mjeru koristeći TLS auth ključ. Da biste generirali TLS auth ključ, pokrenite:
openvpn --genkey --tajni tls_auth.key
I pomaknite ključ na /etc/openvpn
.
mv tls_auth.key /etc/openvpn
Konfiguracija ključa poslužitelja i postavljanje certifikacijskog tijela je sada završeno. Prijeđimo sada na stvarnu konfiguraciju VPN poslužitelja.
Konfiguracija OpenVPN poslužitelja
Konfiguracijska datoteka za OpenVPN poslužitelj se ne kreira automatski, no možemo koristiti konfiguracijsku datoteku predloška 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
Otvorite datoteku koristeći vim ili bilo koji uređivač po vašem izboru.
cd /etc/openvpn vim server.conf
Moramo unijeti uobičajene nazive ključeva i certifikata koje smo prethodno generirali. Idite na liniju br. 78. Budući da smo koristili sve zadane nazive, zadržavamo ih nepromijenjenima. Zatim provjerite naziv datoteke DH parametara u retku 85. Koristili smo naziv dh.pem, pa ga promijenimo.
Zatim izmijenimo privilegije za OpenVPN poslužitelj. Idite na red 274 i 275 i uklonite vodeći ;
dekomentirati.
Slično idite na redak 192 i uklonite točku i zarez. Ova direktiva omogućuje promet svih klijenata da prolazi kroz VPN.
Spremite i izađite iz datoteke.
Promijenite vlasništvo nad mapom /etc/openvpn u root.
sudo chown -R korijen: korijen /etc/openvpn
Postavljanje mreže i vatrozida
Moramo dopustiti IP prosljeđivanje na poslužitelju kako bismo omogućili prosljeđivanje paketa sa i na VPN klijent. Dekomentirajte redak 28 /etc/sysctl.conf
:
Spremite i izađite iz datoteke.
Ponovno pokrenite systemctl
da bi se te promjene dogodile.
sudo sysctl -p
Moramo postaviti prevođenje mrežnih adresa (NAT) na poslužitelju pomoću UFW vatrozida kako bismo omogućili VPN klijentu pristup internetu koristeći IP adresu VPN poslužitelja. Prvo, omogućimo prosljeđivanje paketa u konfiguraciji vatrozida. Otvorena /etc/default/ufw
i promijenite varijablu u retku 19 u ACCEPT.
Spremite i izađite iz datoteke.
Sada dodajte sljedeća pravila u datoteku /etc/ufw/before.rules
prije filtar redak u datoteci.
*nat :PRIHVATITI NASTAVLJANJE [0:0] -A POSTROUTIRANJE -s 10.8.0.0/8 -o -j POVRŠANJE MASKERADE
Unesite svoje mrežno sučelje umjesto . Naredbom možete vidjeti svoje mrežno sučelje ifconfig
.
Dopustite promet za OpenVPN uslugu na vatrozidu i dopustite port 1194.
sudo ufw dopusti openvpn && sudo ufw dopusti 1194
Ponovno učitajte uslugu vatrozida.
sudo ufw ponovno učitavanje
Sada možemo ponovno pokrenuti Open VPN poslužiteljski demon tako da pokrenemo:
sudo servis openvpn restart
Omogućite da se pokrene u trenutku pokretanja tako što ćete pokrenuti:
sudo systemctl omogući openvpn
OpenVPN poslužitelj je sada konfiguriran i pokrenut. Prijeđimo sada na zahtjev za certifikatom klijenta i generiranje ključeva te drugu konfiguraciju.
Konfiguracija OpenVPN klijenta
Moramo generirati ključ i zahtjev za certifikatom za klijenta. Postupak za to je isti kao i za poslužitelj.
Iako se klijentski ključ i zahtjev za certifikatom mogu kreirati na klijentskom stroju i zatim prenijeti na CA stroj, preporuča se kreirati ih na poslužiteljskom stroju. Prednost ovog rada na poslužitelju je što možete kreirati skriptu za izvođenje svih potrebnih koraka na poslužitelju što olakšava novom klijentu da se pridruži VPN-u.
Idite u CA mapu na poslužitelju i pokrenite sljedeće:
cd ~/cert_authority ./easyrsa gen-req klijent nopass
Na sličan način kao što je učinjeno prethodno, unesite zajednički naziv kada se to od vas zatraži ili ostavite prazno da biste koristili zadani zajednički naziv, tj. klijent.
Kopirajmo sada generirani zahtjev za certifikat klijenta na CA stroj.
scp pki/reqs/client.req [email protected]:/root
Uvezimo ovaj zahtjev u CA stroj:
./easyrsa import-req /root/client.req klijent
A sada potpišimo:
./easyrsa sign-req klijent klijent
UnesiDa
kada se od vas zatraži nastavak. Unesite lozinku za CA ključ na upit.
Sada možemo ukloniti traženu datoteku za klijenta i kopirati zahtjev natrag na stroj VPN poslužitelja.
rm /root/client.req scp pki/issued/client.crt [email protected]:/root
Kreirajmo mapu pod nazivom klijent
kako bi sve datoteke povezane s klijentom zadržale na VPN poslužitelju. Premjestit ćemo klijentski ključ i certifikat u ovu mapu.
mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client
Sada napravimo konfiguracijsku datoteku iz dostupnog predloška, slično kao što smo stvorili konfiguracijsku datoteku poslužitelja.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client
Otvorite datoteku klijent.conf
. U redak 42 unesite naziv hosta ili IP adresu vašeg poslužitelja umjesto moj-poslužitelj-1
.
Dekomentirajte retke 61 i 62 tako da uklonite početnu točku i zarez, da biste smanjili privilegije za datoteku.
Zatim komentirajte retke 88-90 i redak 108. Razlog je taj što želimo dodati sadržaj spomenutih datoteka ručno umjesto korištenja lokacija datoteka. Svrha ovoga je da će se konfiguracijska datoteka klijenta kasnije prenijeti na klijenta, gdje zapravo nećemo imati datoteke ključa klijenta i certifikata; stoga kopiramo njihov sadržaj u samoj konfiguracijskoj datoteci.
Dodajte sljedeće u konfiguracijsku datoteku klijenta. Unesite sadržaj datoteka odgovarajućih datoteka unutar zadanih oznaka.
# Ovdje zalijepi sadržaj ca.crt datoteke # Ovdje zalijepi sadržaj datoteke client.crt # Ovdje zalijepi sadržaj datoteke client.key key-direction 1 # Ovdje zalijepi sadržaj datoteke tls_auth.key
Spremite i izađite iz datoteke. Preimenujte ovu datoteku iz klijent.conf
do klijent.ovpn
, budući da je potonje proširenje potrebno za konfiguracijske datoteke koje se mogu uvesti kao mrežne konfiguracije.
Sada prenesite datoteku klijent.ovpn
klijentu, tj. lokalnom stroju.
Trčanje scp
na vašem klijentskom stroju za prijenos datoteke s poslužiteljskog stroja na vaš lokalni stroj.
scp korisnik@poslužitelj_ip:/put_do_datoteke lokalni_destinacijski_put
Konačno, moramo koristiti ovu konfiguracijsku datoteku za povezivanje s VPN poslužiteljem. To se može učiniti i putem naredbenog retka kao i preko GUI-ja.
Da biste pokrenuli VPN klijent iz naredbenog retka, pokrenite:
sudo openvpn --config client.ovpn
I to je jedina naredba koju trebate pokrenuti za pokretanje VPN klijenta.
Za pokretanje VPN klijenta putem GUI-ja, izvršite sljedeće korake.
Idite na Postavke » Mreža na svom klijentskom računalu.
Klikni na + u odjeljku VPN i odaberite "Uvezi iz datoteke..." među opcijama.
Kliknite na "Dodaj" da biste počeli koristiti VPN.
Imajte na umu da je pod ‘Gateway’ IP adresa poslužitelja.
Konačno, uključite gumb "VPN za klijente" kako biste omogućili VPN na računalu.
Uspostavljanje VPN veze može potrajati nekoliko sekundi. Novi logotip napretka za VPN pojavit će se u gornjem lijevom kutu vašeg zaslona dok se postavlja, a nakon postavljanja promijenit će se u logotip VPN-a.
Da biste provjerili radi li VPN ispravno, pokrenite sljedeće:
kovrča //ipinfo.io/ip
Trebao bi vratiti IP adresu vašeg poslužiteljskog stroja. Ili možete provjeriti svoju IP adresu jednostavnim pretraživanjem "Moj IP" na Googleu. Trebao bi pokazati IP adresu vašeg VPN poslužitelja ako naša VPN postavka radi ispravno.
Zaključak
U ovom članku vidjeli smo kako konfigurirati OpenVPN poslužitelj, Izdavač certifikata i OpenVPN klijent. Da bismo dodali više klijenata VPN-u, sada moramo slijediti proceduru generiranja i potpisivanja certifikata za klijenta i koristiti istu konfiguracijsku datoteku stvorenu ovdje, s promijenjenim samo ključem klijenta i vrijednostima certifikata.
U slučaju sporije internetske veze, moguće je da ako se za komunikaciju koristi UDP, dođe do značajnog gubitka paketa. Korisnik se može prebaciti na TCP dekomentiranjem retka proto tcp
i komentirajući liniju proto udp
u konfiguracijskoj datoteci poslužitelja.
Također, u slučaju da postoje druge pogreške, možete postaviti razinu zapisivanja pomoću glagol
direktive u konfiguracijskim datotekama poslužitelja i klijenta. Možete unijeti vrijednosti između 0 i 9. Što je veća vrijednost ove direktive, zapis će biti opširniji.