Im Vergleich zu anderen Lösungen wie PPTP, IPsec, L2TP bietet es einen hohen Sicherheitsstandard bei gleichzeitiger Kompatibilität mit diversen Plattformen wie Windows, Mac OS X, Linux, BSD.
Dieser Artikel erklärt die Einrichtung eines OpenVPN Servers / Gateways unter Ubuntu.
Installation
Zur Installation wechselt man in ein Terminal und installiert das OpenVPN + IPTables Persistent Paket:
sudo apt-get install openvpn iptables-persistent
Im Anschluss müssen noch die Konfigurationsdateien an den entsprechenden Ort kopiert werden.
sudo cp -r /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gunzip -d /etc/openvpn/server.conf.gz
sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa2
Als nächstes wird ein Verzeichnis für die Zertifikate erstellt:
sudo mkdir /etc/openvpn/easy-rsa2/keys
Konfiguration
Serverzertifikat erstellen
Zunächst muss ein Serverzertifikat erstellt werden. Hierzu wird folgende Datei als Root editiert. Dies geschieht am einfachsten über den Editor nano.
sudo nano /etc/openvpn/easy-rsa2/vars
Am Ende der Datei befinden sich folgende Variablen. Diese sind mit den eigenen Daten zu füllen.
export KEY_COUNTRY="DE"
export KEY_PROVINCE="BY"
export KEY_CITY="Haibach"
export KEY_ORG="FoxPlex"
export KEY_EMAIL="info@example.com"
Zum Speichern STRG + O und anschließend die Eingabetaste drücken.
Um die Variablen systemweit bekannt zu machen, ist folgender Befehl notwendig.
source /etc/openvpn/easy-rsa2/vars
Jetzt kann das Serverzertifikat erstellt werden. Hierzu wechseln wir in das easy-rsa2 Verzeichnis:
cd /etc/openvpn/easy-rsa2
Damit die Umgebungsvariablen beim Aufruf von sudo nicht zurückgesetzt werden, verwenden wir hier die Option -E.
Folgende Befehle erstellen das Zertifikat für die CA (=Certificate Authority), welche später die Zertifikate für die einzelnen Benutzer bzw. Clients vergibt.
sudo -E ./clean-all
sudo -E ./build-ca
Die eigentliche Erstellung des Serverzertifikates erfolgt über diesen Befehl:
sudo -E ./build-key-server server
Bei Feld "Common Name" sollte der Name eingegeben werden mit welchem man auch auf den VPN Server zugreifen möchte (z.B. vpn.foxplex.com). Die Felder für das "Challenge Password" können leer gelassen werden.
Benutzer anlegen
Nun können wir uns dem Anlegen neuer Benutzer / Clients widmen. Hierzu verwenden wir das Skript build-key.
Wichtig: Bevor zu einem späteren Zeitpunkt neue Clients hinzugefügt werden, muss die Datei /etc/openvpn/easy-rsa2/vars erneut per source eingebunden werden.
sudo -E ./build-key client1
Im Feld "Common Name" sollte auch hier wieder der Name des Clients (Idealerweise der Hostname oder Benutzername) eingetragen werden (Hier: client1).
Zum Abschluss wird noch der Diffie-Hellmann Key erzeugt. Das Diffie-Hellmann Protokoll wird für den sicheren Schlüsselaustausch benötigt.
sudo -E ./build-dh
Zertifikate
Im Verzeichnis keys befinden sich anschließend alle benötigten Zertifikate. Um den client1 später mit dem VPN zu verbinden, werden folgende Dateien benötigt:
- ca.crt - Masterzertifikat der Certificate Authority
- client1.crt - Clientzertifikat
- client1.key - Schlüssel für das Clientzertifikat
Die *.key Dateien sind nur an die entsprechenden Benutzer / Clients auszugeben.
Konfiguration anpassen
Jetzt muss noch die Konfiguration des Servers angepasst werden. Hierzu muss die Konfigurationsdatei des Servers editiert werden.
sudo nano /etc/openvpn/server.conf
Hierbei sollten folgende Optionen gesetzt sein:
;dev tap
dev tun
ca ./easy-rsa2/keys/ca.crt
cert ./easy-rsa2/keys/server.crt
key ./easy-rsa2/keys/server.key
dh ./easy-rsa2/keys/dh1024.pem
Weiterhin sind folgende Optionen an das eigenen Netzwerk anzupassen.
Netz für die VPN-Clients:
server 10.8.0.0 255.255.255.0
Route für das lokale Netzwerk hinter dem VPN-Gateway. Diese Option ermöglicht, dass Clients aus dem Netz 10.8.0.0 auch das Netz 192.168.1.0 erreichen können.
push "route 192.168.1.0 255.255.255.0"
Forwarding und Firewall
Damit die Kommunikation über VPN mit den Clients im lokalen Netzwerk möglich wird, sind noch einige Firewallregeln und Anpassungen am System erforderlich.
Zur Weiterleitung der Pakete zwischen verschiedenen Netzwerkschnittstellen muss das IP-Forwarding aktiviert werden.
sudo sysctl -w net/ipv4/ip_forward=1
Um die Option permanent bei jedem Systemstart zu aktivieren, muss die Datei /etc/sysctl.conf folgendermaßen ergänzt werden:
net.ipv4.ip_forward=1
Im Folgenden ist die Konfiguration per iptables erkennbar. Sämtlicher VPN-Traffic läuft über das virtuelle Gerät "tun0". Das interne LAN ist über das Netzwerkinterface eth0 angebunden.
Neue Verbindungen von Innen nach Außen + Außen nach Innen:
iptables -A INPUT -i tun0 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o tun0 -m state --state NEW -j ACCEPT
Neue Verbindungen durchreichen:
iptables -A FORWARD -i tun0 -o eth0 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m state --state NEW -j ACCEPT
Bestehende und verwandte Verbindungen durchreichen:
iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Um die Regeln auch nach einem Neustart einzubinden, werden diese gespeichert.
iptables-save > /etc/iptables/rules.v4
Befindet sich der Server hinter einem Router, ist selbstverständlich noch eine Portweiterleitung auf Port 1194/UDP anzulegen.
Abschluss
Zum Schluss muss der OpenVPN Dienst neu gestartet werden.
sudo service openvpn restart
Damit ist der Server einsatzbereit.
Fazit
Die Konfiguration eines OpenVPN Server unter Ubuntu gestaltet sich recht umfangreich. Man sollte grundlegende Kenntnisse über Netzwerke mitbringen.
Dennoch gestaltet sich die Konfiguration im Vergleich zu IPsec und anderen Protokollen verhältnismäßig einfach und übersichtlich.
Quellen: Ubuntu Logo, OpenVPN Logo - Trade Mark (tm) of OpenVPN Technologies, Inc.
Leave a comment