OpenVPN Server mit Linux (Debian)

Hinweis: Wir haben in diesem Artikel möglicherweise Provisions-Links verwendet und sie durch (*) gekennzeichnet. Erfolgt über diese Links eine Bestellung, erhält maffert.net eine Provision. Es entstehen für Sie keine Nachteile beim Kauf oder Preis.

Da ich mich gerade mit VPN bzw. mit OpenVPN beschäftigt habe, dachte ich es wäre mal ganz nützlich eine Anleitung zu erstellen, wie man einen OpenVPN-Server auf einem Linux Server installiert. Das Linux System ist in meinem Fall ein Debian Squeeze Server.

Diese Anleitung ist in folgende Schritte unterteilt:

  1. OpenVPN installieren und vorbereiten
  2. Zertifizierungsstelle und Öffentlichen Schlüssel erstellen
  3. Zertifikate und Privater Schlüssel erstellen
  4. Diffie Hellman Parameter erstellen
  5. Zertifikate und Schlüssel
  6. Benutzer Zertifikat löschen/Benutzer löschen
  7. VPN-Server konfigurieren
  8. iptables / Firewall Regeln
  9. Zum VPN-Server verbinden

Hintergrundinformationen:

  • Der Debian Server hat die lokale Lan-IP-Adresse: 192.168.100.16 | DNS IP: 192.168.100.1
  • Der OpenVPN Server hat und verteilt IP-Adressen aus: 10.8.0.0/24
  • Der OpenVPN Server heißt: xyzserver
  • Der Benutzer lautet: benutzer1

Punkt 1 | OpenVPN installieren und vorbereiten

OpenVPN installieren:

apt-get install openvpn udev

Konfigurationsbeispiele nach OpenVPN kopieren:

cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn

Bevor man den Öffentlichen Schlüssel (Public Key) generiert, muss man einige Variablen des easy-rsa Scriptes anpassen. Hier ein Beispiel der relevanten Werte:

Datei: /etc/openvpn/easy-rsa/2.0/vars

export KEY_COUNTRY="DE"
export KEY_PROVINCE="NRW"
export KEY_CITY="Bielefeld"
export KEY_ORG="Privat GmbH"
export KEY_EMAIL="tobias@example.de"

Punkt 2 | Zertifizierungsstelle und Öffentlichen Schlüssel erstellen

Die Zertifizierungsstelle und der Öffentliche Schlüssel kann folgendermaßen erstellt werden:

cd /etc/openvpn/easy-rsa/2.0/
. /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/clean-all
. /etc/openvpn/easy-rsa/2.0/build-ca

Diese Scripte fordern Sie auf eine Reihe von Werten/Daten anzugeben. Wenn die richtigen Werte in der „/etc/openvpn/easy-rsa/2.0/vars“ eben eingestellt wurden, dann einfach nur mit Enter alles bestätigen.


Punkt 3 | Zertifikate und Privaten Schlüssel erstellen

Mit der Zertifizierungsstelle kann man nun den Privaten Schlüssel (private key) erstellen. Wichtig ist hierbei, das „xyzserver“ mit dem Hostnamen bzw. mit den Namen des OpenVPN-Servers ersetzt wird:

. /etc/openvpn/easy-rsa/2.0/build-key-server xyzserver

Wie gerade eben kommt wieder diese Abfrage der Daten, soweit alles richtig in „vars“ eingetragen worden ist, kann hier einfach mit Enter alles bestätigt werden. Das „challenge password“ und „optional company name“ sind optionale Daten und können leer gelassen werden. Am Ende muss noch „Sign the certificate“ und „1 out of 1 certificate requests certified, commit?“ mit Yes bestätigt werden.

Mit dem Private Schlüssel können wir nun Zertifikate für die VPN-Clients erstellen. Hierbei wieder darauf Achten, das „benutzer1“ mit den Namen des ersten OpenVPN-Clients ersetzt wird:

. /etc/openvpn/easy-rsa/2.0/build-key benutzer1

Damit wird ein eindeutiger Schlüssel generiert, der den Benutzer identifiziert. Wenn man sich wieder neu auf den Server einlogt und man einen Benutzer hinzufügen möchte, dann muss folgendes noch einmal eingegeben werden:

cd /etc/openvpn/easy-rsa/2.0/
. /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/build-key benutzername

Punkt 4 | Diffie Hellman Parameter erstellen

mehr dazu findet man bei Wikipedia > http://de.wikipedia.org/wiki/Diffie-Hellman-Schl%C3%BCsselaustausch

Die „Diffie Hellman“ Parameter generieren (ist ein Verfahren zur Authentifizierung und des Schlüsselaustausches):

. /etc/openvpn/easy-rsa/2.0/build-dh

Punkt 5 | Zertifikate und Schlüssel

In dem Ordner „/etc/openvpn/easy-rsa/2.0/keys/“ findet man nun alle generierten Zertifikate und Schlüssel.

Folgende Zertifikate, Schlüssel und Configs müssen später auf den Client PC kopiert werden:

  • ca.crt
  • benutzer1.crt
  • benutzer1.key
  • client.conf

Die Zertifikate und Schlüssel für den Server, die nach „/etc/openvpn“ kopiert werden müssen, lauten:

  • ca.crt
  • ca.key
  • dh1024.pem
  • xyzserver.crt – kann evtl. anders heißen, sprich hier sollte der Name auftauchen, der oben anstatt von xyzserver eingegeben wurde.
  • xyzserver.key – kann evtl. anders heißen, sprich hier sollte der Name auftauchen, der oben anstatt von xyzserver eingegeben wurde.

Hiermit werden die Zertifikate und Schlüssel dementsprechend nach „/etc/openvpn“ kopiert. Auch hier wieder „xyzserver“ mit dem Hostnamen bzw. mit den Namen des OpenVPN-Servers ersetzen:

cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt ca.key dh1024.pem xyzserver.crt xyzserver.key /etc/openvpn

Punkt 6 | Benutzer Zertifikat wieder löschen/Benutzer löschen

Wenn man einen OpenVPN-Benutzer/Zugang löschen möchte, dann einfach folgendes ausführen (benutzer1 muss natürlich wieder ersetzt werden):

. /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/revoke-full benutzer1

Punkt 7 | VPN-Server konfigurieren

Wir nehmen die Beispiel Konfiguration von OpenVPN, entpacken diese und verschieben diese in den richtigen Ordner:

cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/
cp client.conf ~/
cd ~/

Zunächst müssen noch in der „server.conf“ die Zertifikat und Key-Namen (in dem Beispiel „xyzserver“) geändert werden:

Datei: /etc/openvpn/server.conf

# (see "pkcs12" directive in man page).
ca ca.crt
cert xyzserver.crt
key xyzserver.key  # This file should be kept secret

 

Nun bearbeiten wir die „client.conf“ und setzen unseren OpenVPN Servernamen/Serverip:

Datei: ~/client.conf

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote vpn.beispiel.de 1194

danach müssen in der gleichen Datei noch die Zertifikatnamen angepasst werden, in unserem Beispiel „benutzer1.crt“ und „benutzer1.key“:

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
ca ca.crt
cert benutzer1.crt
key benutzer1.key

Wenn ein Client bei dem Internetanbieter Unitymedia ist, muss dieser Client in seiner client.conf noch folgendes hinzufügen:

link-mtu 1432

Nun muss die Konfigurationsdatei auf den Client PC kopiert werden. Dieser Schritt muss für jeden Benutzer wiederholt werden, sprich jeder Benutzer bekommt im Prinzip seine eigene „client.conf“ Datei.


Punkt 7.1 | Benutzerdefinierte Einstellungen:

Sitution: Der OpenVPN Server ist in der Firma installiert. Die Clients sollen in das Interne Netz können um zum Beispiel Netzwerkprogramm zu öffnen oder sonstige Dienste nutzen zu können. Wenn das gewünscht ist, muss noch folgendes in die „server.conf“ eingetragen werden:

Damit man auch in andere Netze kann (in meinem Beispiel 192.168.100.X und dem Subnetz: 255.255.255.0), muss folgendes angepasst werden:

# address pool (10.8.0.0/255.255.255.0)
# back to the OpenVPN server.
push "route 192.168.100.0 255.255.255.0"

Um nun noch DNS-Namen aus dem 192.168.100.X Netz auflösen zu können, muss natürlich auch ein DNS-Server eingetragen werden:

# The addresses below refer to the public
# DNS servers provided by opendns.com.
push "dhcp-option DNS 192.168.100.1"

 


Punkt 8 | iptables / Firewall Regeln

iptables/Firewall so anpassen das die Verbindungen erlaubt werden:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -o venet0:0 -j SNAT --to 192.168.100.16

Um Pakete weiterleiten zu können, dann noch in der Datei:

nano /etc/sysctl.conf

folgendes auskommentieren:

net.ipv4.ip_forward=1

Punkt 9 | Zum VPN-Server verbinden

Um den VPN-Server zu starten, führt man folgendes aus:

/etc/init.d/openvpn start

Auf den Client PC muss nun ein VPN Client installiert werden. Benutzt man einen Windows System und den OpenVPN-Client von Openvpn.net, muss dieser als Admin installiert werden und auch immer als Administrator gestartet werden. Zudem muss die Datei „client.conf“ in „client.ovpn“ umbenannt werden und alle Dateien (benutzer1.crt, benutzer1.key, ca.crt und client.ovpn) in den OpenVPN Config Ordner (bei mir c:\Programme\OpenVPN\config\) kopiert werden.

Danach das Programm OpenVPN starten [ALS ADMINISTRATOR] (unten neben der Uhr erscheint ein Symbol), rechte Maustaste und auf verbinden klicken.


 

### Sonstiges ###

Um den kompletten Traffic über den OpenVPN-Server zu tunneln (weiterzuleiten), muss man noch folgendes tun > http://www.maffert.net/alle-verbindungen-bzw-ganzer-traffic-uber-openvpn-tunneln-weiterleiten/

Nützliche Informationen bezüglich der server.conf (der Konfigurationsdatei vom OpenVPN Server) und weiteren Dingen, findet man u.a. auf http://www.linuxforen.de/forums/showthread.php?t=169354

Als Android App empfehle ich: https://play.google.com/store/apps/details?id=de.blinkt.openvpn&hl=de

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert