Het internet is een gevaarlijke plek, vooral als je je gegevens onversleuteld of zonder goede beveiliging achterlaat. Er zijn verschillende manieren om uw gegevens te beveiligen; allemaal op verschillende niveaus. U moet altijd een sterk firewallbeleid, gegevensversleuteling en een sterk wachtwoordbeleid hebben. Een andere manier om uw gegevens te beveiligen, is door er toegang toe te krijgen via een VPN-verbinding.
Virtual Private Network (of VPN) is een verbindingsmethode die wordt gebruikt om beveiliging en privacy toe te voegen aan particuliere en openbare netwerken, waardoor uw gegevens worden beschermd.
OpenVPN is een volledig uitgeruste, open source, SSL VPN-oplossing om communicatie te beveiligen. Het kan worden gebruikt voor toegang op afstand of communicatie tussen verschillende servers of datacenters. Het kan op locatie of in de cloud worden geïnstalleerd, in verschillende besturingssystemen en kan worden geconfigureerd met veel beveiligingsopties.
In deze blog maken we een VPN-verbinding om toegang te krijgen tot een database in de cloud. Er zijn verschillende manieren om dit doel te bereiken, afhankelijk van uw infrastructuur en hoeveel hardwarebronnen u voor deze taak wilt gebruiken.
U kunt bijvoorbeeld twee VM's maken, een op locatie en een andere in de cloud, en ze kunnen een brug zijn om uw lokale netwerk te verbinden met het databasecloudnetwerk via een peer-to- Peer VPN-verbinding.
Een andere eenvoudigere optie zou kunnen zijn om verbinding te maken met een VPN-server die is geïnstalleerd in het databaseknooppunt met behulp van een VPN-clientverbinding die is geconfigureerd op uw lokale computer. In dit geval gebruiken we deze tweede optie. U zult zien hoe u een OpenVPN-server configureert in het databaseknooppunt dat in de cloud wordt uitgevoerd, en u kunt er toegang toe krijgen via een VPN-client.
Voor het databaseknooppunt gebruiken we een Amazon EC2-instantie met de volgende configuratie:
- OS:Ubuntu Server 18.04
- Openbaar IP-adres:18.224.138.210
- Privé IP-adres:172.31.30.248/20
- Geopende TCP-poorten:22, 3306, 1194
Hoe OpenVPN op Ubuntu Server 18.04 te installeren
De eerste taak is het installeren van de OpenVPN-server in uw databaseknooppunt. Eigenlijk maakt de gebruikte databasetechnologie niet uit, aangezien we aan een netwerklaag werken, maar voor testdoeleinden na het configureren van de VPN-verbinding, laten we zeggen dat we Percona Server 8.0 gebruiken.
Dus laten we beginnen met het installeren van de OpenVPN-pakketten.
$ apt install openvpn easy-rsa
Omdat OpenVPN certificaten gebruikt om je verkeer te versleutelen, heb je EasyRSA nodig voor deze taak. Het is een CLI-hulpprogramma om een root-certificeringsinstantie te maken en certificaten aan te vragen en te ondertekenen, inclusief sub-CA's en lijsten met intrekking van certificaten.
Opmerking:er is een nieuwe EasyRSA-versie beschikbaar, maar om de focus op de OpenVPN-installatie te houden, laten we de EasyRSA-versie gebruiken die beschikbaar is in de Ubuntu 18.04-repository atm (EasyRSA versie 2.2.2- 2).
Het vorige commando zal de directory /etc/openvpn/ aanmaken voor de OpenVPN-configuratie, en de directory /usr/share/easy-rsa/ met de EasyRSA-scripts en configuratie.
Laten we om deze taak gemakkelijker te maken een symbolische link maken naar het EasyRSA-pad in de OpenVPN-directory (of u kunt het gewoon kopiëren):
$ ln -s /usr/share/easy-rsa /etc/openvpn/
Nu moet je EasyRSA configureren en je certificaten aanmaken. Ga naar de EasyRSA-locatie en maak een back-up voor het “vars”-bestand:
$ cd /etc/openvpn/easy-rsa
$ cp vars vars.bak
Bewerk dit bestand en wijzig de volgende regels volgens uw informatie:
$ 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"
Maak vervolgens een nieuwe symbolische link naar het openssl-bestand:
$ cd /etc/openvpn/easy-rsa
$ ln -s openssl-1.0.0.cnf openssl.cnf
Pas nu het vars-bestand toe:
$ cd /etc/openvpn/easy-rsa
$ . vars
OPMERKING:als je ./clean-all uitvoert, zal ik een rm -rf doen op /etc/openvpn/easy-rsa/keys
Voer het alles opschonen script uit:
$ ./clean-all
En maak de Diffie-Hellman-sleutel (DH):
$ ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.....................................................................................................................................................................+
Deze laatste actie kan enkele seconden duren, en als het klaar is, heb je een nieuw DH-bestand in de "keys"-directory in de EasyRSA-directory.
$ ls /etc/openvpn/easy-rsa/keys
dh2048.pem
Laten we nu de CA-certificaten maken.
$ ./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.
...
Hiermee worden de ca.crt (openbaar certificaat) en ca.key (private sleutel) gemaakt. Het openbare certificaat is vereist op alle servers om verbinding te maken met de VPN.
$ ls /etc/openvpn/easy-rsa/keys
ca.crt ca.key
Nu je je CA hebt aangemaakt, gaan we het servercertificaat maken. In dit geval noemen we het "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
Hiermee worden de CRT-, CSR- en Key-bestanden voor de OpenVPN-server gemaakt:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-server.crt openvpn-server.csr openvpn-server.key
Nu moet je het clientcertificaat maken, en het proces is ongeveer hetzelfde:
$ ./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
Hiermee worden de CRT-, CSR- en Key-bestanden voor de OpenVPN-client gemaakt:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-client-1.csr openvpn-client-1.crt openvpn-client-1.key
Op dit moment heb je alle certificaten gereed. De volgende stap is het creëren van zowel server- als client OpenVPN-configuratie.
De OpenVPN-server configureren
Zoals we al zeiden, zal de OpenVPN-installatie de map /etc/openvpn maken, waar u de configuratiebestanden voor zowel server- als clientrollen zult toevoegen, en het heeft een voorbeeldconfiguratiebestand voor elk in / usr/share/doc/openvpn/examples/sample-config-files/, zodat u de bestanden naar de genoemde locatie kunt kopiëren en naar wens kunt wijzigen.
In dit geval gebruiken we alleen het serverconfiguratiebestand, omdat het een OpenVPN-server is:
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gunzip /etc/openvpn/server.conf.gz
Laten we nu eens een basisserverconfiguratiebestand bekijken:
$ 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.
Opmerking:Wijzig de certificaatpaden volgens uw omgeving.
En start dan de OpenVPN-service met behulp van het gemaakte configuratiebestand:
$ systemctl start [email protected]
Controleer of de service op de juiste poort luistert:
$ netstat -pltn |grep openvpn
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 20002/openvpn
Ten slotte moet u in de OpenVPN-server de IP-doorstuurregel toevoegen aan het bestand sysctl.conf om het VPN-verkeer toe te staan:
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
En voer uit:
$ sysctl -p
net.ipv4.ip_forward = 1
Laten we nu eens kijken hoe we een OpenVPN-client kunnen configureren om verbinding te maken met deze nieuwe VPN.
De OpenVPN-client configureren
In het vorige punt noemden we de OpenVPN-voorbeeldconfiguratiebestanden en we gebruikten de serverversie, dus laten we nu hetzelfde doen, maar met het clientconfiguratiebestand.
Kopieer het bestand client.conf van /usr/share/doc/openvpn/examples/sample-config-files/ naar de corresponderende locatie en wijzig het naar wens.
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Je hebt ook de volgende certificaten nodig die eerder zijn gemaakt om de VPN-client te configureren:
ca.crt
openvpn-client-1.crt
openvpn-client-1.key
Kopieer deze bestanden dus naar uw lokale machine of VM. U moet deze bestandslocatie toevoegen aan het configuratiebestand van de VPN-client.
Laten we nu eens een standaard clientconfiguratiebestand bekijken:
$ 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.
Opmerking:Wijzig de certificaatpaden volgens uw omgeving.
U kunt dit bestand gebruiken om verbinding te maken met de OpenVPN-server vanuit verschillende besturingssystemen zoals Linux, macOS of Windows.
In dit voorbeeld gebruiken we de applicatie Tunnelblick om verbinding te maken vanaf een macOS-client. Tunnelblick is een gratis, open source grafische gebruikersinterface voor OpenVPN op macOS. Het biedt eenvoudige controle over OpenVPN-clients. Het wordt geleverd met alle benodigde pakketten zoals OpenVPN, EasyRSA en tun/tap-stuurprogramma's.
Omdat de OpenVPN-configuratiebestanden de extensies .tblk, .ovpn of .conf hebben, kan Tunnelblick ze allemaal lezen.
Om een configuratiebestand te installeren, sleept u het naar het Tunnelblick-pictogram in de menubalk of in de lijst met configuraties op het tabblad 'Configuraties' van het venster 'VPN Details'.
En druk dan op "Verbinden".
U zou nu een aantal nieuwe routes in uw clientcomputer moeten hebben:
$ 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
Zoals u kunt zien, is er een route naar het lokale databasenetwerk via de VPN-interface, dus u zou toegang moeten kunnen krijgen tot de databaseservice via het Private Database IP-adres.
$ 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>
Het werkt. Nu heb je je verkeer beveiligd met een VPN om verbinding te maken met je databaseknooppunt.
Conclusie
Het beschermen van uw gegevens is een must als u deze via internet, op locatie of in een gemengde omgeving opent. U moet weten hoe u uw externe toegang moet versleutelen en beveiligen.
Zoals je kon zien, kun je met OpenVPN de externe database bereiken via het lokale netwerk via een versleutelde verbinding met behulp van zelfondertekende certificaten. OpenVPN lijkt dus een geweldige optie voor deze taak. Het is een open source-oplossing en de installatie/configuratie is vrij eenvoudig. We hebben een basis OpenVPN-serverconfiguratie gebruikt, dus u kunt zoeken naar een meer complexe configuratie in de officiële OpenVPN-documentatie om uw OpenVPN-server te verbeteren.