Internet är en farlig plats, särskilt om du lämnar dina data okrypterade eller utan ordentlig säkerhet. Det finns flera sätt att säkra din data; alla på olika nivåer. Du bör alltid ha en stark brandväggspolicy, datakryptering och en stark lösenordspolicy. Ett annat sätt att säkra din data är genom att komma åt den med en VPN-anslutning.
Virtual Private Network (eller VPN) är en anslutningsmetod som används för att lägga till säkerhet och sekretess till privata och offentliga nätverk och skydda dina data.
OpenVPN är en fullt utrustad SSL VPN-lösning med öppen källkod för säker kommunikation. Den kan användas för fjärråtkomst eller kommunikation mellan olika servrar eller datacenter. Den kan installeras på plats eller i molnet, i olika operativsystem och kan konfigureras med många säkerhetsalternativ.
I den här bloggen skapar vi en VPN-anslutning för att komma åt en databas i molnet. Det finns olika sätt att uppnå detta mål, beroende på din infrastruktur och hur mycket hårdvaruresurser du vill använda för denna uppgift.
Du kan till exempel skapa två virtuella datorer, en on-prem och en annan i molnet, och de kan vara en brygga för att ansluta ditt lokala nätverk till databasens molnnätverk via en Peer-to- Peer VPN-anslutning.
Ett annat enklare alternativ kan vara att ansluta till en VPN-server installerad i databasnoden med en VPN-klientanslutning konfigurerad på din lokala dator. I det här fallet använder vi det här andra alternativet. Du kommer att se hur du konfigurerar en OpenVPN-server i databasnoden som körs i molnet, och du kommer att kunna komma åt den med en VPN-klient.
För databasnoden använder vi en Amazon EC2-instans med följande konfiguration:
- OS:Ubuntu Server 18.04
- Offentlig IP-adress:18.224.138.210
- Privat IP-adress:172.31.30.248/20
- Öppna TCP-portar:22, 3306, 1194
Hur man installerar OpenVPN på Ubuntu Server 18.04
Den första uppgiften är att installera OpenVPN-servern i din databasnod. Faktum är att databastekniken som används spelar ingen roll eftersom vi arbetar med ett nätverkslager, men för testsyften efter att ha konfigurerat VPN-anslutningen, låt oss säga att vi kör Percona Server 8.0.
Så låt oss börja med att installera OpenVPN-paketen.
$ apt install openvpn easy-rsa
Eftersom OpenVPN använder certifikat för att kryptera din trafik, behöver du EasyRSA för denna uppgift. Det är ett CLI-verktyg för att skapa en rotcertifikatutfärdare och begära och signera certifikat, inklusive sub-CA och listor för återkallelse av certifikat.
Obs:Det finns en ny EasyRSA-version tillgänglig, men för att behålla fokus på OpenVPN-installationen, låt oss använda EasyRSA-versionen som är tillgänglig i Ubuntu 18.04-förvaret atm (EasyRSA version 2.2.2- 2).
Det föregående kommandot skapar katalogen /etc/openvpn/ för OpenVPN-konfigurationen och katalogen /usr/share/easy-rsa/ med EasyRSA-skripten och konfigurationen.
För att göra denna uppgift enklare, låt oss skapa en symbolisk länk till EasyRSA-sökvägen i OpenVPN-katalogen (eller så kan du bara kopiera den):
$ ln -s /usr/share/easy-rsa /etc/openvpn/
Nu måste du konfigurera EasyRSA och skapa dina certifikat. Gå till EasyRSA-platsen och skapa en säkerhetskopia för "vars"-filen:
$ cd /etc/openvpn/easy-rsa
$ cp vars vars.bak
Redigera den här filen och ändra följande rader enligt din information:
$ 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"
Skapa sedan en ny symbolisk länk till openssl-filen:
$ cd /etc/openvpn/easy-rsa
$ ln -s openssl-1.0.0.cnf openssl.cnf
Använd nu vars-filen:
$ cd /etc/openvpn/easy-rsa
$ . vars
OBS:Om du kör ./clean-all kommer jag att göra en rm -rf på /etc/openvpn/easy-rsa/keys
Kör skriptet rensa allt:
$ ./clean-all
Och skapa Diffie-Hellman-nyckeln (DH):
$ ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.....................................................................................................................................................................+
Denna sista åtgärden kan ta några sekunder, och när den är klar kommer du att ha en ny DH-fil i katalogen "nycklar" i EasyRSA-katalogen.
$ ls /etc/openvpn/easy-rsa/keys
dh2048.pem
Låt oss nu skapa CA-certifikaten.
$ ./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.
...
Detta skapar ca.crt (offentligt certifikat) och ca.key (privat nyckel). Det offentliga certifikatet kommer att krävas på alla servrar för att ansluta till VPN.
$ ls /etc/openvpn/easy-rsa/keys
ca.crt ca.key
Nu har du skapat din CA, låt oss skapa servercertifikatet. I det här fallet kallar 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
Detta skapar CRT-, CSR- och nyckelfilerna för OpenVPN-servern:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-server.crt openvpn-server.csr openvpn-server.key
Nu måste du skapa klientcertifikatet, och processen är ganska lik:
$ ./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
Detta skapar CRT-, CSR- och nyckelfilerna för OpenVPN-klienten:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-client-1.csr openvpn-client-1.crt openvpn-client-1.key
Vid det här laget har du alla certifikat redo. Nästa steg blir att skapa både server och klient OpenVPN-konfiguration.
Konfigurera OpenVPN-servern
Som vi nämnde kommer OpenVPN-installationen att skapa /etc/openvpn-katalogen, där du lägger till konfigurationsfilerna för både server- och klientroller, och den har ett exempel på konfigurationsfilen för var och en i / usr/share/doc/openvpn/examples/sample-config-files/, så att du kan kopiera filerna på den nämnda platsen och ändra dem som du vill.
I det här fallet kommer vi bara att använda serverkonfigurationsfilen, eftersom det är en OpenVPN-server:
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gunzip /etc/openvpn/server.conf.gz
Låt oss nu se en grundläggande 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.
Obs! Ändra certifikatsökvägarna enligt din miljö.
Och starta sedan OpenVPN-tjänsten med den skapade konfigurationsfilen:
$ systemctl start [email protected]
Kontrollera om tjänsten lyssnar i rätt port:
$ netstat -pltn |grep openvpn
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 20002/openvpn
Slutligen, i OpenVPN-servern måste du lägga till IP-vidarebefordransraden i filen sysctl.conf för att tillåta VPN-trafiken:
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Och kör:
$ sysctl -p
net.ipv4.ip_forward = 1
Låt oss nu se hur man konfigurerar en OpenVPN-klient för att ansluta till denna nya VPN.
Konfigurera OpenVPN-klienten
I föregående punkt nämnde vi OpenVPN-exempelkonfigurationsfilerna och vi använde servern, så nu ska vi göra samma sak men använda klientkonfigurationsfilen.
Kopiera filen client.conf från /usr/share/doc/openvpn/examples/sample-config-files/ på motsvarande plats och ändra den som du vill.
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Du behöver även följande certifikat som skapats tidigare för att konfigurera VPN-klienten:
ca.crt
openvpn-client-1.crt
openvpn-client-1.key
Så kopiera dessa filer till din lokala dator eller virtuella dator. Du måste lägga till den här filplatsen i VPN-klientens konfigurationsfil.
Låt oss nu se en grundläggande 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.
Obs! Ändra certifikatsökvägarna enligt din miljö.
Du kan använda den här filen för att ansluta till OpenVPN-servern från olika operativsystem som Linux, macOS eller Windows.
I det här exemplet använder vi programmet Tunnelblick för att ansluta från en macOS-klient. Tunnelblick är ett gratis grafiskt användargränssnitt med öppen källkod för OpenVPN på macOS. Det ger enkel kontroll över OpenVPN-klienter. Den kommer med alla nödvändiga paket som OpenVPN, EasyRSA och tun/tap-drivrutiner.
Eftersom OpenVPN-konfigurationsfilerna har tillägg av .tblk, .ovpn eller .conf, kan Tunnelblick läsa dem alla.
För att installera en konfigurationsfil, dra och släpp den på Tunnelblick-ikonen i menyraden eller på listan över konfigurationer på fliken "Konfigurationer" i fönstret "VPN-detaljer".
Och tryck sedan på "Anslut".
Nu bör du ha några nya rutter i din klientdator:
$ 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 finns det en väg till det lokala databasnätverket via VPN-gränssnittet, så du bör kunna åtkomst till databastjänsten med hjälp av IP-adressen för privat databas.
$ 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 fungerar. Nu har du din trafik säkrad med ett VPN för att ansluta till din databasnod.
Slutsats
Det är ett måste att skydda din data om du använder den via internet, på plats eller i en blandad miljö. Du måste veta hur du krypterar och säkrar din fjärråtkomst.
Som du kunde se, med OpenVPN kan du nå fjärrdatabasen med hjälp av det lokala nätverket genom en krypterad anslutning med självsignerade certifikat. Så, OpenVPN ser ut som ett bra alternativ för denna uppgift. Det är en lösning med öppen källkod, och installationen/konfigurationen är ganska enkel. Vi använde en grundläggande OpenVPN-serverkonfiguration, så att du kan leta efter mer komplex konfiguration i OpenVPNs officiella dokumentation för att förbättra din OpenVPN-server.