Anmeldung

Benutzername: Passwort:
Haben Sie Ihre Zugangsdaten vergessen?


IT and more

Willkommen auf der IT Seite. 
Hier möchte ich einige Howtos, Anleitungen und andere IT-Relevante Dinge zum Download bereitstellen.

Bitte beim Download zur weiteren Verwendung aber auf das Copyright achten!

Bei weiteren Fragen könnt ihr mir auch eine Mail zukommen lassen.

IT: OpenVPN Server unter Linux installieren

Posted by Benjamin Wagner (benjamin) on Feb 16 2019

In diesem Szenario steht ein Debian Linux 8 x64 hinter einem Router (Fritzbox) in einem privaten Netzwerk mit dem IP-Adressbereich 192.168.10.0/24. Die Fritzbox ist mittels DynDNS über die Adresse heimserver.meinserver.de erreichbar.

Der Server hat die IP 192.168.10.11, Neetmask ist 255.255.255.0, Gateway ist 192.168.10.1

Eingehende Verbindungen sollen über OpenVPN erfolgen, wobei der VPN-Client eine IP des DHCP-Servers aus dem Heimnetzwerk erhält. Der Zugriff auf alle Netzwerkresourcen im Heimnetzwerk soll möglich sein.

Wir verwenden dazu das TAP Modi. HIer eine kleine Übersicht über die Betriebsarten

Bridging (TAP-Device)

Bei dem Bridging-Modus wird ein vollständiges Tunneln von Ethernet-Frames (Layer2) vorgenommen. Hier ist der Einsatz von alternativen Protokollen wie IPX oder auch das Senden von Wake-On-LAN Paketen möglich. Der Client wird transparent in das Einwahlnetz eingewählt und erhält eine IP-Adresse des dortigen Subnetzes. Somit werden auch Broadcasts weitergeleitet, um z.B. die Namensauflösung des SMB-Protokolls zu ermöglichen.

Bridging (TAP-Device)
Vorteile Nachteile
  • Verhält sich wie ein echter Netzwerkadapter
  • Beliebige Netzwerkprotokolle
  • Client transparent im Zielnetz
  • Broadcasts und Wake-On-LAN
  • Ineffizient
  • Hoher Broadcast-Overhead am VPN-Tunnel
  • Schlechte Skalierbarkeit

Routing (TUN-Device)

Der Routing-Modus stellt einen verschlüsselten Tunnel her, in dem ausschließlich IP-Pakete (Layer3) geleitet werden. Es wird jeder Gegenstelle eine virtuelle IP-Adresse eines fiktiven Subnetzes zugewiesen. Ein Zugriff auf das dahinter liegende Netzwerk ist standardmäßig nicht möglich, kann aber mittels IP-Forwarding und Einträgen in der Routingtabelle der Firewall ermöglicht werden.

Routing (TUN-Device)
Vorteile Nachteile
  • Weniger Traffic-Overhead
  • Geringere Bandbreitenbelastung, weil kein Ethernet-Layer
  • Gute Skalierbarkeit
  • Nur IP-Pakete
  • Keine Broadcasts

 

Installation von OpenVPN

Zuerst die aktuelle Version von OpenVPN herunterladen:

apt-get update && apt-get dist-upgrade
apt-get install openvpn easy-rsa bridge-utils

 

Jetzt die easy-rsaSchlüssel in einen eigenen Ordner kopieren

mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
 
 
 
Jetzt die grundlegenden Werte für die Schlüssel festlegen

nano /etc/openvpn/easy-rsa/vars

In dieser gleichen Datei kann man folgende Werte anpassen. Dadurch kann man Eingaben beim Erstellen der Zertifikate einsparen bzw. Vorgaben festlegen:

set KEY_COUNTRY=DE
set KEY_PROVINCE=Bayern
set KEY_CITY=Nuernberg
set KEY_ORG=Test_Company
set KEY_EMAIL=info(at)test-company(dot)de
set KEY_CN=changeme
set KEY_NAME=changeme
set KEY_OU=Buero
set PKCS11_MODULE_PATH=changeme
set PKCS11_PIN=1234

Folgende Befehle einmalig ausführen:

cd /etc/openvpn/easy-rsa/
source vars
./clean-all 

CA erstellen

Folgende Befehle einmalig ausführen:

source vars
 ./build-ca 

DH-Parameter erstellen

Folgende Befehle einmalig ausführen:

source vars
./build-dh 

Server-Zertifikat erstellen

Folgende Befehle einmalig ausführen:

source vars
./build-key-server server 

cd /etc/openvpn/easy-rsa/keys/
cp server.crt server.key ca.crt dh4096.pem /etc/openvpn 

cd /etc/openvpn/
openvpn --genkey --secret ta.key
tls-auth (der ta.key) bewirkt, dass OpenVPN zusätzliche HMAC-Signaturen zu allen SSL/TLS-handshake-Paketen hinzufügt.
OpenVPN signiert dann alle SSL/TLS-Pakete und kann dadurch schon vor dem Handshake einen unberechtigten Client erkennen und die Verbindung beenden.
Pakete mit einer falschen Signatur werden also sofort verworfen.
Dies kann auch die Geschwindigkeit erhöhen und stabilisieren, da Portscanner die Verbindung nicht blockieren können.

Client-Zertifikat erstellen

Diese Befehle sollten in der Anzahl der Roadwarrior bzw. Clients ausgeführt werden. Jedem VPN-Benutzer sollte ein eigenes Zertifikat zugeordnet werden. Entweder man erzeugt das Client-Zertifikat pro Rechnername, oder mittels den Usernamens. In diesem Beispiel verwenden wir rechnername.

cd /etc/openvpn/easy-rsa/
source vars
./build-key rechnername 

Alle Befehle zu easy-rsa samt Erklärungen in englischer Sprache finden sich in der „README.txt“ im „easy-rsa“-Ordner.

Firewall konfigurieren

Per Standard verwendet OpenVPN den Port 1194/udp. Dieser muss sowohl in der Linux-Firewall als auch, sofern der VPN-Server vom Internet aus erreichbar sein soll, im Router freigegeben bzw. per Portforwarding weitergeleitet werden.

Revoke-List für Zertifikate erstellen

Damit Clientzertifikate widerrufen werden können, muss eine Revokelist erstellt werden:

cd /etc/openvpn/easy-rsa
export KEY_CN="something"
openssl ca -config ./openssl-1.0.0.cnf  -gencrl -out crl.pem

 

Server-VPN-Konfig erstellen

 

Jetzt muss noch die Serverkonfig erstellt werden.

nano /etc/openvpn/server.conf

# die lokale IP-Adresse des physikalischen Netzwerkadapters (nur bei mehreren aktiven Adaptern
# erforderlich),
 der verwendet werden soll In unserem Beispiel ist das 192.168.1.10:
local 192.168.10.11

# Server-Mode
mode server

# zusätzlich TLS-Authentication-Server
tls-server

#Auf welchen TCP oder UDP Port soll der VPN-Server reagieren? Möchten Sie mehrere OpenVPN-Sessions
# auf derselben Machine betreiben,
 geben Sie für jede Session einen eigenen Port an. In unserem Beispiel:
port 1194

#Angabe des Transport-Protokolls (UDP oder TCP)
proto udp

#Angabe des Modus: Bridging (TAP-Device) oder Routing (TUN-Device)
dev tap0

#Verbindung zum lokalen Netzwerk
push "route-gateway 192.168.10.1"

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh4096.pem
crl-verify /etc/openvpn/easy-rsa/crl.pem
#Soll komprimiert werden? Wenn ja:
comp-lzo

#Welcher Verschlüsselungs-Algorithmus soll verwendet werden?
cipher AES-256-CBC

#Aufrechterhaltung der Verbindung
keepalive 10 120

#Wieviele Verbindungen parallel (in unserem Bsp. drei):
max-clients 3

#Anpassungen,
 damit das TAP-Devide mit DHCP-Servern imeigenen Netzwerk funktioniert
script-security 2

# Netzwerkbrücke von OpenVPN aktivieren bzw. beenden über entsprechende Shell-Scripte:
up   "/etc/openvpn/up.sh br0 tap0  1400" # $1=br0,
 $2=tap0,
 $3=1400
down "/etc/openvpn/down.sh br0 tap0" # $1=br0,
 $2=tap0

Linux-Startscript erstellen:

nano /etc/openvpn/up.sh

# Hier folgendes hinzufügen:
#!/bin/sh
BR=$1 # = der Brückennname [br0] (Wichtig: Den Kommentar nicht mit übernehmen!)
DEV=$2 # = das Netzwerkinterface [tap0] (Den Kommentar nicht mit übernehmen!)
MTU=$3 # = der MTU-Wert [1400] (Den Kommentar nicht mit übernehmen!)
/sbin/ifconfig $DEV mtu $MTU promisc up
/sbin/brctl addif $BR $DEV
exit 0

 

Linux-Stopscript erstellen:

nano /etc/openvpn/down.sh

#Hier folgendes hinzufügen:
#!/bin/sh
BR=$1

DEV=$2
/sbin/brctl delif $BR $DEV
/sbin/ifconfig $DEV down

exit 0

 

Die Dateien ausführbar machen:

chmod +x /etc/openvpn/up.sh
chmod +x /etc/openvpn/down.sh

 

Jetzt noch das Bridged-Netzwerkinterface tap0 anlegen. eth0 wird dazu mit keiner gültigen IP-Adresse versehen, die bekommt jetzt tap0.

nano /etc/network/interfaces

# The loopback network interface
### den loopback Eintrag so lassen:
auto lo
iface lo inet loopback

### alten Netzwerkeintrag deaktivieren:
# The primary network interface
# auto eth0
#  iface eth0 inet static
#  address 192.168.10.11                # Server IP-Adresse.
#  netmask 255.255.255.0               # Server Subnetmaske.
#  gateway 192.168.10.1               # Standard-Gateway (DSL-Router im Server Netzwerk).
#  dns-nameservers 192.168.10.1  8.8.8.8 # Der Standard DSL-Router im Server Netzwerk leitet DNS-Anfragen weiter an den Provider & Google DNS-Server (fallback).
#  network 192.168.10.0                 # Server Netzbereich.
#  broadcast 192.168.10.255             # Broadcast im Netzwerk.

### den Netzwerkbrücken Eintrag hinzufügen:
auto br0
  iface br0 inet static
  address         192.168.10.11        # Server IP-Adresse. (Wichtig: Alle Kommentare hinter Parametern nicht mit übernehmen!)
  netmask         255.255.255.0       # Server Subnetmaske.
  gateway         192.168.10.1         # Standard-Gateway (DSL-Router im Server Netzwerk).
  network         192.168.10.0         # Server Netzbereich.
  dns-nameservers 192.168.10.1  8.8.8.8 # Der Standard DSL-Router im Server Netzwerk leitet DNS-Anfragen weiter an den Provider & Google DNS-Server (fallback).
  broadcast       192.168.10.255       # Broadcast im Netzwerk.
  bridge_ports eth0                   # Über welche Netzwerkkarte soll die Brücke aufgebaut werden?
###  Wichtig: Kommentare die hier hinter Parametern stehen muss man unbedingt entfernen.
#            Alternativ kann man diese Erklärungen auch in eine neue extra Zeile verschieben.
#            Lässt man die Kommentare stehen,
 so startet das Netzwerk nicht korrekt und verschiedenste Funktionen wie z. B. einfache DNS-Auflösungen gehen dann nicht mehr.

### Einstellungen für das lokale Netzwerk:
iface eth0 inet manual
  up ifconfig $IFACE 0.0.0.0 up
  up ip link set $IFACE promisc off
  down ip link set $IFACE promisc off
  down ifconfig $IFACE down

 

IP-Routing aktivieren

nano /etc/sysctl.conf

# Hier die folgende Zeile wie folgt ändern:
net.ipv4.ip_forward=1

Jetzt den OpenVPN Server neu starten.

Clientkonfiguration

Auf dem OpenVPN Client muss das Netzwerkinterface, das von OpenVPN erzeugt wurde, ebenfalls in openvpn umbenannt werden. Dann erstellen wir eine dazu passende Datei C:\Program Files\OpenVPN\config\heimserver.meinserver.d.ovpn mit dem folgendem Inhalt

client
remote heimserver.meinserver.de 1194
nobind
proto udp
dev tap
dev-node openvpn
ca "ca.crt"
cert "rechnername.crt"
key "rechnername.key"
comp-lzo
cipher AES-256-CBC

Diese Datei wird im Ordner C:\Program Files\OpenVPN\config\ zusammen mit den beiden Dateien rechnername.crt, rechnername.key sowie ca.crt abgespeichert.

 

Wenn nun auf dem Client in der OpenVPN Software "verbinden" gedrückt wird, verbindet sich der Client an den Server heimserver.meinserver.de über Port 1194 UDP, der wiederrum an den internen Server weitergeleitet wird.

Anschließend wird überprüft, ob das Clientzertifikat rechnername.crt gültig ist. Falls ja, erhält der VPN-Client vom DHCP-Server des Heimnetzwerks eine IP-Adresse zugewiesen.

Zertifikat wiederrufen

Möchte man ein Client-Zertifikat widerrufen, gibt man in einer CMD-Box folgenden Befehl ein:

source vars
openssl ca -revoke rechnename

Doppelte Absicherung mit Zertifikat und Benutzername und Passwort

Wir möchten, dass sich nur bestimmte lokale User (Beispielsweise der bestehende lokale User "Max" am System per OpenVPN einwählen können.

Dazu fügt man in die Openvpn Konfigdatei server.conf am Server folgende Zeilen hinzu:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn

 

Dann erstellt man die Datei /etc/pam.d/openvpn mit folgendem Inhalt

auth    required        pam_unix.so    shadow    nodelay
account required        pam_unix.so
auth required pam_listfile.so onerr=fail item=group sense=allow file=/etc/openvpn.group.allowed

 

Nun erstellt man die lokale Gruppe openvpn, und fügt diese in die Liste der erlaubten Gruppen hinzu:

groupadd openvpn
echo openvpn > /etc/openvpn.group.allowed
usermod -a -G openvpn Max 

 

Auf dem Client wird dazu in der Datei C:\Program Files\OpenVPN\config\heimserver.meinserver.d.ovpn folgende Zeile hinzugefügt

auth-user-pass

 

Damit wird beim Login zu einen Überprüft, ob das Client-Zertifikat noch gültig ist. Damit das Zertifikat nicht von jedem kopiert werden kann, wird als zusätzliche Sicherheitsstufe noch ein Benutzername/Password eines vorhandenen lokalen Linuxusers, der Mitglied der Gruppe openvpn ist, abgefragt.

Auf diesem Weg ist relativ einfach eine sichere Einwahl mittels OpenVPN m

Last changed: Feb 16 2019 at 01:12

Back