OpenVPN auf FreeBSD 12.0 installieren und konfigurieren

Einleitung
OpenVPN ist eine Open-Source-Software, mit der Sie über das öffentliche Internet ein sicheres privates Netzwerk (VPN) aufbauen können. OpenVPN verwendet die OpenSSL-Bibliothek zur Verschlüsselung und bietet mehrere Authentifizierungsmechanismen: zertifikatsbasierte Authentifizierung, Pre-shared Keys und Benutzername/Passwort. Diese Anleitung beschreibt die Einrichtung eines OpenVPN-Servers auf FreeBSD 12.0 mit zertifikatbasierter Authentifizierung.
Worum es hier geht: Installation von OpenVPN, Erstellen einer eigenen CA und Zertifikate, Konfiguration des Servers, Absicherung per pf, Aktivierung von IP-Forwarding und abschließende Tests.
Wichtig: Diese Anleitung geht von root-Rechten auf dem Zielsystem aus und davon, dass pf als Firewall benutzt wird.
Voraussetzungen
- FreeBSD 12.0 (aktualisiert)
- Mindestens 512 MB RAM und 1 CPU (für Labortests ausreichend)
- Root-Zugriff (oder sudo)
- pf-Firewall konfigurierbar
- Verbindung zum Internet zum Herunterladen von Paketen
Hinweis: In Produktionsumgebungen empfiehlt sich mindestens 2 GB RAM und regelmäßige Backups der PKI-Schlüssel.
Was wir tun werden
- OpenVPN auf FreeBSD installieren
- Easy-RSA-Variablen anpassen
- CA, Server- und Client-Zertifikate erstellen
- OpenVPN konfigurieren
- pf-Firewall-Regeln anpassen
- IP-Forwarding aktivieren
- Client-Konfiguration erzeugen und testen
Schritt 1 - OpenVPN installieren
Update der Paketliste und Installation von OpenVPN:
pkg update
pkg install openvpn
Nach der Installation OpenVPN beim Systemstart aktivieren und die Tunnel-Interface-Variable setzen:
sysrc openvpn_enable="YES"
sysrc openvpn_if="tun"
Jetzt ist das OpenVPN-Paket auf dem FreeBSD-System installiert.
Schritt 2 - Variablen für Zertifikate setzen
Wir nutzen Easy-RSA zur PKI-Verwaltung. Erstelle das Verzeichnis für OpenVPN und kopiere easy-rsa hinein:
mkdir -p /usr/local/etc/openvpn/
cp -R /usr/local/share/easy-rsa /usr/local/etc/openvpn/
Wechsel in das easy-rsa-Verzeichnis und bearbeite die Datei vars mit dem Editor deiner Wahl:
cd /usr/local/etc/openvpn/easy-rsa/
vim vars
Passe die Variablen an deine Organisation und dein Land an. Beispielkonfiguration (in “vars”):
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 "[email protected]"
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"
Speichern und die Datei ausführbar machen:
chmod +x vars
Schritt 3 - Zertifikate erzeugen
Initialisiere das PKI-Verzeichnis und erstelle CA, Server- und Client-Zertifikate sowie DH-Parameter und CRL (Certificate Revocation List):
cd /usr/local/etc/openvpn/easy-rsa/
./easyrsa.real init-pki
- CA erstellen:
./easyrsa.real build-ca
Du wirst nach einer Passphrase für den CA-Schlüssel gefragt. Merke dir diese sicher.
- Server-Anfrage erstellen und signieren:
./easyrsa.real gen-req openvpn-bsd nopass
./easyrsa.real sign-req server openvpn-bsd
Verifiziere das Server-Zertifikat:
openssl verify -CAfile pki/ca.crt pki/issued/openvpn-bsd.crt
- Client-Zertifikat erstellen und signieren:
./easyrsa.real gen-req client01 nopass
./easyrsa.real sign-req client client01
Verifizieren:
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
- DH-Parameter und CRL erstellen:
./easyrsa.real gen-crl
./easyrsa.real gen-dh
Kopiere die benötigten Dateien in die OpenVPN-Konfigurationspfade:
mkdir -p /usr/local/etc/openvpn/{server,client}
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/
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/
cp pki/dh.pem /usr/local/etc/openvpn/server/
cp pki/crl.pem /usr/local/etc/openvpn/server/
Wichtig: Bewahre private Schlüssel (pki/private/*.key) sicher und offline auf, falls möglich.
Schritt 4 - OpenVPN konfigurieren
Erstelle die Server-Konfiguration unter /usr/local/etc/openvpn/openvpn.conf:
cd /usr/local/etc/openvpn/
vim openvpn.conf
Beispielkonfiguration (passe Pfade und optional DNS an):
# 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
Starte den Service und prüfe den Status:
service openvpn start
service openvpn status
Prüfe die gebundenen Sockets:
sockstat -l4
Hinweis: Passe “duplicate-cn” nur an, wenn mehrere Clients dasselbe Zertifikat verwenden sollen. Besser ist pro Client ein eigenes Zertifikat.
Schritt 5 - PF-Firewall konfigurieren
Wir erstellen NAT- und Pass-Regeln, damit VPN-Traffic ins Internet geroutet wird.
Bearbeite /usr/local/etc/pf.conf oder deine zentrale pf-Konfigurationsdatei:
cd /usr/local/etc/
vim pf.conf
Beispielausschnitt (Annahme: externes Interface ist $ext_if, VPN-Interface soll tun0 sein):
# vpn interface
vpn_if="tun0"
vpn_net = "10.5.5.0/24"
# reassemble all fragmented packets before filtering them
scrub in on $ext_if all fragment reassemble
# route traffic from VPN interface out to the internet
nat on ! $vpn_if from $vpn_net to any -> $ext_ip
# 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
Prüfe und lade die pf-Regeln neu:
service pf check
service pf reload
Prüfe die Regeln mit:
pfctl -sr
pfctl -sn
Wichtig: Ersetze $ext_if und $ext_ip durch die tatsächlichen Interface- und IP-Namen.
Schritt 6 - IP-Forwarding aktivieren
Ermögliche IPv4- und IPv6-Weiterleitung in /etc/sysctl.conf:
vim /etc/sysctl.conf
Füge hinzu:
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
Lade die sysctl-Einstellungen:
sysctl -f /etc/sysctl.conf
Aktiviere das System als Gateway in /etc/rc.conf:
sysrc gateway_enable="YES"
Danach Neustart empfohlen:
reboot
Schritt 7 - Client einrichten
Beispiel-Client-Konfiguration (/usr/local/etc/openvpn/client/client01.ovpn):
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
Ersetze “xxx.xxx.xxx.xxx” durch die öffentliche IP oder DNS-Name deines Servers. Lade die Dateien ca.crt, client01.crt, client01.key und client01.ovpn auf den Client-Rechner und starte den Client:
openvpn --config client01.ovpn
Schritt 8 - Testen
Auf dem Client nach erfolgreichem Verbindungsaufbau das Interface prüfen:
ifconfig tun0
Ping an den Server intern:
ping -c3 10.5.5.1
Prüfe die öffentliche IP aus dem VPN:
curl ipinfo.io
Wenn diese Tests funktionieren, ist der grundlegende VPN-Server einsatzbereit.
Sicherheits-Hardening und Best Practices
- Verwende für produktive Umgebungen RSA-4096 oder ECDSA mit starken Kurven (z. B. secp384r1). Beachte Kompatibilität mit Clients.
- Setze starke Passphrasen für die CA und sichere die privaten Schlüssel offline.
- Deaktiviere ‘duplicate-cn’ und nutze pro Client eigene Zertifikate.
- Verwalte gesperrte Zertifikate mit crl.pem; entferne Benutzer durch Hinzufügen zur CRL und erneutes Laden in OpenVPN.
- Aktiviere und überwache Logs (/var/log/openvpn.log) und nutze ein zentrales Log-Management.
- Prüfe TLS-Konfigurationen regelmäßig mit Tools wie “openssl s_client” oder Online-Scannern.
Sicherheits-Checklist:
- CA-Schlüssel gesichert
- CRL-Prozess eingerichtet
- Logging auf separatem Medium
- Regelmäßige Key-Rotation geplant
Fehlerbehebung (Troubleshooting)
- OpenVPN startet nicht: Prüfe /var/log/openvpn.log und syslog.
- Port belegt: Prüfe “sockstat -l4” und passe port/proto an.
- Clients erhalten keine Internetverbindung: Prüfe pf NAT-Regeln, sysctl ip.forwarding und routing table.
- Zertifikatfehler: Überprüfe Ablaufdaten, CN-Felder und das CA-Zertifikat mit openssl verify.
- CRL greift nicht: Stelle sicher, dass crl-verify in openvpn.conf gesetzt ist und crl.pem aktuell ist.
Wichtige Kommandos zur Diagnose:
service openvpn status
tail -n 200 /var/log/openvpn.log
pfctl -sr
pfctl -sn
ifconfig tun0
netstat -rn
Wann diese Anleitung nicht passt (Limitierungen)
- Wenn Sie TLS-Auth via tls-auth oder TLS Crypt wünschen, sind zusätzliche Schlüssel und Konfigurationsschritte nötig.
- Für hochverfügbare Setups (HA/Failover) benötigt man zusätzlich Load-Balancer oder VRRP/Carp-Setups.
- Bei reinen IPv6-Only-Setups sind zusätzliche Anpassungen an Pf und OpenVPN nötig.
Alternativen: WireGuard (einfacher, moderner, schnellere Crypto-Primitive), IPsec (integriert in viele Geräte), OpenVPN mit TLS-Crypt für zusätzlichen Schutz.
Mini-Playbook / SOP für Rollout (Kurzversion)
- System-Update und Paketinstallation testen.
- Easy-RSA konfigurieren und PKI erzeugen.
- Server-Konfig testen (dry-run) und Logs prüfen.
- Firewall- und NAT-Regeln minimal setzen und prüfen.
- IP-Forwarding aktivieren.
- Test-Client erstellen, verbinden und Funktionen prüfen (Ping, DNS, Internet).
- Monitoring einrichten und Playbook zur Key-Rotation bereitstellen.
Rollout-Checkliste nach Rolle
Administrator:
- CA und Server-Schlüssel erstellt und sicher archiviert.
- Firewall- und NAT-Regeln erstellt.
- Start-/Stop-Skripte und Monitoring konfiguriert.
Netzwerk-Ingenieur:
- Routing/MTU geprüft (tun/tap MTU-Anpassung bei Fragmentierung).
- Performance-Tests (Durchsatz) geplant.
Security-Officer:
- Key-Rotation-Plan vorhanden.
- CRL-Prozess dokumentiert.
- Logging/Korrelationsregeln konfiguriert.
Kriterien für Tests
- Client kann 10.5.5.1 pingen (3/3 Pakete).
- DNS-Auflösung funktioniert über die pushed DNS-Server.
- curl ipinfo.io zeigt die öffentliche Server-IP.
- OpenVPN-Prozess läuft und bindet an UDP 1194.
- pf-NAT arbeitet korrekt und es gibt keine Paketverluste durch Fragmentierung.
Kurzes Glossar (1-Zeiler)
- CA: Certification Authority, signiert Server/Client-Zertifikate.
- CRL: Certificate Revocation List, Liste gesperrter Zertifikate.
- DH-Param: Diffie-Hellman-Parameter für Schlüsselaustausch.
- PKI: Public Key Infrastructure, System zur Verwaltung von Zertifikaten.
Datenschutz / GDPR-Hinweis
Zertifikate enthalten häufig Identifikationsdaten (CN, E-Mail). Speichern Sie personenbezogene Daten nur so weit wie nötig und dokumentieren Sie, welche Daten wann und wo gespeichert werden. Bei Zugriff auf Logdaten sicherstellen, dass personenbezogene Informationen nur nach Bedarf und mit Auditierung zur Verfügung stehen.
Beispiel-Mermaid-Entscheidungsbaum zur Umsetzung
flowchart TD
A[Start: Bedarf für VPN] --> B{Produktiv oder Test}
B -->|Test| C[Einzelserver, einfache Konfiguration]
B -->|Produktiv| D{HA benötigt?}
D -->|Nein| E[Server + Monitoring + Backup PKI]
D -->|Ja| F[HA-Setup: Loadbalancer/VRRP + Sync]
C --> G[WireGuard prüfen als Alternative]
E --> H[Produktiv: Security-Hardening]
Zusammenfassung
Das Aufsetzen eines OpenVPN-Servers auf FreeBSD 12.0 umfasst Paketinstallation, PKI-Erstellung mit Easy-RSA, Konfiguration von OpenVPN, Anpassung der pf-Firewall und Aktivierung von IP-Forwarding. Zusätzliche Maßnahmen wie Security-Hardening, CRL-Verwaltung und Monitoring sind essenziell für den produktiven Betrieb.
Referenzen
Ähnliche Materialien
KI-Apps zum Englischlernen – Top 10 & Auswahlhilfe

Untertitel in Final Cut Pro hinzufügen
BIKA LIMS auf Ubuntu Server in 15 Minuten installieren

iPhone-Akku optimieren: Laufzeit & Gesundheit

Fehler 0x800F0909 bei Sprachpaket-Installation beheben
