Das Internet ist ein gefährlicher Ort, besonders wenn Sie Ihre Daten unverschlüsselt oder ohne angemessene Sicherheit hinterlassen. Es gibt mehrere Möglichkeiten, Ihre Daten zu sichern; alles auf verschiedenen Ebenen. Sie sollten immer eine starke Firewall-Richtlinie, Datenverschlüsselung und eine starke Passwortrichtlinie haben. Eine weitere Möglichkeit, Ihre Daten zu sichern, besteht darin, über eine VPN-Verbindung darauf zuzugreifen.
Virtual Private Network (oder VPN) ist eine Verbindungsmethode, die verwendet wird, um Sicherheit und Privatsphäre zu privaten und öffentlichen Netzwerken hinzuzufügen und Ihre Daten zu schützen.
OpenVPN ist eine Open-Source-SSL-VPN-Lösung mit vollem Funktionsumfang zur Sicherung der Kommunikation. Es kann für den Fernzugriff oder die Kommunikation zwischen verschiedenen Servern oder Rechenzentren verwendet werden. Es kann vor Ort oder in der Cloud unter verschiedenen Betriebssystemen installiert und mit vielen Sicherheitsoptionen konfiguriert werden.
In diesem Blog erstellen wir eine VPN-Verbindung, um auf eine Datenbank in der Cloud zuzugreifen. Abhängig von Ihrer Infrastruktur und der Menge an Hardwareressourcen, die Sie für diese Aufgabe verwenden möchten, gibt es verschiedene Möglichkeiten, dieses Ziel zu erreichen.
Zum Beispiel können Sie zwei VMs erstellen, eine vor Ort und eine in der Cloud, und sie könnten eine Brücke sein, um Ihr lokales Netzwerk über ein Peer-to- Peer-VPN-Verbindung.
Eine andere einfachere Option könnte die Verbindung zu einem VPN-Server sein, der im Datenbankknoten installiert ist über eine VPN-Client-Verbindung, die auf Ihrem lokalen Computer konfiguriert ist. In diesem Fall verwenden wir diese zweite Option. Sie werden sehen, wie Sie einen OpenVPN-Server im Datenbankknoten konfigurieren, der in der Cloud ausgeführt wird, und Sie können mit einem VPN-Client darauf zugreifen.
Für den Datenbankknoten verwenden wir eine Amazon EC2-Instanz mit der folgende Konfiguration:
- Betriebssystem:Ubuntu Server 18.04
- Öffentliche IP-Adresse:18.224.138.210
- Private IP-Adresse:172.31.30.248/20
- Geöffnete TCP-Ports:22, 3306, 1194
So installieren Sie OpenVPN auf Ubuntu Server 18.04
Die erste Aufgabe besteht darin, den OpenVPN-Server in Ihrem Datenbankknoten zu installieren. Eigentlich spielt die verwendete Datenbanktechnologie keine Rolle, da wir auf einer Netzwerkebene arbeiten, aber zu Testzwecken nach der Konfiguration der VPN-Verbindung nehmen wir an, wir führen Percona Server 8.0 aus.
Also beginnen wir mit der Installation der OpenVPN-Pakete.
$ apt install openvpn easy-rsa
Da OpenVPN Zertifikate verwendet, um Ihren Datenverkehr zu verschlüsseln, benötigen Sie EasyRSA für diese Aufgabe. Es ist ein CLI-Dienstprogramm zum Erstellen einer Stammzertifizierungsstelle und zum Anfordern und Signieren von Zertifikaten, einschließlich Sub-CAs und Zertifikatsperrlisten.
Hinweis:Es ist eine neue EasyRSA-Version verfügbar, aber um den Fokus auf der OpenVPN-Installation zu halten, verwenden wir die EasyRSA-Version, die im Ubuntu 18.04-Repository atm verfügbar ist (EasyRSA-Version 2.2.2- 2).
Der vorherige Befehl erstellt das Verzeichnis /etc/openvpn/ für die OpenVPN-Konfiguration und das Verzeichnis /usr/share/easy-rsa/ mit den EasyRSA-Skripten und der Konfiguration.
Um diese Aufgabe zu vereinfachen, erstellen wir einen symbolischen Link zum EasyRSA-Pfad im OpenVPN-Verzeichnis (oder kopieren Sie ihn einfach):
$ ln -s /usr/share/easy-rsa /etc/openvpn/
Jetzt müssen Sie EasyRSA konfigurieren und Ihre Zertifikate erstellen. Gehen Sie zum EasyRSA-Speicherort und erstellen Sie eine Sicherungskopie der „vars“-Datei:
$ cd /etc/openvpn/easy-rsa
$ cp vars vars.bak
Bearbeiten Sie diese Datei und ändern Sie die folgenden Zeilen entsprechend Ihren Angaben:
$ 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"
Erstellen Sie dann einen neuen symbolischen Link zur Openssl-Datei:
$ cd /etc/openvpn/easy-rsa
$ ln -s openssl-1.0.0.cnf openssl.cnf
Nun wenden Sie die vars-Datei an:
$ cd /etc/openvpn/easy-rsa
$ . vars
HINWEIS:Wenn Sie ./clean-all ausführen, werde ich ein rm -rf auf /etc/openvpn/easy-rsa/keys ausführen
Führen Sie das Clean-All-Skript aus:
$ ./clean-all
Und erstellen Sie den Diffie-Hellman-Schlüssel (DH):
$ ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.....................................................................................................................................................................+
Diese letzte Aktion kann einige Sekunden dauern, und wenn sie abgeschlossen ist, haben Sie eine neue DH-Datei im Verzeichnis „keys“ im EasyRSA-Verzeichnis.
$ ls /etc/openvpn/easy-rsa/keys
dh2048.pem
Lassen Sie uns jetzt die CA-Zertifikate erstellen.
$ ./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.
...
Dadurch werden ca.crt (öffentliches Zertifikat) und ca.key (privater Schlüssel) erstellt. Das öffentliche Zertifikat wird auf allen Servern benötigt, um sich mit dem VPN zu verbinden.
$ ls /etc/openvpn/easy-rsa/keys
ca.crt ca.key
Jetzt haben Sie Ihre CA erstellt, lassen Sie uns das Serverzertifikat erstellen. In diesem Fall nennen wir es „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
Dadurch werden die CRT-, CSR- und Schlüsseldateien für den OpenVPN-Server erstellt:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-server.crt openvpn-server.csr openvpn-server.key
Jetzt müssen Sie das Client-Zertifikat erstellen, und der Prozess ist ziemlich ähnlich:
$ ./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
Dadurch werden die CRT-, CSR- und Schlüsseldateien für den OpenVPN-Client erstellt:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-client-1.csr openvpn-client-1.crt openvpn-client-1.key
Zu diesem Zeitpunkt haben Sie alle Zertifikate bereit. Der nächste Schritt besteht darin, sowohl die Server- als auch die Client-OpenVPN-Konfiguration zu erstellen.
Konfigurieren des OpenVPN-Servers
Wie bereits erwähnt, erstellt die OpenVPN-Installation das Verzeichnis /etc/openvpn, in dem Sie die Konfigurationsdateien für Server- und Client-Rollen hinzufügen, und es gibt eine Beispielkonfigurationsdatei für jede Rolle in / usr/share/doc/openvpn/examples/sample-config-files/, sodass Sie die Dateien an den angegebenen Speicherort kopieren und nach Belieben ändern können.
In diesem Fall verwenden wir nur die Serverkonfigurationsdatei, da es sich um einen OpenVPN-Server handelt:
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gunzip /etc/openvpn/server.conf.gz
Sehen wir uns nun eine grundlegende Serverkonfigurationsdatei an:
$ 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.
Hinweis:Ändern Sie die Zertifikatspfade entsprechend Ihrer Umgebung.
Und starten Sie dann den OpenVPN-Dienst mit der erstellten Konfigurationsdatei:
$ systemctl start [email protected]
Überprüfen Sie, ob der Dienst am richtigen Port lauscht:
$ netstat -pltn |grep openvpn
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 20002/openvpn
Schließlich müssen Sie im OpenVPN-Server die IP-Weiterleitungszeile in der Datei sysctl.conf hinzufügen, um den VPN-Verkehr zuzulassen:
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Und führe aus:
$ sysctl -p
net.ipv4.ip_forward = 1
Sehen wir uns nun an, wie man einen OpenVPN-Client konfiguriert, um sich mit diesem neuen VPN zu verbinden.
Konfigurieren des OpenVPN-Clients
Im vorherigen Punkt haben wir die OpenVPN-Beispielkonfigurationsdateien erwähnt und wir haben die Serverdatei verwendet, also machen wir jetzt dasselbe, aber mit der Clientkonfigurationsdatei.
Kopieren Sie die Datei client.conf aus /usr/share/doc/openvpn/examples/sample-config-files/ an die entsprechende Stelle und ändern Sie sie nach Belieben.
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Sie benötigen außerdem die folgenden zuvor erstellten Zertifikate, um den VPN-Client zu konfigurieren:
ca.crt
openvpn-client-1.crt
openvpn-client-1.key
Kopieren Sie diese Dateien also auf Ihren lokalen Computer oder Ihre VM. Sie müssen diesen Dateispeicherort in der VPN-Client-Konfigurationsdatei hinzufügen.
Sehen wir uns nun eine grundlegende Client-Konfigurationsdatei an:
$ 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.
Hinweis:Ändern Sie die Zertifikatspfade entsprechend Ihrer Umgebung.
Sie können diese Datei verwenden, um sich von verschiedenen Betriebssystemen wie Linux, macOS oder Windows mit dem OpenVPN-Server zu verbinden.
In diesem Beispiel verwenden wir die Anwendung Tunnelblick, um eine Verbindung von einem macOS-Client herzustellen. Tunnelblick ist eine kostenlose grafische Open-Source-Benutzeroberfläche für OpenVPN auf macOS. Es bietet eine einfache Steuerung von OpenVPN-Clients. Es enthält alle notwendigen Pakete wie OpenVPN, EasyRSA und tun/tap-Treiber.
Da die OpenVPN-Konfigurationsdateien die Erweiterungen .tblk, .ovpn oder .conf haben, kann Tunnelblick sie alle lesen.
Um eine Konfigurationsdatei zu installieren, ziehen Sie sie per Drag &Drop auf das Tunnelblick-Symbol in der Menüleiste oder auf die Liste der Konfigurationen auf der Registerkarte "Konfigurationen" des Fensters "VPN-Details".
Drücken Sie dann auf „Verbinden“.
Jetzt sollten Sie einige neue Routen auf Ihrem Client-Rechner haben:
$ 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
Wie Sie sehen können, gibt es über die VPN-Schnittstelle eine Route zum lokalen Datenbanknetzwerk, sodass Sie über die IP-Adresse der privaten Datenbank auf den Datenbankdienst zugreifen können sollten.
$ 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>
Es funktioniert. Jetzt haben Sie Ihren Datenverkehr mit einem VPN gesichert, um eine Verbindung zu Ihrem Datenbankknoten herzustellen.
Fazit
Der Schutz Ihrer Daten ist ein Muss, wenn Sie über das Internet, lokal oder in einer gemischten Umgebung darauf zugreifen. Sie müssen wissen, wie Sie Ihren Fernzugriff verschlüsseln und sichern.
Wie Sie sehen konnten, können Sie mit OpenVPN die entfernte Datenbank über das lokale Netzwerk über eine verschlüsselte Verbindung mit selbstsignierten Zertifikaten erreichen. OpenVPN scheint also eine großartige Option für diese Aufgabe zu sein. Es ist eine Open-Source-Lösung und die Installation/Konfiguration ist ziemlich einfach. Wir haben eine grundlegende OpenVPN-Serverkonfiguration verwendet, sodass Sie in der offiziellen OpenVPN-Dokumentation nach komplexeren Konfigurationen suchen können, um Ihren OpenVPN-Server zu verbessern.