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.
Vorteile | Nachteile |
---|---|
|
|
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.
Vorteile | Nachteile |
---|---|
|
|
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
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
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
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
#!/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
#!/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/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