Ultimate guide for å sette opp en sikker OpenVPN-server på Ubuntu 20.04
Et virtuelt privat nettverk (VPN) lar deg trygt og privat koble til et eksternt privat nettverk, for eksempel kontornettverket eller Internett på en slik måte som om du er direkte koblet til et privat nettverk.
VPN fungerer i en server-klient-arkitektur. En VPN-server er distribuert på en maskin og er offentlig tilgjengelig over Internett. VPN-serveren kan konfigureres til å tillate tilkobling til et privat LAN, for eksempel et kontornettverk, eller tillate tilkoblinger til Internett. Brukeren kobler til VPN-serveren ved hjelp av en VPN-klient på sin lokale maskin. Kommunikasjon mellom VPN-server og klient foregår ved hjelp av en sikker tunneleringsprotokoll. For Internett virker det som om destinasjonen for trafikken er VPN-serveren; trafikken går imidlertid til klienten via serveren.
VPN har mange bruksområder i det daglige livet, som sikker tilkobling til et offentlig Wifi-nettverk, som ofte er kompromittert eller omgå geo-restriksjoner på visse nettsteder ved å koble til en VPN basert i et land som er tillatt av nettstedet.
OpenVPN er en mye brukt VPN-implementering som tillater et bredt spekter av konfigurasjoner og alternativer. Den bruker Secure Sockets Layer (SSL)-protokoll for kryptering av data og forhåndsdelte nøkler, brukernavn/passord eller sertifikater for autentisering av VPN-klienten. I denne artikkelen vil vi se hvordan du setter opp en VPN-server og VPN-klient på Ubuntu 20.04.
Installasjon
OpenVPN er tilgjengelig i de offisielle Ubuntu-repositoriene i pakken openvpn
. Denne pakken installerer både OpenVPN-serveren og klienten.
sudo apt installer openvpn
Som nevnt tidligere bruker OpenVPN SSL-sertifikater for å kryptere data mellom serveren og klienten. Vi må sette opp vår egen sertifiseringsinstans (CA) for å utstede sertifikater for VPN. Merk at dette bør settes opp på en annen maskin enn den der OpenVPN er satt opp; årsaken er at hvis den er på samme server og hvis den blir kompromittert, kan en angriper få tilgang til den private nøkkelen og dermed angripe VPN-tilkoblingen.
Vi vil bruke et verktøy kalt "Easy-RSA" for å sette opp sertifiseringsmyndigheten. For å installere den, kjør følgende på CA-maskinen, OpenVPN-servermaskinen og klientmaskinen, da konfigurasjonen kreves på alle tre av disse for å sette opp CA.
sudo apt install easy-rsa
Vi vil nå først konfigurere sertifiseringsmyndigheten på CA-maskinen og utføre noen nødvendige konfigurasjonstrinn for den samme på Open VPN-servermaskinen.
Oppsett av sertifiseringsinstans
Innledende oppsett på CA-maskin
Nå installerer denne pakken en kommando kalt make-cadir
som brukes til å opprette en mappe for konfigurasjon av sertifiseringsinstans. La oss lage en mappe ved å bruke denne og gå inn i mappen.
make-cadir cert_authority && cd cert_authority
Åpne filen som heter vars
opprettet i denne katalogen. Denne filen inneholder noen konfigurasjonsvariabler som vi må endre. Verdiene som må endres står på linje 91-96, etter kommentaren om Organisasjonsfelt som beskriver disse feltene. Fjern kommentarene til linjene og fyll de riktige verdiene i stedet for prøveverdiene.
Lagre og avslutt filen. Hvis du bruker vim editor, trykk Esc
, type :wq
og trykk Tast inn
for å lagre og avslutte.
Deretter kjører vi easyrsa
program i katalogen for å sette opp den offentlige nøkkelinfrastrukturen (PKI), som vil bli brukt til å generere offentlig nøkkel og sertifikater.
./easyrsa init-pki
Det neste trinnet vil generere CA-nøkkelen og sertifikatet. Når kommandoen ber om et passord, skriv inn et passord for CA-nøkkelen. Skriv også inn et vanlig navn når du blir bedt om det. Hvis du lar dette stå tomt, vil standardnavnet Easy-RSA CA-navn brukes.
./easyrsa bygge-ca
Som vi kan se fra utdataene er sertifikatet og nøkkelen generert. Denne nøkkelen vil bli brukt til å signere klient- og serversertifikatene, og bør derfor aldri berøres/modifiseres.
Nå har vi PKI-oppsettet. Neste trinn er å lage en servernøkkel og sertifikat på maskinen som vi skal bruke som en OpenVPN-server. Dette sertifikatet vil senere bli signert av CA-maskinen.
Genererer servernøkkel og sertifikat på servermaskinen
Vi har allerede installert Easy RSA på servermaskinen. Utfør nå de tre trinnene på servermaskinen, som vi tidligere utførte på CA-maskinen, nemlig. opprette en CA-katalog ved hjelp av make-cadir
og gå inn i den, endre variablene i vars
fil og generere PKI ved hjelp av ./easyrsa init-pki
kommando.
Deretter må vi kjøre kommandoen for å generere en serversertifikatforespørsel og nøkkel.
./easyrsa gen-req server nopass
Merk at vi passerte alternativet nopass
slik at kommandoen ikke vil be oss om å angi et passord for servernøkkelen. Den vil fortsatt be om et felles navn for serveren, som du kan skrive inn hva som helst, eller la det stå tomt for standardnavnet (server) å bli brukt.
Flytt den genererte nøkkelfilen inne i /etc/openvpn
katalog.
sudo mv pki/private/server.key /etc/openvpn
Send sertifikatforespørselen til CA-maskinen. Vi vil bruke kommando scp
for dette formålet.
scp pki/reqs/server.req bruker@CA_MACHINE_HOSTNAME:/katalog
I skjermbildet ovenfor er verten 45.79.125.41 CA-maskinen. Vi har kopiert sertifikatet til /root-katalogen.
Nå har sertifikatet til serveren blitt kopiert til CA-maskinen. Neste trinn er å gå tilbake til CA-maskinen og signere dette sertifikatet.
Signering av serversertifikatet i CA
Først, la oss verifisere om sertifikatforespørselsfilen fra serveren har blitt kopiert til CA-maskinen. Gå til katalogen der vi kopierte filen (/root i mitt eksempel) og kjør ls
.
:~# cd /root && ls cert_authority server.req
Som vi kan se, filen server.req
er tilstede. Gå deretter til CA-katalogen og importer denne forespørselen.
cd cert_authority ./easyrsa import-req /root/server.req server
For å signere denne forespørselen, kjør følgende kommando.
./easyrsa sign-req server server
Her er det første argumentet typen forespørsel, dvs. server, og det andre argumentet er det vanlige navnet på servermaskinen, som vi tidligere brukte standardverdien for, dvs. server.
Skriv inn uttrykket ja, og passordet for CA-nøkkelen når du blir bedt om det.
Nå kan vi fjerne sertifikatforespørselsfilen og kopiere det genererte sertifikatet for serveren, samt CA offentlig sertifikat tilbake til servermaskinen.
rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root
Deretter må vi utføre noen flere trinn for å sikre sikker tilkobling av VPN.
Generering av DH-parametere
DH (Diffie-Hellman) nøkkelutveksling er en algoritme for å sikre en sikker utveksling av kryptonøkler over en usikker kanal. Først, la oss flytte det mottatte sertifikatet og det offentlige CA-sertifikatet til /etc/openvpn
.
mv /root/ca.crt /root/server.crt /etc/openvpn
Gå til CA-mappen på servermaskinen og kjør følgende kommando for å generere DH-parametrene. Det kan ta lang tid å generere.
./easyrsa gen-dh
Flytt nå den genererte filen til /etc/openvpn
.
mv /root/cert_authority/pki/dh.pem /etc/openvpn
Generering av TA-nøkler
OpenVPN bruker et annet ekstra sikkerhetstiltak ved å bruke TLS auth-nøkkel. For å generere TLS-autenteringsnøkkelen, kjør:
openvpn --genkey --secret tls_auth.key
Og flytt nøkkelen til /etc/openvpn
.
mv tls_auth.key /etc/openvpn
Konfigurasjonen av servernøkkelen og oppsett av sertifiseringsinstans er nå ferdig. La oss gå til den faktiske konfigurasjonen av VPN-serveren nå.
OpenVPN-serverkonfigurasjon
Konfigurasjonsfilen for OpenVPN-serveren opprettes ikke automatisk, men vi kan bruke en malkonfigurasjonsfil fra openvpn
pakke.
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz
Åpne filen ved å bruke vim eller et hvilket som helst redigeringsprogram du ønsker.
cd /etc/openvpn vim server.conf
Vi må skrive inn de vanlige navnene på nøkler og sertifikater som vi genererte tidligere. Gå til linjenr. 78. Siden vi brukte alle standardnavnene, beholder vi dem uendret. Sjekk deretter navnet på DH-parameterfilen på linje 85. Vi har brukt navnet dh.pem, så la oss endre det.
La oss deretter endre privilegiene for OpenVPN-serveren. Gå til linje 274 og 275 og fjern innledningen ;
å avkommentere det.
Gå på samme måte til linje 192 og fjern semikolonet. Dette direktivet gjør at trafikken til alle klientene kan passere gjennom VPN.
Lagre og avslutt filen.
Endre eierskapet til mappen /etc/openvpn til root.
sudo chown -R root:root /etc/openvpn
Oppsett av nettverk og brannmur
Vi må tillate IP-videresending på serveren for å tillate videresending av pakker fra og til VPN-klienten. Avkommenter linje 28 på /etc/sysctl.conf
:
Lagre og avslutt filen.
Omstart systemctl
for at disse endringene skal finne sted.
sudo sysctl -p
Vi må sette opp Network Address Translation (NAT) på serveren ved å bruke en UFW-brannmur slik at VPN-klienten får tilgang til Internett ved å bruke VPN-serverens IP-adresse. Først, la oss aktivere pakkevideresending i brannmurkonfigurasjonen. Åpen /etc/default/ufw
og endre variabelen på linje 19 til ACCEPT.
Lagre og avslutt filen.
Legg nå til følgende regler i filen /etc/ufw/before.rules
før filter linje i filen.
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT
Angi nettverksgrensesnittet i stedet for . Du kan se nettverksgrensesnittet med kommandoen ifconfig
.
Tillat trafikk for OpenVPN-tjenesten på brannmuren og tillat port 1194.
sudo ufw tillat openvpn && sudo ufw tillat 1194
Last inn brannmurtjenesten på nytt.
sudo ufw last inn på nytt
Vi kan nå starte Open VPN-serverdemonen på nytt ved å kjøre:
sudo tjeneste openvpn omstart
Aktiver den til å starte ved oppstartstid ved å kjøre:
sudo systemctl aktiver openvpn
OpenVPN-serveren er nå konfigurert og har startet. La oss nå gå videre til klientsertifikatforespørsel og nøkkelgenerering og annen konfigurasjon.
OpenVPN-klientkonfigurasjon
Vi må generere en nøkkel og en sertifikatforespørsel for klienten. Prosedyren for å gjøre dette er den samme som for serveren.
Selv om en klientnøkkel og sertifikatforespørsel kan opprettes på klientmaskinen og deretter overføres til CA-maskinen, anbefales det å opprette den på servermaskinen. Fordelen med å gjøre dette på serveren er at du kan lage et skript for å utføre alle nødvendige trinn på serveren som gjør det lettere for en ny klient å bli med i VPN.
Gå til CA-mappen på serveren og kjør følgende:
cd ~/cert_authority ./easyrsa gen-req klient nopass
På lignende måte som tidligere, skriv inn et vanlig navn når du blir bedt om det, eller la det stå tomt for å bruke standard fellesnavn, dvs. klient.
La oss nå kopiere den genererte klientsertifikatforespørselen til CA-maskinen.
scp pki/reqs/client.req [email protected]:/root
La oss importere denne forespørselen til CA-maskinen:
./easyrsa import-req /root/client.req-klient
Og la oss nå signere det:
./easyrsa sign-req klientklient
Tast innja
når du blir bedt om å fortsette. Skriv inn passordet for CA-nøkkelen når du blir bedt om det.
Vi kan nå fjerne den forespurte filen for klienten og kopiere forespørselen tilbake til VPN-servermaskinen.
rm /root/client.req scp pki/issued/client.crt [email protected]:/root
La oss lage en mappe som heter klient
for å beholde alle filer relatert til klienten på VPN-serveren. Vi flytter klientnøkkelen og sertifikatet til denne mappen.
mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client
La oss nå lage en konfigurasjonsfil fra en tilgjengelig mal, som ligner på hvordan vi opprettet serverkonfigurasjonsfilen.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client
Åpne filen client.conf
. På linje 42, skriv inn vertsnavn eller IP-adresse til servermaskinen i stedet for min-server-1
.
Fjern kommentarene til linjene 61 og 62 ved å fjerne det innledende semikolonet for å nedgradere rettighetene for filen.
Deretter kommenterer du linje 88-90 og linje 108. Grunnen er at vi ønsker å legge til innholdet i de nevnte filene manuelt i stedet for å bruke filplasseringene. Hensikten med å gjøre dette er at klientens konfigurasjonsfil senere vil bli overført til klienten, hvor vi faktisk ikke vil ha klientnøkkelen og sertifikatfilene; derfor kopierer vi innholdet i selve konfigurasjonsfilen.
Legg til følgende til klientens konfigurasjonsfil. Skriv inn filinnholdet til de respektive filene i de gitte kodene.
# Lim inn innholdet i ca.crt-filen her # Lim inn innholdet i client.crt-filen her # Lim inn innholdet i client.key-filen her key-direction 1 # Lim inn innholdet i tls_auth.key-filen her
Lagre og avslutt filen. Gi nytt navn til denne filen fra client.conf
til klient.ovpn
, siden sistnevnte er utvidelsen som kreves for konfigurasjonsfiler som kan importeres som nettverkskonfigurasjoner.
Overfør nå filen klient.ovpn
til klienten, dvs. lokal maskin.
Løpe scp
på klientmaskinen din for å overføre filen fra servermaskinen til din lokale maskin.
scp bruker@server_ip:/bane_til_fil lokal_destinasjonsbane
Til slutt må vi bruke denne konfigurasjonsfilen for å koble til VPN-serveren. Dette kan gjøres både via kommandolinje så vel som GUI.
For å starte VPN-klienten fra kommandolinjen, kjør:
sudo openvpn --config client.ovpn
Og det er den eneste kommandoen du trenger å kjøre for å starte VPN-klienten.
For å starte VPN-klienten via GUI, utfør følgende trinn.
Gå til Innstillinger » Nettverk på klientmaskinen.
Klikk på + knappen i VPN-delen og velg "Importer fra fil ..." fra alternativene.
Klikk på "Legg til" for å begynne å bruke VPN.
Merk at under 'Gateway' er det IP-adressen til serveren.
Til slutt, veksle mellom 'klient VPN'-knappen for å aktivere VPN på maskinen.
Det kan ta noen sekunder å opprette en VPN-tilkobling. En ny fremdriftslogo for VPN vil vises øverst til venstre på skjermen mens den konfigureres, og den vil endres til en VPN-logo når den er konfigurert.
For å bekrefte om VPN-en fungerer som den skal, kjør følgende:
curl //ipinfo.io/ip
Den skal returnere IP-adressen til servermaskinen din. Ellers kan du også sjekke IP-adressen din ved å søke «Min IP» på Google. Den skal vise VPN-serverens IP-adresse hvis VPN-oppsettet vårt fungerer som det skal.
Konklusjon
I denne artikkelen så vi hvordan du konfigurerer en OpenVPN-server, en sertifiseringsinstans og en OpenVPN-klient. For å legge til flere klienter til VPN, må vi nå følge prosedyren for å generere og signere et sertifikat for klienten og bruke den samme konfigurasjonsfilen som er opprettet her, med bare klientnøkkelen og sertifikatverdiene endret.
Ved tregere internettforbindelser er det mulig at hvis UDP brukes til kommunikasjon, er det betydelig pakketap. Brukeren kan bytte til TCP ved å oppheve kommentering av linjen proto tcp
og kommenterer linjen proto udp
i serverkonfigurasjonsfilen.
Også, i tilfelle det er andre feil, kan du angi loggingsnivå med verb
direktiv i både server- og klientkonfigurasjonsfiler. Du kan angi verdier mellom 0 og 9. Høyere verdien av dette direktivet, mer detaljert vil loggen være.