Ein VPN ist ein virtuelles privates Netzwerk, mit dem Sie auch von einem nicht vertrauenswürdigen Netzwerk aus auf das Internet oder bestimmte Dienste zugreifen können. Im Grunde ist es so, als wären Sie physisch mit einem privaten Netzwerk verbunden:Sie können beispielsweise auf Ihr Bankkonto zugreifen oder Zahlungen vornehmen, ohne befürchten zu müssen, dass jemand den von Ihrem Gerät generierten Datenverkehr abfängt.
OpenVPN ist ein VPN, das auf den Protokollen TLS (Transport Layer Security) und SSL (Secure Sockets Layer) basiert. OpenVPN verwendet einige Zertifikate, um den Datenverkehr zwischen dem Server und dem Client zu verschlüsseln.
In diesem Tutorial erfahren Sie, wie Sie OpenVPN auf einem Server mit Ubuntu 18.04 konfigurieren.
Um dieses Tutorial zu implementieren, werden ein Server-Rechner und ein weiterer Rechner benötigt, der als CA (Certification Authority) fungiert und die Gültigkeit der Zertifikate bewertet.
Sie müssen sich über eine SSH-Verbindung mit Ihrem Server und Ihrer Zertifizierungsstelle verbinden. Wenn Sie dies noch nicht getan haben, wird empfohlen, unseren Leitfaden zu befolgen, um eine sichere Verbindung mit dem SSH-Protokoll herzustellen.
OpenVPN installieren
Greifen Sie auf Ihren Server zu.
OpenVPN ist bereits im offiziellen Ubuntu-Repository von Ubuntu verfügbar, daher muss nichts weiter hinzugefügt werden.
Typ:
sudo apt update
sudo apt install openvpn
Zu diesem Zeitpunkt wurde OpenVPN erfolgreich auf Ihrem Server installiert.
EasyRSA installieren
Fahren Sie fort, indem Sie EasyRSA auf Ihren Server und auf Ihre Zertifizierungsstelle herunterladen, indem Sie auf beiden Computern Folgendes eingeben:
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
Die neueste Version kann von https://github.com/OpenVPN/easy-rsa/releases
heruntergeladen werden$ cd ~
$ sudo tar xvf EasyRSA-3.0.4.tgz
Der Name kann je nach heruntergeladener Version unterschiedlich sein
Konfiguration des Servers
Schließen Sie die Serverkonfiguration ab, indem Sie Folgendes eingeben:
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
$ sudo nano /etc/openvpn/server.conf
Suchen Sie den Abschnitt, der sich auf HMAC bezieht ("tls-auth"). Wenn die Zeile kommentiert ist, entfernen Sie das ";".
Suchen Sie den Abschnitt über Verschlüsselung ("cipher"). Wenn kommentiert, entfernen Sie das ";". Fügen Sie direkt unter .
eine neue Zeile mit dem Text "auth SHA256" hinzuSuchen Sie den Abschnitt „dh“, der die Diffie-Hellman-Parameter definiert, und entfernen Sie „2048“ aus dem Namen („dh dh.pem“ sollte sein erhalten).
Suchen Sie die Abschnitte „Benutzer“ und „Gruppe“ und entfernen Sie das „;“ um die Zeilen zu entkommentieren.
EasyRSA auf der CA konfigurieren
Nach der Installation von EasyRSA wurde auf Ihrer CA eine Konfigurationsdatei zum Definieren der Variablen für Ihre CA erstellt. Geben Sie ein:
$ cd ~/EasyRSA-3.0.4/
$ cp vars.example vars
$ nano vars
Entfernen Sie das "#" zu den Anweisungen in der Abbildung unten:
Starten Sie das Skript "easyrsa", um die Public Key Infrastructure (PKI) zu initialisieren:
$ sudo ./easyrsa init-pki
$ sudo ./easyrsa build-ca nopass
mit diesem Befehl werden zwei Dateien erstellt:
ca.crt:öffentliches CA-Zertifikat, das von Servern und Clients verwendet wird, um sich gegenseitig mitzuteilen, dass sie Teil desselben vertrauenswürdigen Netzwerks sind.
ca.key:privater Schlüssel, den der CA-Rechner verwendet, um Schlüssel und Zertifikate für Server und Clients zu signieren. Diese Datei darf nur auf dem CA-Rechner aufbewahrt werden (auf den Dritte keinen Zugriff haben), andernfalls kann die Netzwerksicherheit gefährdet werden.
Sie müssen einen Namen eingeben. Lassen Sie es leer und drücken Sie die Eingabetaste.
Anfordern eines Serverzertifikats von der CA
Nachdem der CA-Rechner nun konfiguriert ist, lassen Sie den Server einen privaten Schlüssel und eine Zertifikatsanforderung generieren und sie zum Signieren an den CA-Rechner senden:
$ cd ~/EasyRSA-3.0.4
$ ./easyrsa init-pki
$ ./easyrsa gen-req server nopass
Belassen Sie der Einfachheit halber "server" als Namen für die Maschine, um später mehrere Änderungen zu vermeiden.
Sie haben gerade einen privaten Schlüssel für den Server und eine Zertifikatsanforderung namens "server.req" erstellt:
$ sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/
Kopieren Sie die server.req-Datei auf den CA-Rechner:
$ sudo scp ~/EasyRSA-3.0.4/pki/reqs/server.req [email protected]_CA_ip:/tmp
Generieren und Signieren des Zertifikats
Importieren Sie auf Ihrer CA im EasyRSA-Ordner die gerade kopierte Datei und signieren Sie sie:
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/server.req server
$ sudo ./easyrsa sign-req server server
Geben Sie „yes“ ein und drücken Sie die Eingabetaste.
Übertragen Sie das signierte Zertifikat und die ca.crt an den VPN-Server:
$ sudo scp pki/issued/server.crt [email protected]_server_ip:/tmp
$ sudo scp pki/ca.crt [email protected]_server_ip:/tmp
Dann in deinem Server
kopiere die erhaltenen Dateien in die entsprechenden Verzeichnisse:
$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
$ cd ~/EasyRSA-3.0.4/
Generieren Sie einen starken Austauschschlüssel basierend auf Diffie-Hellman.
$ sudo ./easyrsa gen-dh
$ sudo openvpn --genkey --secret ta.key
Kopieren Sie die generierten Dateien in den Ordner "/etc/openvpn/"
$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
Konfiguration eines Clients
Erstellen Sie einen Ordner zum Speichern von Zertifikaten und Schlüsseln des Clients (da diese Anleitung nur einen Client darstellt, wird er hier „Client1“ genannt, aber der Vorgang muss für jeden Client wiederholt werden, wobei ein anderer verwendet wird Konfession)
$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa gen-req client1 nopass
Drücken Sie die Eingabetaste, um den vorgeschlagenen Standardnamen zu akzeptieren.
$ sudo cp pki/private/client1.key ~/client-configs/keys/
Kopieren Sie den Schlüssel des Clients in den zuvor erstellten Ordner.
$ sudo scp pki/reqs/client1.req [email protected]_CA_IP:/tmp
Senden Sie die client1.req-Datei an den CA-Rechner.
Importieren Sie die Zertifikatsanforderung auf Ihre CA:
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1
$ sudo ./easyrsa sign-req client client1
Geben Sie "yes" ein, um die Signatur zu autorisieren.
Lade client1.crt auf deinen Server hoch:
scp pki/issued/client1.crt [email protected]_SERVER:/tmp
Kopieren Sie auf Ihrem Server die folgenden Dateien in die entsprechenden Ordner.
$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ sudo cp /tmp/client1.crt ~/client-configs/keys/
$ sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Nun sind sowohl die Zertifikate als auch die Schlüssel von Server und Client generiert.
IP-Routing und Firewall konfigurieren
IP-Weiterleitungsregeln ändern:
$ sudo nano /etc/sysctl.conf
Suchen Sie den Abschnitt "net.ipv4.ip_forward" und entfernen Sie das "#", damit die Anweisung "nicht kommentiert" wird.
Ändern Sie einige Firewall-Regeln, um Client-Verbindungen korrekt weiterzuleiten.
$ ip route | grep default
Speichern Sie den Namen nach "dev" (in der Abbildung unten "eth0" genannt):
$ sudo nano /etc/ufw/before.rules
Fügen Sie die Befehle wie in der Abbildung unten hinzu und ersetzen Sie "eth0" durch den Namen Ihrer Netzwerkschnittstelle.
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Speichern und beenden. Bearbeiten Sie nun die UFW-Konfigurationsdatei:
$ sudo nano /etc/default/ufw
Ändern Sie den Wert des Parameters "DEFAULT_FORWARD_POLICY" mit "ACCEPT".
$ sudo ufw allow 1194/udp
Port 1194 für UDP-Verkehr hinzufügen.
$ sudo ufw allow OpenSSH
Starten Sie UFW neu:
$ sudo ufw disable
$ sudo ufw enable
Starten Sie den OpenVPN-Dienst:
$ sudo systemctl start openvpn
Prüfen Sie den Dienststatus:
$ sudo systemctl status openvpn
Dienst beim Serverstart festlegen.
$ sudo systemctl enable openvpn
Erstellen Sie die Konfigurationsdatei für den Client:
$ sudo mkdir -p ~/client-configs/files
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ sudo nano ~/client-configs/base.conf
Suchen Sie den Abschnitt "remote" und vergewissern Sie sich, dass dort "remote IP_Server 1194" steht
IP_Server:Schreiben Sie die Server-IP
1194:zuvor ausgewählter Port.
Suchen Sie den Abschnitt "proto", um sicherzustellen, dass der Server auf UDP eingestellt ist (Sie finden die TCP-Zeile mit einem ";" kommentiert).
Suchen Sie die Abschnitte "Benutzer" und "Gruppe" und entfernen Sie das ";" ihnen "keine Kommentare" zu machen.
Suchen Sie die Abschnitte "ca.crt" - "client.crt" - "client.key" - "ta.key" und kommentieren Sie diese mit einem "#" am Anfang jeder Zeile.
Suchen Sie den Abschnitt "cipher" und fügen Sie die Anweisung "auth SHA256" unter der Anweisung "cipher AES-256-CBC" hinzu.
Fügen Sie an beliebiger Stelle die Anweisung "Tastenrichtung 1" hinzu.
Fügen Sie diese kommentierten Zeilen jederzeit hinzu. Wenn der Client ein Linux-Rechner ist, machen Sie "keine Kommentare".
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
Speichern und beenden.
Generieren der Konfiguration für Clients
Erstellen Sie auf Ihrem Server ein Skript, um die Konfiguration eines Clients automatisch zu kompilieren.
nano ~/client-configs/make_config.sh
Kopieren Sie den Text und fügen Sie ihn ein:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn
Speichern und beenden.
chmod 700 ~/client-configs/make_config.sh
Versuchen Sie jetzt die Client "Konfiguration" zu generieren.
$ cd ~/client-configs
$ sudo ./make_config.sh client1
Eine Datei namens „client1.ovpn“ wird erstellt.
Übertragen Sie nun diese Datei auf das gewünschte Gerät. Es wird von der VPN-Software für die Verbindung verwendet.
Widerrufen von Client-Zertifikaten
$ cd EasyRSA-3.0.4/
$ sudo ./easyrsa revoke client1
client1 ist der Name des Mandanten, dem Berechtigungen entzogen werden sollen
Geben Sie zur Bestätigung "yes" ein.
Generieren Sie die crl.pem-Datei und laden Sie sie auf Ihren Server hoch:
$ sudo ./easyrsa gen-crl
$ sudo scp ~/EasyRSA-3.0.4/pki/crl.pem [email protected]_Server:/tmp
Aktualisieren Sie die Konfiguration Ihres Servers, um den Widerruf zu überprüfen.
$ sudo cp /tmp/crl.pem /etc/openvpn
$ sudo nano /etc/openvpn/server.conf
Fügen Sie am Ende der Datei "crl-verify crl.pem" hinzu.
Speichern und beenden.
$ sudo systemctl restart [email protected]
Starten Sie den Server neu, um die Änderungen zu implementieren.