Kako da podesite OpenVPN server (na Ubuntu 18.04)
U našem prethodnom tekstu na temu VPN-a objasnili smo kako da podesite VPN kroz Webmin / Virtualmin Server GUI kao najjedinostavnije rešenje za koje nije potrebno tehničko znanje.
Za nešto naprednije korisnike, u ovom članku predstavljamo OpenVPN softver otvorenog koda koji koristi sigurnosni protokol zasnovan na SSL i TLS protokolima i omogućava 256-bitnu enkripciju podataka, a koji služi za uspostavljanje VPN konekcije. U ovom uputstvu ćemo objasniti kako da podesite OpenVPN server na Ubuntu 18.04 serveru, a već u sledećem tekstu ćemo objasniti kako da konfigurišete pristup za klijentsku stranu.
Da biste mogli da ispratite ovo uputstvo potrebno je da pre svega imate pristup Ubuntu 18.04 serveru da biste mogli da hostujete OpenVPN servis. Potrebno je da konfigurišete običnog (ne root) korisnika sa sudo privilegijama i osnovnom firewall instalacijom.
Pored toga potrebno je da pripremite još jedan računar koji će vam služiti za izdavanje kvalifikovanih sertifikata. Poželjno je da ovo bude tzv. standalone računar na kojem je takođe instaliran Ubuntu 18.04 server sa korisnikom koji ima sudo privilegije. Razlog za pripremu servera na standalone računaru je čisto sigurnosne prirode, jer je važno da taj računar ostane zaštićen od eventualnih hakerskih napada kroz mrežu.
Znači jedan Ubuntu za OpenVPN i jedan za sertifikate.
Naša preporuka je da na oba servera aktivirate autentifikaciju uz pomoć lozinke, kako kasnije ne bi bilo problema prilikom prenosa fajlova između njih.
Instalacija OpenVPN-a i EasyRSA-a
Pre početka instalacije ažurirajte VPN server, a zatim instalirajte OpenVPN. Imajte u vidu da je OpenVPN dostupan u Ubuntu repozitorijumu, pa možete koristiti apt za instalaciju:
$ sudo apt update
$ sudo apt install openvpn
S obzirom da OpenVPN koristi sertifikate za enkripciju saobraćaja između servera i klijenta, potrebno je da obezbedite validan kvaifikovani sertifikat koji će imati CA status (Certified Authority). Za ovu namenu ćemo koristiti EasyRSA uz čiju pomoć ćemo napraviti infrastrukturu za generisanje CA javnog ključa.
EasyRSA ima svoj repozitorijum na GitHub-u, odakle ga možete preuzeti: U trenutku pisanja ovog teksta poslednja verzija je 3.0.6. Pritom je važno da napomenemo da će biti potrebno da ga preuzmete i na jednom i na drugom serveru. Preuzimanje vršite tako što link za preuzimanje (sa ekstenzijom .tgz) kopirate i umetnete nakon komande wget -P ~/ :
Kada ste preuzeli kompresovani fajl potrebno je da ga otpakujete:
$ cd ~
$ tar xvf EasyRSA-3.0.6.tgz
Nakon uspešne instalacije na oba servera, potrebno je da konfigurišete EasyRSA i podesite CA direktorijum odakle ćete generisati ključeve i sertifikate za vaš server i klijente radi pristupa VPN-u.
Konfigurisanje EasyRSA
EasyRSA dolazi instaliran sa konfiuracionim fajlom koji može da se edituje za potrebe definianja broja promenjivih za CA.
Na vašem CA serveru pristupite EasyRSA direktorijumu:
$ cd ~/EasyRSA-3.0.6/
U okviru ovog direktorijuma nalazi se fajl ood nazivom vars.example. Napravite njegovu kopiju i nazovite je isto samo bez ekstenzije:
$ cp vars.example vars
Sada je potrebno da editujete ovaj fajl. Otvorite ga u nekom tekst editoru koji koristite:
$ nano vars
Sada pronađite podešavanja kojima setujete podrazumevane vrednosti za sertifikate. Prozor će biti sličan ovome na slici ispod:
~/EasyRSA-3.0.6/vars
. . .
#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "me@example.net"
#set_var EASYRSA_REQ_OU "My Organizational Unit"
. . .
Isključite komentare (#) i promenite vrednosti u desnoj koloni u željene vrednosti, Važno je smo da ih ne ostavljate praznim:
~/EasyRSA-3.0.6/vars
. . .
set_var EASYRSA_REQ_COUNTRY "SRB"
set_var EASYRSA_REQ_PROVINCE "Srbija"
set_var EASYRSA_REQ_CITY "Beograd"
set_var EASYRSA_REQ_ORG "Naziv vaše kompanije"
set_var EASYRSA_REQ_EMAIL "vaša email adresa"
set_var EASYRSA_REQ_OU "Organizacija"
. . .
Kada ste završili sačuvajte i zatvorite fajl.
U okviru EasyRSA direktorijuma nalazi se skript pod nazivom easyrsa koji se poziva za potrebe izvođenja različitih zadataka koji imaju veze sa izradom i upravljanjem CA. Pokrenite ovaj skript sa init-pki opcijom, da biste inicirali infrastrukturu za generisanje javnog ključa (PKI) na CA serveru.
$ ./easyrsa init-pki
Output
. . .
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.6/pki
Nakon ovoga ponovo pokrenite easyrsa skript, ali ovoga puta u nastavku kucajte build-ca, kako biste kreirali CA zajedno sa dva važna fajla ca-crt i ca-key koji čine javni i privatni deo SSL sertifikata.
Ovim ste kreirali CA i odatle možete da krenete sa potpisivanjem zahteva za sertifikate.
Kreiranje serverskog sertifikata, ključa i enkripcionih fajlova
Sada kada je vaš CA spreman možete da generišete privatni ključ i zahtev za sertifikat sa vašeg servera i zatim da transferujete taj zahtev do vašeg CA na potpisivanje, praveći na taj način sertifikat.
Idite do EasyRSA direktorijuma na vašem OpenVPN serveru:
$ cd EasyRSA-3.0.6/
Odatle pokrenite easyrsa skript sa init-pki opcijom. Iako ste već pokrenuli ovu komandu na CA serveru, potrebno je da je pokrenete i ovde jer će vaš server i CA imati različite PKI direktorijume.
$ ./easyrsa init-pki
Pozovite ponovo easyrsa skript, ovog puta sa gen-req opcijom iza koje treba da sledi naziv koji ste dodelili CA serveru. Mi ćemo koristiti naziv server, prosto da bude što jednostavnije za praćenje. Obratite pažnju da uključite nopass opciju, kako kasnije ne biste imali probleme sa dozvolama.
$ ./easyrsa gen-req server nopass
Ovo će kreirati privatni ključ za server i fajl sever.req. Kopirajte ovaj ključ u direktorijum /etc/openvpn/.
$ sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/
Sada prebacite vaš server.req fajl na vaš CA server (server).
$ ./easyrsa import-req /tmp/server.req server
Sada potpišite zahtev pokretanjem easyrsa. Tip zahteva može biti server ili klijent, pa za ovu priliku treba da koristite tip server:
n-req server server
Nakon toga ćete morati da potvrdite da zahtev dolazi od pouzdanog izvora. Ukucajte yes, a zatim pritisnite enter za potvrdu.
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 3650 days:
subject=
commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Ako ste kriptovali vaš ključ, ovde ćete morati da unesete lozinku.
Sada je potrebno da prebacite vaš ključ na VPN server, koristeći sigurnosnu metodu:
$ scp pki/issued/server.crt sammy@your_server_ip:/tmp
Pre nego se izlogujete sa vašeg CA servera prebacite takođe i ca.crt fajl na server.
$ scp pki/ca.crt sammy@your_server_ip:/tmp
Sada se ponovo ulogujte na vaš OpenVPN server i kopirajte server.crt i ca.crt fajlove u direktorijum /etc/openvpn/
$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
Sada idite do direktorijuma EasyRSA:
$ cd EasyRSA-3.0.4/
Tu treba da kreirate Diffie-Hellman ključ koji ćete koristiti prilikom razmene ključa:
$ ./easyrsa gen-dh
Ovo može malo da potraje. Kada bude gotovo, generišite HMAC potpis da biste ojačali TLS sigurnost vašeg servera:
$ openvpn --genkey --secret ta.key
Zatim kopirajte dva novokreirana fajla u direktorijum /etc/openvpn/ direktorijum:
$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ $ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
Ovim ste kreirali sve neophodne ključeve i sertifikate. Sada je potrebno samo da kreirate sertifikate i ključeve na klijentoskoj strani, kako biste pristupali OpenVPN serveru.
Generisanje klijentskog sertifikata i ključeva
Sada ćemo generisati jedan klijentski ključ i sertifikat. Ako imate više od jednog klijenta, onda će biti potrebno da ovaj postupak ponovite za svaki od klijenata.
Za početak ćemo kreirati strukturu direktorijuma u vašem home direktorijumu, kako bismo tu spremili ključeve i sertifikat:
$ mkdir -p ~/client-configs/keys
S obzirom da ćete ovde čuvati ključeve i sertifikat, dobra praksa je da zaključate pristup ovom direktorijumu:
$ chmod -R 700 ~/client-configs
Vratite se sada do EasyRSA direktorijuma i pokrenite easyrsa skript sa gen-req i nopass opcijama, uključujući i nazov klijenta (ode prikazan kao client1):
$ cd ~/EasyRSA-3.0.4/
$ ./easyrsa gen-req client1 nopass
Pritisnite enter i zatim kopirajte fajl client1.key u direktorijum koji ste već kreirali /client-configs/keys/:
$ cp pki/private/client1.key ~/client-configs/keys/
Sada prebacite fajl client1.req na vaš CA server koristeći sigurnosnu metodu:
$ scp pki/reqs/client1.req sammy@your_CA_ip:/tmp
Opet se logujte na vaš CA server, idite do direktorijuma EasyRSA i uvezite zahtev:
$ ssh sammy@your_CA_ip
$ cd EasyRSA-3.0.4/
$ ./easyrsa import-req /tmp/client1.req client1
Zatim potpišite zahtev. Obratite pažnju da ovog puta treba da bude tip client.:
$ ./easyrsa sign-req client client1
Sada ukucajte yes da potvrdite potpisivanje – da zahtev dolazi od pouzadnog izvora
Output
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Ako ste kriptovali vaš CA ključ, ovde će vas pitati za lozinku. Ovo će ujedno kreitrati ključ pod nazivom client1.crt. Prebacite ovaj fajl nazad na server:
$ scp pki/issued/client1.crt sammy@your_server_ip:/tmp
Vratite se na vaš OpenVPN server i kopirajte klijentski sertifikat u direktorijum /client-configs/keys/
$ cp /tmp/client1.crt ~/client-configs/keys/
Sada kopirajte fajlove ca.crt i ta.key u direktorijum /client-configs/keys:
$ cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Ovim su i klijentski i serverski ključevi i sertifikati postavljeni u svoje direktorijume. Sada možete da konfigurišete OpenVPN na vašem serveru.
Konfigurisanje OpenVPN servisa
Sada možete da krenete u konfigurisanje OpenVPN servisa da biste koristili kreirane kredencijale.
Počećemo kopiranjem konfiguracionog fajla OpenVPN-a u konfiguracioni direktorijum i zatim ga raspakovati kako bismo ga koristili prilikom podešavanja:
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
Sada treba da editujemo konfiguracioni fajl. Otvorite ga u bilo kom tekst editoru:
$ sudo nano /etc/openvpn/server.conf
Pronađite sekciju pod nazivom HMAC prateći tls-auth direktivu. Ova linija ne bi trebalo da ima komentar, ali ako ima onda samo uklonite “;”:
/etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret
Sada pronažite sekciju sa kriptografskim ključevima tako što ćete pronaći komentarisane linije cipher. AES-256-CBC šifra nudi odličan nivo zaštite. Ova linija takođe ne bi trebalo da ima komentar, ali ako ima onda samo uklonite “;”:
/etc/openvpn/server.conf
cipher AES-256-CBC
Ispod dodajte auth direktivu da biste odbrali HMAC algoritam. Za ovu opciju, dobar izbor je SHA256:
/etc/openvpn/server.conf
auth SHA256
Sada pronađite liniju sa a dh direktivom koja definiše Diffie-Hellman parametar
/etc/openvpn/server.conf
dh dh.pem
Pronađite podešavanja user and group i uklonite“;”na početku svake linije:
/etc/openvpn/server.conf
user nobody
group nogroup
Podešavanje mrežne konfiguracije servera
Postoje neki aspekti mrežne konfirguracije servera OpenVPN-a koji moraju biti podešeni kako bi se saobraćaj pravilno rutirao kroz VPN. Prvi od njih je IP forwarding, metoda koja definiše gde će saobraćaj biti rutiran
Podesićemo je tako što ćemo editovati fajl /etc/sysctl.conf:
$ sudo nano /etc/sysctl.conf
Unutar fajla potražite komentarisanu liniju net.ipv4.ip_forward. Uklonite “#” sa počeka inije kako biste uklonili komentar:
/etc/sysctl.conf
net.ipv4.ip_forward=1
Kada završite sačuvajte i zatvorite fajl.
Da biste čitali fajl i podesili ga za trenutnu sesiju kucajte:
$ sudo sysctl -p Outputnet.ipv4.ip_forward = 1
Sada je potrebno da podesimo firewall podešavanja.
Pre nego što otvorimo konfiguracioni fajl za firewall, morate prvo pronaći javni mrežni interfejs na vašem računaru. Da biste to uradili, kucajte
$ ip route | grep default
Vaš javni mrežni interfejs se nalazi na izlazu komande nakon “dev”. Ispod je primer kako to može da izgleda:
Outputdefault via 203.0.113.1 dev wlp11s0 proto static
Kada je interfejs udružen sa podrazumevanim rutiranjem otvorite fajl /etc/ufw/before.rules i dodajte konfiguraciju:
$ sudo nano /etc/ufw/before.rules
Zapamtite da zamenite wlp11s0 u liniji -A POSTROUTING
koja se nalazi prikazama ispod, sa interfejsom koji ste pronašli u komandi iznad
/etc/ufw/before.rules
## rules.before## Rules that should be run before the ufw command line added rules. Custom# rules
should be added to one of these chains:# ufw-before-input# ufw-before-output# ufw-before-forward# #
START OPENVPN RULES# NAT table rules*nat:POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to wlp11s0
(change to the interface you discovered!)-A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j
MASQUERADECOMMIT# END OPENVPN RULES # Don't delete these required lines, otherwise there will be
errors*filter. . .
Kada završite sačuvajte i zatvorite fajl.
Zatim treba da podesite firewall da podrazumevano dozvoli prosleđene pakete. Da biste to omogućili, otvorite fajl /etc/default/ufw:
$ sudo nano /etc/default/ufw
U fajlu pronađite DEFAULT_FORWARD_POLICY
direktivu i promenite vrednost iz DROP u ACCEPT
:
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
Kada završite sačuvajte i zatvorite fajl.
Dalje treba da podesite firewall da prihvata saobraćaj prema OpenVPN. Ukoliko niste promenili port i protokol u fajlu /etc/openvpn/server.conf
, moraćete da podesite UDP saobraćaj prema portu 1194. Ukoliko ste promenili port i protokol, zamenite vrednosti koje ste izabrali ovde.
Za slučaj da ste zaboravili da dodate SSH port when following možete dodati i to:
$ sudo ufw allow 1194/udp$ sudo ufw allow OpenSSH
Nakon što dodate ova pravila, isključite pa ponovo uključite firewall da bi prihvatio izmene koje ste upravo podesili:
$ sudo ufw disable$ sudo ufw enable
Ovim ste konfigurisali OpenVPN server da pravilno prihvata mrežni saobraćaj.
Pokretanje i aktivacija OpenVPN servisa
Sada ste podesili sve neophodno da starujete OpenVPN servis na vašem serveru. Ovo ćemo uraditi uz pomoć systemd alata ( systemctl).
Pokrenite OpenVPN server navodeći ime konfiguracionog fajla nakon imena fajla systemd. Konfiguracioni fajl za vaš server se zove /etc/openvpn/server.conf
, pa treba da dodate @server na kraj systemd kada ga pozivate:
$ sudo systemctl start openvpn@server
Proverite za svaki slučaj da li je servis pokrenut tako što ćete kucati:
$ sudo systemctl status openvpn@server
Ako je sve kako treba, izlaz će biti:
Output openvpn@server.service - OpenVPN connection to server
Loaded: loaded
(/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid
/run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn)
Tasks: 1 (limit: 512)
CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
└─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --
writepid /run/openvpn/server.pid
Možete takođe proveriti da li je dostupan OpenVPN tun0 interfejs:
$ ip addr show tun0
Ako je sve u redu rezultat će biti:
Output 4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
qlen 100 link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lftforever
Nakon što ste startovali servos potrebno je da ga aktivirate kako bi bio dostupan iz boot-a:
$ sudo systemctl enable openvpn@server
Ovim ste konačno aktivirali i pokrenuli vaš OpenVPN servis. Pre nego što krenete da ga koristite potrebno je da kreirate konfiguracioni fajl za vaš klijentski računar. U ovom uputstvu smo već objasnili kako da kreirate klijentske ključeve i sertifikat, a u sledećem tekstu ćemo objasniti kako da kreirate infrastrukturu koja će lako generisati klijentske fajlove.
Ako ste kojim slučajem imali nekih problema u kreiranju / konfigurisanju OpenVPN servera, pišite nam u komentarima. Potrudićemo se da u najkraćem roku odgovorimo.
Takođe, u narednom članku možete pronaći uputstvo za podešavanje OpenVPNa za Windows, MacOS i Linux klijente.