OpenVPN
OpenVPN Guide for Ubuntu 24
Intro til hva systemet brukes til
OpenVPN er et open source virtuelt privat nettverk (VPN). OpenVPN kan brukes til å opprette en sikker tilkobling mellom to parter over et usikret nettverk; internett. OpenVPN er en robust og sikker løsning som er relativt lett å sette opp.
Innstalasjon
Server (Ubuntu)
Først må OpenVPN installeres på ubuntu serveren med følgende kommando;
sudo apt install openvpn easy-rsa
Certificate Authority (CA)
Etter dette må easy-rsa bli gjort til Certificate Authority (CA). Dette kan gjøres med følgende kommando;
sudo make-cadir /etc/openvpn/easy-rsa
Deretter må du endre bruker til root, dette kan gjøres med følgende kommando;
sudo su
Deretter må vi kjøre følgende scripts kjøres i mappen /etc/openvpn/easy-rsa;
./easyrsa init-pki ./easyrsa build-ca
NB: Hver gang du ønsker å kryptere responsen av en kommando som en privat nøkkel, vil passphrasen som ble opprettet når du lagde CA bli etterspurt husk å skrive ned denne.
Server nøkler og sertifikater
Videre lager vi et nøkkelpar for serveren. Først må vi kjøre følgende kommando hvor myservername er navnet på VPN serveren du oppretter;
./easyrsa gen-req myservername nopass
Deretter må vi generere nøkkel bytte (diffie hellmann parametere), disse blir lagt i følgende fil etter at kommandoen er kjørt; pki/dh.pem. For å generere dette kjør følgende kommando;
./easyrsa gen-dh
Til slutt kan vi da opprette et sertifikat for serveren med følgende kommando;
./easyrsa sign-req server myservername
Det er standard praksis å lagre en kopi av nøklene og sertifikatet i /etc/openvpn/ med følgende kommando;
cp pki/dh.pem pki/ca.crt pki/issued/myservername.crt pki/private/myservername.key /etc/openvpn/
Opprette klient sertifikat
Videre må alle klienter som skal bruke tjenesten ha et sertifikat. Dersom du skal ha flere brukere på tjenesten må du altså gå gjennom denne prosessen flere ganger. For å genere og signere et sertifikat for en brukeren, i dette eksempelet kaller vi brukeren myclient1 bruk følgende kommandoer
./easyrsa gen-req myclient1 nopass
./easyrsa sign-req client myclient1
Til slutt må de følgende filene kopieres over til klienten og kan slettes på serveren etter at de er trygt kopiert over Merk; disse MÅ sendes over på en trygg måte, dersom de kommer på avveie har alle som har de tilgang på serveren din…;
pki/ca.crt
pki/issued/myclient1.crt
Server konfigurasjon
Start med å pakke ut og kopiere over server.conf.gz til /etc/openvpn/server.conf ved hjelp av følgende kommandoer;
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/myserver.conf
Deretter rediger filen /etc/openvpn/myserver.conf med din favoritt editor for eksempel nano til å peke til konfigurasjonen du gjorde over;
ca.crt myservername.crt yservername.key
Dessuten må følgende linje også aktiveres i filen ved å fjerne “;” symbolet foran;
tls-auth ta.key 0 # This file is secret
Generer så en TLS nøkkel i mappen etc/openvpn med følgende kommando;
sudo openvpn --genkey secret ta.key
Rediger deretter filen /etc/sysctl.conf og fjern kommentaren altså “#” fra følgende linje;
#net.ipv4.ip_forward=1
Videre må systemctl reloades med følgende kommando;
sudo sysctl -p /etc/sysctl.conf
Og til slutt kan du starte openvpn med følgende kommando;
openvpn@myserver
Kilde: https://ubuntu.com/server/docs/how-to-install-and-use-openvpn
Standard konfigurasjon
Sende all trafikk via VPN
For å sende all trafikk via VPN gå inn i konfigurasjonsfilen på servern /etc/openvpn/myserver.conf og fjerne kommentaren fra følgende linje ved å fjerne “;” foran;
push "redirect-gateway def1 bypass-dhcp"
Du må deretter sette opp masquerade for at klienten skal kunne nå internett, i dette eksempelet blir det antatt at OpenVPN sitt default subnet er i bruk altså 10.8.0.0/24, det kan gjøres ved å kjøre følgende kommando;
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
Dersom du ikke allerede har lastet ned iptables-persistent må dette lastes ned for å sørge for at reglene du setter ikke glemmes ved omstart. Du kan laste ned med følgende kommando, svar ja på spørsmålene om å lagre reglenene som eksisterer nå;
sudo apt-get install iptables-persistent
Dersom du allerede har lastet ned iptables persistent kan reglene oppdateres med følgende kommando, merk at dette må gjøres som root;
iptables-save > /etc/iptables/rules.v4
Deretter må tjenesten restartes med følgende kommando;
sudo systemctl start openvpn@myserver
Gi tilgang til nettverk bak VPN
For å gi tilgang til nettverk bak en VPN må du gå inn i konfigurasjonsfilen på serveren /etc/openvpn/myserver.conf og fjerne kommentaren fra følgende linje ved å fjerne “;” foran:
push "route 192.168.10.0 255.255.255.0"
Husk her brukes ikke CIDR notasjon, eksempelet over ville vært 192.168.10.0/24 i CIDR.
Deretter må tjenesten restartes med følgende kommando;
sudo systemctl start openvpn@myserver
Info om versjoner, releases og sikkerhetshull
https://openvpn.net/security-advisories/
Oppdatering
Det er flere muligheter for å oppdatere OpenVPN, men vi anbefaler å holde seg til ubuntu sine egne systemer. Det gjør det lettere å oppdatere alle pakkene på maskinen. Ubuntu sine sikkerhetsoppdateringer vil da også følge med. For å hente nye oppdateringer kjøres følgende kommando;
sudo apt update
Deretter må de oppgraderes NB Dette vil føre til nedetid i perioden serveren oppgraderes. Dette kan gjøres med følgende kommando;
sudo apt upgrade
Dersom du ikke ønsker å bruke den anbefalte metoden over kan følgende gjøres.
Først må du endre bruker til root, alle kommandoer må kjøres som root. Dette kan gjøres med følgende kommando;
sudo su
Deretter må følgende kommando kjøres:
curl -fsSL https://swupdate.openvpn.net/repos/repo-public.gpg | gpg --dearmor > /etc/apt/keyrings/openvpn-repo-public.gpg
Og så må følgende kommando kjøres;
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/openvpn-repo-public.gpg] https://build.openvpn.net/debian/openvpn/stable noble main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
Deretter kan følgende kommando kjøres for å hente oppdateringer;
sudo apt update
Deretter må de oppgraderes NB Dette vil føre til nedetid i perioden serveren oppgraderes. Dette kan gjøres med følgende kommando;
sudo apt upgrade
Backup
Den beste løsningen for backup er å kjøpe backup gjennom Deploi, men dersom det også er ønskelig å ta egne backups kan følgende gjøres.
For OpenVPN må kun mappen pki og filen myserver.conf, myserver er navnet på din server, backes opp. Dette kan enkelt gjøres ved å zippe filen/mappen og flytte dem til en annen lokasjon, helst en annen server.
Først må zip installeres, dette kan gjøres med følgende;
sudo apt-get install zip
Det lønner seg å legge ved en dato for backup, fyll inn <DATE> med dagens dato. For å ta en backup av pki mappen må du først endre bruker til root og deretter bevege deg til mappen /etc/openvpn/easy-rsa. For å lage en zip kopi av mappen kan følgende kommando kjøres;
zip -r /home/<USERNAME>/pki<DATE>.zip pki
Og deretter beveg deg til /etc/openvpn og kjør følgende kommando;
sudo zip ~/myserverconf.zip myserver<DATE>.conf
Løsning på vanlige oppgaver
Legge til ny bruker
Nye brukere kan legges til ved å opprette nye sertifikater på serveren, dette kan gjøres med følgende kommandoer i mappen /etc/openvpn/easy-rsa;
./easyrsa gen-req nopass ./easyrsa sign-req client
Deretter må den nye brukeren logge på VPN, hvordan dette gjøres er beskrevet lenger nede i guiden.
Logge på VPN fra Linux
Først må du installere openvpn på enheten med følgende kommando;
sudo apt install openvpn
Deretter kopier forslag til konfig fil over til /etc/openvpn med følgende kommando;
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Så må nøklene/sertifikatene generert på serveren sendes til klienten. Følgende sertifikater/nøkler må overføres. Ca.cert, myclient1.cert, myclient1.key og ta.key.
Disse kan kopieres over med scp;
Sudo scp myclient1.crt username@IP:
Videre må du gå inn i filen /etc/openvpn/client.conf og sørge for at den er konfigurert til å bruke nøklene/sertifikatene du nettopp overførte. For dette eksempelet skal det ser ut som dette:
ca: ca.crt cert: myclient1.crt key:myclient1.key
TLS må også aktiveres her ved å fjerne kommentaren “;” fra følgende linje i konfigurasjonsfilen;
tls-auth ta.key 1
Og til slutt må du legge inn IP adressen til servern ved å legge inn riktig IP adresse på remote som sett under;
remote /domenenavn 1194
Til slutt kan servicen startes med følgende kommando;
sudo systemctl start openvpn@client
Logge på VPN fra Windows
Først må openVPN lastes ned, dette kan gjøres fra følgende nettside;
https://openvpn.net/community-downloads/
Så må nøklene/sertifikatene generert på serveren sendes til klienten. Følgende sertifikater/nøkler må overføres. Ca.cert, myclient1.cert, myclient1.key og ta.key. De må legges i mappen C:/Brukere/BRUKERNAVN/OpenVPN/config. Deretter må du laste ned en eksempel-konfigurasjonsfil fra openVPN. Dette kan gjøres fra følgende nettside; https://github.com/OpenVPN/openvpn/blob/master/sample/sample-config-files/client.conf . NB filen må endres fra en config filtype til en .ovpn filtype.
Videre må du gå inn i filen /etc/openvpn/client.ovpn og sørge for at den er konfigurert til å bruke nøklene/sertifikatene du nettopp overførte. For dette eksempelet skal det ser ut som dette:
ca: ca.crt cert: myclient1.crt key:myclient1.key
TLS må også aktiveres her ved å fjerne kommentaren “;” fra følgende linje i konfigurasjonsfilen;
tls-auth ta.key 1
Og til slutt må du legge inn IP adressen til servern ved å legge inn riktig IP adresse på remote som sett under;
remote IP/domenenavn 1194
OpenVPN er allerede startet og kan ses i taskbaren, stopp den kjørende prosessen og start OpenVPN på nytt som administrator. Du kan avslutte ved å høyreklikke på OpenVPN i taskbaren og deretter klikke på avslutte. Når OpenVPN er startet igjen, klikk på ikonet i taskbaren på nytt og klikk på koble til. Dersom alt er konfigurert riktig skal den koble seg til serveren.
Slette bruker
Først må du logge inn på serveren og endre bruker til root for så å legge til følgende linje i /etc/openvpn/myserver.config;
crl-verify crl.pem
Deretter må du bevege deg til /etc/openvpn/easy-rsa mappen og kjøre følgende kommando;
./easyrsa revoke clientname
Så må følgende kommando kjøres for å genere en fil med ikke aksepterte sertifikater som kan leses av openvpn;
./easyrsa gen-crl
NB: crl.pem går ut etter 6 måneder og må dermed fornyes, dette kan gjøres ved å generere den på nytt med kommandoen over. Den genererte filen med navn crl.pem må så flyttes til /etc/openvpn mappen så OpenVPN har tilgang til den. Til slutt må OpenVPN restartes med følgende kommando;
systemctl restart openvpn@myserver.service
Vedlikehold og rutineoppgaver
Utløp og fornying av certificates
Server/klient
De fleste sertifikatene på servern kan fornyes ved å logge seg inn på serveren som root og bevege seg til /etc/openvpn/easy-rsa mappen for deretter å kjøre følgende kommando;
./easyrsa renew myservername
Deretter kan følgende kommando kjøres for å fjerne det gamle sertifikatet
./easyrsa revoke-renewed myservername
Dette vil fungere for server og klient sertifikater, merk at dersom dette gjøres for klient sertifikater må det nye sertifikatet sendes til klienten også. For at revokasjonen skal tre i effekt må du først legge til følgende linje i filen /etc/openvpn/myserver.config ;
crl-verify crl.pem
Så må følgende kommando kjøres for å genere en fil med ikke aksepterte sertifikater som kan leses av openvpn;
./easyrsa gen-crl
Den genererte filen med navn crl.pem må så flyttes til /etc/openvpn mappen så OpenVPN har tilgang til den. Til slutt må OpenVPN restartes med følgende kommando;
systemctl restart openvpn@myserver.service
CA
Hvis CA sertifikatet har utløpt anbefales det å opprette en ny OpenVPN server på en ny Ubuntu distribusjon. Sertifikatet utløper hvert tiende år, men dette er mulig å endre dersom det er ønskelig at det nye sertifikatet skal vare lenger enn dette. Det kan endres i /etc/openvpn/easy-rsa/vars filen. Følgende linje må da kommenteres ut og antall dager må endres til ønskelig lengde, for eksempel 7300 (20 år)
set_var EASYRSA_CA_EXPIRE 3650