So installierst du OpenVPN Server und Client unter FreeBSD

OpenVPN ist eine Open-Source-Anwendung, mit der du ein sicheres privates Netzwerk über das öffentliche Internet aufbauen kannst. OpenVPN implementiert ein virtuelles privates Netzwerk (VPN), um eine sichere Verbindung herzustellen. OpenVPN nutzt die OpenSSL-Bibliothek für die Verschlüsselung und bietet verschiedene Authentifizierungsmechanismen, wie z.B. zertifikatsbasierte, Pre-Shared Keys und Benutzername/Passwort-Authentifizierung.

In diesem Lernprogramm zeigen wir dir, wie du OpenVPN Schritt für Schritt unter FreeBSD 12.0 installierst und konfigurierst. Wir erstellen den VPN-Server mit dem FreeBSD-System und implementieren die zertifikatsbasierte OpenVPN-Authentifizierung.

Voraussetzung

Für diese Anleitung benötigst du das aktuelle FreeBSD 12.0 mit mindestens 512 MB RAM und 1 CPU. Außerdem brauchst du root-Rechte und die pf-Firewall.

Was wir tun werden:

  • OpenVPN auf FreeBSD 12.0 installieren
  • Variablen für Zertifikate einrichten
  • Zertifikate generieren
  • OpenVPN konfigurieren
  • PF-Firewall einrichten
  • Port-Forwarding unter FreeBSD einschalten
  • Testen

Schritt 1 – OpenVPN installieren

Zunächst aktualisieren wir das Repository für die Binärpakete und installieren die OpenVPN-Pakete mit dem unten stehenden pkg-Befehl auf dem FreeBSD-System.

pkg update
pkg install openvpn

Sobald die Installation abgeschlossen ist, fügst du den OpenVPN-Dienst zum Systemstart hinzu und definierst die OpenVPN-Tunnelschnittstelle „tun“ mit dem unten stehenden sysrc-Befehl.

sysrc openvpn_enable="YES"
sysrc openvpn_if="tun"

Nun ist das OpenVPN-Paket auf dem FreeBSD 12.0 System installiert.

Schritt 2 – Variablen für das Zertifikat einrichten

In diesem Schritt richten wir die „easy-rsa“-Variablen für die Erstellung von OpenVPN-Zertifikaten ein.

Erstelle ein neues openvpn-Verzeichnis „/usr/local/etc/openvpn/“ und kopiere das Verzeichnis „easy-rsa“ dorthin.

mkdir -p /usr/local/etc/openvpn/
cp -R /usr/local/share/easy-rsa /usr/local/etc/openvpn/

Gehe nun in das Verzeichnis „/usr/local/etc/openvpn/easy-rsa/“ und bearbeite die Datei „vars“ mit dem Editor vim.

cd /usr/local/etc/openvpn/easy-rsa/
vim vars

Ändere die Details mit deinen eigenen und füge sie ein.

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "DE"
set_var EASYRSA_REQ_PROVINCE    "Frankfurt"
set_var EASYRSA_REQ_CITY        "Frankfurt"
set_var EASYRSA_REQ_ORG         "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL       "openvpn@hakase-labs.io"
set_var EASYRSA_REQ_OU          "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       7500
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_NS_SUPPORT      "no"
set_var EASYRSA_NS_COMMENT      "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST          "sha256"

Speichere und schließe.

Mache die „vars“-Datei jetzt zu einer ausführbaren Datei.

chmod +x vars

Jetzt können wir die VPN-Zertifikate erstellen.

Schritt 3 – Zertifikate generieren

In diesem Schritt werden wir einige Zertifikate für den OpenVPN-Server erstellen. Wir werden eine CA, Client- und Server-Zertifikate, DH-PARAM und das CRL-Zertifikat (Certificate Revocation List) erstellen.

Gehe in das Verzeichnis „/usr/local/etc/openvpn/easy-rsa/“ und initialisiere das Verzeichnis für die Public Key Infrastructure (PKI) mit dem Befehl „easyrsa.real“ wie unten beschrieben.

cd /usr/local/etc/openvpn/easy-rsa/
./easyrsa.real init-pki

– CA generieren

Erstelle nun das CA-Zertifikat und den Schlüssel.

./easyrsa.real build-ca

Du wirst nach dem Passwort für den CA-Schlüssel gefragt. Gib dein Passwort ein und das CA-Zertifikat und der Schlüssel sind generiert.

Als Nächstes werden wir das Serverzertifikat und den Schlüssel mit unserer neuen CA erzeugen und signieren.

– Serverzertifikat generieren und signieren

Erstelle das VPN-Serverzertifikat und den Schlüssel mit dem folgenden Befehl.

./easyrsa.real gen-req openvpn-bsd nopass

Danach signierst du das Serverzertifikat mit dem CA-Schlüssel.

./easyrsa.real sign-req server openvpn-bsd

Gib die Passphrase für den CA-Schlüssel ein und das Serverzertifikat und der Schlüssel sind erstellt.

Überprüfe das Serverzertifikat und die Schlüssel mit dem folgenden Befehl.

openssl verify -CAfile pki/ca.crt pki/issued/openvpn-bsd.crt

Stelle sicher, dass du keine Fehlermeldung erhältst.

– Client-Zertifikat generieren und signieren

Nachdem wir das Zertifikat für den Server erstellt haben, erstellen wir ein neues Zertifikat für den Client und signieren es mit dem CA-Schlüssel.

Erstelle das neue Zertifikat und den Schlüssel „client01“ mit dem folgenden Befehl.

./easyrsa.real gen-req client01 nopass

Signiere dann das Zertifikat mit dem CA-Schlüssel.

./easyrsa.real sign-req client client01

Gib die Passphrase für den CA-Schlüssel ein und das Client-Zertifikat und der Schlüssel sind erstellt.

Überprüfe das Client-Zertifikat und den Schlüssel mit dem Befehl openssl (siehe unten).

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt

Du erhältst dann das unten stehende Ergebnis.

Das Client-Zertifikat und der Schlüssel wurden ohne Fehler erstellt.

– DH-PARAM- und CRL-Zertifikat generieren

Das DH-PARAM-Zertifikat wird für zusätzliche Sicherheit benötigt. Und die CRL (Certificate Revocation List) wird verwendet, um alle Client-Zertifikate aufzulisten, die du vom Zugriff auf den VPN-Server ausschließen möchtest.

Erstelle eine neue CRL und ein DH-PARAM-Zertifikat mit dem folgenden Befehl.

./easyrsa.real gen-crl
./easyrsa.real gen-dh

Damit sind alle grundlegenden Zertifikate, die wir für unseren VPN-Server benötigen, erstellt.

– Alle Zertifikate kopieren

Als Nächstes müssen wir alle Zertifikate in das OpenVPN-Verzeichnis kopieren. Erstelle ein neues Verzeichnis „server“ und „client“ innerhalb des OpenVPN-Verzeichnisses.

mkdir -p /usr/local/etc/openvpn/{server,client}

Kopiere das CA-Zertifikat, das Server-Zertifikat und den Schlüssel in das ’server‘-Verzeichnis.

cp pki/ca.crt /usr/local/etc/openvpn/server/
cp pki/issued/openvpn-bsd.crt /usr/local/etc/openvpn/server/
cp pki/private/openvpn-bsd.key /usr/local/etc/openvpn/server/

Kopiere das CA-Zertifikat, das Client01-Zertifikat und den Schlüssel in das „Client“-Verzeichnis.

cp pki/ca.crt /usr/local/etc/openvpn/client/
cp pki/issued/client01.crt /usr/local/etc/openvpn/client/
cp pki/private/client01.key /usr/local/etc/openvpn/client/

Kopiere die DH-PARAM- und CRL-Zertifikate in das „Server“-Verzeichnis.

cp pki/dh.pem /usr/local/etc/openvpn/server/
cp pki/crl.pem /usr/local/etc/openvpn/server/

Jetzt können wir den OpenVPN-Server konfigurieren.

Schritt 4 – OpenVPN konfigurieren

Gehe in das Verzeichnis „/usr/local/etc/openvpn“ und erstelle mit einem Editor eine neue openvpn-Konfiguration namens „openvpn.conf“.

cd /usr/local/etc/openvpn/
vim openvpn.conf

Ändere die Konfiguration wie gewünscht und füge sie ein.

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /usr/local/etc/openvpn/server/ca.crt
cert /usr/local/etc/openvpn/server/openvpn-bsd.crt
key /usr/local/etc/openvpn/server/openvpn-bsd.key

#DH and CRL key
dh /usr/local/etc/openvpn/server/dh.pem
crl-verify /usr/local/etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.5.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
explicit-exit-notify 1
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Speichere und schließe.

Starte nun den OpenVPN-Dienst und überprüfe seinen Status.

service openvpn start
service openvpn status

Du wirst sehen, dass der OpenVPN-Dienst unter der PID „14490“ läuft.

Überprüfe den OpenVPN-Port mit dem Befehl sockstat (siehe unten).

sockstat -l4

Du erhältst dann das folgende Ergebnis.

Der OpenVPN-Dienst läuft auf dem Standard-UDP-Port „1194“.

Schritt 5 – Einrichten der pf Firewall

In diesem Schritt richten wir die pf-Firewall für den VPN-Server ein. Wir erstellen eine nat-Regel für die OpenVPN-Schnittstelle „tun0“ und erlauben, dass alle Verbindungen an die externe Netzwerkschnittstelle „vtnet0“ umgeleitet werden.

Bevor du fortfährst, stelle sicher, dass die pf Firewall auf dem System konfiguriert ist. Du kannst auch den folgenden Link verwenden, um sie zu konfigurieren.

So richtest du die pf Firewall unter FreeBSD 12.0 ein

Gehe nun in das Verzeichnis „/usr/local/etc“ und bearbeite die pf-Konfigurationsdatei „pf.conf“ mit dem Editor vim.

cd /usr/local/etc/
vim pf.conf

Lege die OpenVPN-Schnittstelle und die lokale IP-Adresse fest.

# vpn interface
vpn_if="tun0"
vpn_net = "10.5.5.0/24"

Setze alle fragmentierten Pakete auf der externen Schnittstelle neu zusammen, bevor du sie filterst.

# reassemble all fragmented packets before filtering them
scrub in on $ext_if all fragment reassemble

Aktiviere den nat von der OpenVPN-IP-Adresse zum externen Interface.

# route traffic from VPN interface out to the internet
nat on ! $vpn_if from $vpn_net to any -> $ext_ip

Leite nun alle Verbindungen an das UDP-Protokoll auf dem OpenVPN-Port ‚1194‘ weiter und leite alle Verbindungen an die OpenVPN-Schnittstelle ‚tun0‘ weiter.

# Allow Connection to VPN Server
pass in on $ext_if proto udp from any to ($ext_if) port 1194 keep state

# Pass all connection on the VPN Interface
pass in on $vpn_if from any to any

Speichere und schließe.

Überprüfe nun die Konfiguration der Pf-Firewall und stelle sicher, dass kein Fehler vorliegt.

service pf check
service pf reload

Damit ist die Konfiguration der Pf-Firewall abgeschlossen.

Du kannst die Pf-Firewall-Regeln mit dem folgenden Befehl überprüfen.

pfctl -sr
pfctl -sn

Das Ergebnis wird dir wie unten dargestellt angezeigt.

Schritt 6 – Einrichten und Aktivieren der Portweiterleitung

In diesem Schritt werden wir die Portweiterleitung auf dem FreeBSD-System aktivieren.

Bearbeite die Datei „/etc/sysctl.conf“ mit dem Editor vim.

vim /etc/sysctl.conf

Füge die folgende Konfiguration ein.

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

Speichere und schließe sie.

Überprüfe die sysctl-Konfigurationsdatei mit dem folgenden Befehl.

sysctl -f /etc/sysctl.conf

Als Nächstes aktivierst du das FreeBSD-System als Gateway, indem du die Konfiguration mit dem folgenden Befehl in die Datei „/etc/rc.conf“ einfügst.

sysrc gateway_enable="YES"

Starte dann den Server neu.

reboot

Jetzt ist die Portweiterleitung auf dem FreeBSD-System aktiviert.

Schritt 7 – Client einrichten

In diesem Schritt erstellen wir eine neue Konfiguration ‚.ovpn‘ für den Client.

Gehe in das Verzeichnis „/usr/local/etc/openvpn/client“ und erstelle eine neue Konfiguration „client01.ovpn“.

cd /usr/local/etc/openvpn/client/
vim client01.ovpn

Ändere die IP-Adresse der Gegenstelle und andere Details mit deinen eigenen und füge sie ein.

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Speichere und schließe.

Lade nun alle Zertifikate, Schlüssel und die Konfiguration aus dem Verzeichnis „/usr/local/etc/openvpn/client“ auf deinen lokalen Computer herunter.

Schritt 8 – Testen

In diesem Schritt stellen wir mit der Konfiguration „client01.ovpn“ vom lokalen Computer aus eine Verbindung zum VPN-Server her.

Nachdem du die Zertifikate und die Konfiguration heruntergeladen hast, gehst du in das Download-Verzeichnis und stellst mit dem folgenden Befehl eine Verbindung zum openvpn-Server her.

openvpn --config client01.ovpn

Sobald die Verbindung hergestellt ist, öffne einen neuen Terminal-Tab und prüfe die Schnittstelle „tun0“.

ifconfig tun0

Du erhältst dann die interne IP-Adresse des OpenVPN-Servers.

Als Nächstes testen wir, ob wir den OpenVPN-Server mit seiner internen IP-Adresse anpingen können.

ping -c3 10.5.5.1

Du wirst eine ICMP-Antwort vom Server erhalten.

Danach überprüfst du die Internetverbindung mit dem unten stehenden curl-Befehl.

curl ipinfo.io

Jetzt wird dir die externe IP-Adresse des Servers angezeigt.

Damit ist die Installation und Konfiguration des OpenVPN-Servers unter FreeBSD 12.0 erfolgreich abgeschlossen.

Referenz

Das könnte dich auch interessieren …