Forgot your password?

Forgot your username?

All about IT, Web and Development.
By users for users.

OpenVPN Server mit Ubuntu



OpenVPN ist eine Open-Source Lösung für den Aufbau eines VPNs (=Virtual Private Network).

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.

Michael Kostka

Fachinformatiker / Systemintegration
Ich schreibe hier regelmäßig zu den Themen Android, Web, Linux und Hardware.

Raspberry Pi Starter Kit
DataCloud

Leave a comment

I have read the privacy policy and agree to electronically store and process my input data to answer the request.