Internettet er et farligt sted, især hvis du efterlader dine data ukrypteret eller uden ordentlig sikkerhed. Der er flere måder at sikre dine data på; alle på forskellige niveauer. Du bør altid have en stærk firewallpolitik, datakryptering og en stærk adgangskodepolitik. En anden måde at sikre dine data på er ved at få adgang til dem ved hjælp af en VPN-forbindelse.
Virtuelt privat netværk (eller VPN) er en forbindelsesmetode, der bruges til at tilføje sikkerhed og privatliv til private og offentlige netværk og beskytte dine data.
OpenVPN er en fuldt udstyret, open source, SSL VPN-løsning til sikker kommunikation. Det kan bruges til fjernadgang eller kommunikation mellem forskellige servere eller datacentre. Det kan installeres on-prem eller i skyen, i forskellige operativsystemer og kan konfigureres med mange sikkerhedsmuligheder.
I denne blog opretter vi en VPN-forbindelse for at få adgang til en database i skyen. Der er forskellige måder at nå dette mål på, afhængigt af din infrastruktur og hvor mange hardwareressourcer du vil bruge til denne opgave.
F.eks. kan du oprette to VM, en on-prem og en anden i skyen, og de kunne være en bro til at forbinde dit lokale netværk til databasens cloud-netværk via en Peer-to- Peer VPN-forbindelse.
En anden enklere mulighed kunne være at oprette forbindelse til en VPN-server installeret i databasenoden ved hjælp af en VPN-klientforbindelse konfigureret på din lokale maskine. I dette tilfælde bruger vi denne anden mulighed. Du vil se, hvordan du konfigurerer en OpenVPN-server i databasenoden, der kører i skyen, og du vil være i stand til at få adgang til den ved hjælp af en VPN-klient.
Til databasenoden bruger vi en Amazon EC2-instans med følgende konfiguration:
- OS:Ubuntu Server 18.04
- Offentlig IP-adresse:18.224.138.210
- Privat IP-adresse:172.31.30.248/20
- Åbnede TCP-porte:22, 3306, 1194
Sådan installeres OpenVPN på Ubuntu Server 18.04
Den første opgave er at installere OpenVPN-serveren i din databasenode. Faktisk betyder den anvendte databaseteknologi ikke noget, da vi arbejder på et netværkslag, men til testformål efter konfiguration af VPN-forbindelsen, lad os sige, at vi kører Percona Server 8.0.
Så lad os starte med at installere OpenVPN-pakkerne.
$ apt install openvpn easy-rsa
Da OpenVPN bruger certifikater til at kryptere din trafik, skal du bruge EasyRSA til denne opgave. Det er et CLI-værktøj til at oprette en rodcertifikatautoritet og anmode om og underskrive certifikater, inklusive under-CA'er og lister med tilbagekaldelse af certifikater.
Bemærk:Der er en ny EasyRSA-version tilgængelig, men for at holde fokus på OpenVPN-installationen, lad os bruge EasyRSA-versionen, der er tilgængelig i Ubuntu 18.04 repository atm (EasyRSA version 2.2.2- 2).
Den forrige kommando vil oprette mappen /etc/openvpn/ til OpenVPN-konfigurationen og mappen /usr/share/easy-rsa/ med EasyRSA-scripts og konfiguration.
For at gøre denne opgave lettere, lad os oprette et symbolsk link til EasyRSA-stien i OpenVPN-biblioteket (eller du kan bare kopiere det):
$ ln -s /usr/share/easy-rsa /etc/openvpn/
Nu skal du konfigurere EasyRSA og oprette dine certifikater. Gå til EasyRSA-placeringen og opret en sikkerhedskopi til "vars"-filen:
$ cd /etc/openvpn/easy-rsa
$ cp vars vars.bak
Rediger denne fil, og skift følgende linjer i henhold til dine oplysninger:
$ vi vars
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"
Opret derefter et nyt symbolsk link til openssl-filen:
$ cd /etc/openvpn/easy-rsa
$ ln -s openssl-1.0.0.cnf openssl.cnf
Anvend nu vars-filen:
$ cd /etc/openvpn/easy-rsa
$ . vars
BEMÆRK:Hvis du kører ./clean-all, laver jeg en rm -rf på /etc/openvpn/easy-rsa/keys
Kør scriptet til at rense alt:
$ ./clean-all
Og opret Diffie-Hellman-nøglen (DH):
$ ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.....................................................................................................................................................................+
Denne sidste handling kan tage nogle sekunder, og når den er færdig, vil du have en ny DH-fil inde i "keys"-mappen i EasyRSA-mappen.
$ ls /etc/openvpn/easy-rsa/keys
dh2048.pem
Lad os nu oprette CA-certifikaterne.
$ ./build-ca
Generating a RSA private key
..+++++
...+++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Dette vil oprette ca.crt (offentligt certifikat) og ca.key (privat nøgle). Det offentlige certifikat kræves på alle servere for at oprette forbindelse til VPN.
$ ls /etc/openvpn/easy-rsa/keys
ca.crt ca.key
Nu har du oprettet din CA, lad os oprette servercertifikatet. I dette tilfælde kalder vi det "openvpn-server":
$ ./build-key-server openvpn-server
Generating a RSA private key
.......................+++++
........................+++++
writing new private key to 'openvpn-server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Certificate is to be certified until Dec 23 22:44:02 2029 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Dette vil oprette CRT-, CSR- og nøglefilerne til OpenVPN-serveren:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-server.crt openvpn-server.csr openvpn-server.key
Nu skal du oprette klientcertifikatet, og processen er ret ens:
$ ./build-key openvpn-client-1
Generating a RSA private key
.........................................................................................+++++
.....................+++++
writing new private key to 'openvpn-client-1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Certificate is to be certified until Dec 24 01:45:39 2029 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Dette vil oprette CRT-, CSR- og nøglefilerne til OpenVPN-klienten:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-client-1.csr openvpn-client-1.crt openvpn-client-1.key
På dette tidspunkt har du alle certifikaterne klar. Det næste trin vil være at oprette både server- og klient OpenVPN-konfiguration.
Konfiguration af OpenVPN-serveren
Som vi nævnte, vil OpenVPN-installationen oprette mappen /etc/openvpn, hvor du tilføjer konfigurationsfilerne for både server- og klientroller, og den har en eksempelkonfigurationsfil for hver enkelt i / usr/share/doc/openvpn/examples/sample-config-files/, så du kan kopiere filerne på den nævnte placering og ændre dem som du ønsker.
I dette tilfælde bruger vi kun serverkonfigurationsfilen, da det er en OpenVPN-server:
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gunzip /etc/openvpn/server.conf.gz
Lad os nu se en grundlæggende serverkonfigurationsfil:
$ cat /etc/openvpn/server.conf
port 1194
# Which TCP/UDP port should OpenVPN listen on?
proto tcp
# TCP or UDP server?
dev tun
# "dev tun" will create a routed IP tunnel,"dev tap" will create an ethernet tunnel.
ca /etc/openvpn/easy-rsa/keys/ca.crt
# SSL/TLS root certificate (ca).
cert /etc/openvpn/easy-rsa/keys/openvpn-server.crt
# Certificate (cert).
key /etc/openvpn/easy-rsa/keys/openvpn-server.key
# Private key (key). This file should be kept secret.
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
# Diffie hellman parameters.
server 10.8.0.0 255.255.255.0
# Configure server mode and supply a VPN subnet.
push "route 172.31.16.0 255.255.240.0"
# Push routes to the client to allow it to reach other private subnets behind the server.
keepalive 20 120
# The keepalive directive causes ping-like messages to be sent back and forth over the link so that each side knows when the other side has gone down.
cipher AES-256-CBC
# Select a cryptographic cipher.
persist-key
persist-tun
# The persist options will try to avoid accessing certain resources on restart that may no longer be accessible because of the privilege downgrade.
status /var/log/openvpn/openvpn-status.log
# Output a short status file.
log /var/log/openvpn/openvpn.log
# Use log or log-append to override the default log location.
verb 3
# Set the appropriate level of log file verbosity.
Bemærk:Skift certifikatstierne i henhold til dit miljø.
Og start derefter OpenVPN-tjenesten ved hjælp af den oprettede konfigurationsfil:
$ systemctl start [email protected]
Tjek, om tjenesten lytter i den rigtige port:
$ netstat -pltn |grep openvpn
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 20002/openvpn
Til sidst, i OpenVPN-serveren, skal du tilføje IP-videresendelseslinjen i sysctl.conf-filen for at tillade VPN-trafik:
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Og kør:
$ sysctl -p
net.ipv4.ip_forward = 1
Lad os nu se, hvordan du konfigurerer en OpenVPN-klient til at oprette forbindelse til denne nye VPN.
Konfiguration af OpenVPN-klienten
I det foregående punkt nævnte vi OpenVPN-eksempelkonfigurationsfilerne, og vi brugte serveren, så lad os nu gøre det samme, men bruge klientkonfigurationsfilen.
Kopiér filen client.conf fra /usr/share/doc/openvpn/examples/sample-config-files/ på den tilsvarende placering og skift den som du ønsker.
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Du skal også have følgende certifikater oprettet tidligere for at konfigurere VPN-klienten:
ca.crt
openvpn-client-1.crt
openvpn-client-1.key
Så kopier disse filer til din lokale maskine eller VM. Du skal tilføje denne filplacering i VPN-klientens konfigurationsfil.
Lad os nu se en grundlæggende klientkonfigurationsfil:
$ cat /etc/openvpn/client.conf
client
# Specify that we are a client
dev tun
# Use the same setting as you are using on the server.
proto tcp
# Use the same setting as you are using on the server.
remote 18.224.138.210 1194
# The hostname/IP and port of the server.
resolv-retry infinite
# Keep trying indefinitely to resolve the hostname of the OpenVPN server.
nobind
# Most clients don't need to bind to a specific local port number.
persist-key
persist-tun
# Try to preserve some state across restarts.
ca /Users/sinsausti/ca.crt
cert /Users/sinsausti/openvpn-client-1.crt
key /Users/sinsausti/openvpn-client-1.key
# SSL/TLS parms.
remote-cert-tls server
# Verify server certificate.
cipher AES-256-CBC
# Select a cryptographic cipher.
verb 3
# Set log file verbosity.
Bemærk:Skift certifikatstierne i henhold til dit miljø.
Du kan bruge denne fil til at oprette forbindelse til OpenVPN-serveren fra forskellige operativsystemer som Linux, macOS eller Windows.
I dette eksempel bruger vi applikationen Tunnelblick til at oprette forbindelse fra en macOS-klient. Tunnelblick er en gratis, open source grafisk brugergrænseflade til OpenVPN på macOS. Det giver nem kontrol over OpenVPN-klienter. Den leveres med alle de nødvendige pakker som OpenVPN, EasyRSA og tun/tap-drivere.
Da OpenVPN-konfigurationsfilerne har filtypenavne .tblk, .ovpn eller .conf, kan Tunnelblick læse dem alle.
For at installere en konfigurationsfil skal du trække og slippe den på Tunnelblick-ikonet i menulinjen eller på listen over konfigurationer på fanen 'Konfigurationer' i vinduet 'VPN-detaljer'.
Og tryk derefter på "Forbind".
Nu skulle du have nogle nye ruter i din klientmaskine:
$ netstat -rn # or route -n on Linux OS
Destination Gateway Flags Netif Expire
10.8.0.1/32 10.8.0.5 UGSc utun5
10.8.0.5 10.8.0.6 UH utun5
172.31.16/20 10.8.0.5 UGSc utun5
Som du kan se, er der en rute til det lokale databasenetværk via VPN-grænsefladen, så du burde kunne få adgang til databasetjenesten ved hjælp af IP-adressen til den private database.
$ mysql -p -h172.31.30.248
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.18-9 Percona Server (GPL), Release '9', Revision '53e606f'
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Det virker. Nu har du din trafik sikret ved hjælp af en VPN til at oprette forbindelse til din databasenode.
Konklusion
Beskyttelse af dine data er et must, hvis du får adgang til dem via internettet, on-prem eller i et blandet miljø. Du skal vide, hvordan du krypterer og sikrer din fjernadgang.
Som du kunne se, kan du med OpenVPN nå fjerndatabasen ved hjælp af det lokale netværk gennem en krypteret forbindelse ved hjælp af selvsignerede certifikater. Så OpenVPN ligner en god mulighed for denne opgave. Det er en open source-løsning, og installationen/konfigurationen er ret nem. Vi brugte en grundlæggende OpenVPN-serverkonfiguration, så du kan se efter mere kompleks konfiguration i den officielle OpenVPN-dokumentation for at forbedre din OpenVPN-server.