PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Open VPN Server auf Debian für Windows, Android und andere Zwecke



Shepard
05.04.2016, 09:54
Wer kennt das VPN Spielchen nicht. Nur bei den meisten hakt es wenn es um die Config eines eigenen Servers für VPN Zwecke geht.
Wir beschäftigen uns heute mal mit einer OpenVPN Config auf einem Debian Root um ein "sicheres" Netzwerk zu basteln.

Achtung! Nicht unbedingt Anfänger geeignet :emoji38: Wenn Euch davor ein paar Grundschritte vom Wissen her lesen lieber dreimal Lesen und die eine oder andere Frage stellen.

Voraussetzungen:

ein Server mit mindestens 512 MB Ram, mindestens eine 800 Mhz CPU (Mehr ist natürlich besser) und mindestens 5 GB freien Festplattenspeicher
TUN / TAP Unterstützung aktiviert
installiertes Debian System
SSH Zugang mit Root Rechten


OpenVPN installieren und konfigurieren

1. Verbindung zum Server aufbauen und Updates einspielen

Stellt mittels Putty oder ähnlichem Client eine Verbindung zu eurem Server her.
Ist die Verbindung erfolgreich hergestellt werden erst mal eventuelle Updates installiert.
Dazu einfach in der Konsole folgenden Befehl ausführen:

root@vpn:~# apt-get update && apt-get upgrade

2. Prüfen ob TUN/TAP aktiviert ist

Um zu prüfen ob das TUN/TAP Device aktiv ist und korrekt arbeitet einfach folgenden Befehl in der Konsole eingeben:

root@vpn:~# cat /dev/net/tun

Die Ausgabe sollte dann so aussehen:

cat: /dev/net/tun: File descriptor in bad state

Hinweis
Wenn in der Ausgabe eine Meldung der Art “File descriptor in bad state” erscheint, ist alles in Ordnung und TUN/TAP ist aktiviert. Wenn in der Ausgabe hingegen eine Meldung der Form “No such device” erscheint, sollte man den Hoster mit der Bitte um Aktivierung des TUN/TAP Devices kontaktieren.

3. Installation von openVPN und udev

Einfach den Befehl eingeben und Entern

root@vpn:~# apt-get install openvpn udev

4. Kopieren der Beispielkonfigurationen von openVPN

Bei der Installation hat openVPN bereits alles mitgeliefert was wir benötigen. Die entsprechenden Dateien müssen lediglich kopiert werden.
Das geschieht mittels:

root@vpn:~# cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/

5. OpenVPN Beispielkonfiguration bearbeiten

Als erstes editieren wir die Datei “vars” mit vi oder nano oder was Ihr sonst gern verwendet. Die Werte für “KEY_COUNTRY”, “KEY_PROVINCE”, “KEY_CITY”, “KEY_ORG” und “KEY_EMAIL” einfach mit den eigenen Werten anpassen. Kein muss aber eine ganz klare Empfehlung ist die 1024-Bit Verschlüsselung zu erhöhen da diese heutzutage durchaus zu knacken ist.
Dazu einfach „KEY_SIZE“ auf 4096 stellen.
Nun die Datei einfach speichern und schließen.

root@vpn:~# vi /etc/openvpn/easy-rsa/2.0/vars

Die Datei sieht so aus mit entsprechenden Stellen die editiert werden müssen:

# These are the default values for fields
# which will be placed in the certificate.#
Don’t leave any of these fields blank.
export KEY_COUNTRY=“DE“
export KEY_PROVINCE=“B oder euer Bundesland“
export KEY_CITY=“Berlin oder sonst etwas“
export KEY_ORG=“Organisation oder Domain“
export KEY_EMAIL=“[email protected]
export KEY_SIZE=4096

6. OpenVPN Zertifikat erstellen

Dazu einfach nachfolgende Befehle, nacheinander in die Shell eingeben.

Wir wechseln in das korrekte Verzeichnis mit:
root@vpn:~# cd /etc/openvpn/easy-rsa/2.0/
Hier laden wir die vorhin erstellte „vars“ Datei
root@vpn:~# . /etc/openvpn/easy-rsa/2.0/vars
Mit diesem Befehl werden alle Altlasten und bereits erstellten Schlüssel gelöscht
root@vpn:~# . /etc/openvpn/easy-rsa/2.0/clean-all
Jetzt erstellen wir ein Server Zertifikat. Dabei werden einige Eingaben erforderlich die Ihr einfach ausfüllen könnt
root@vpn:~# . /etc/openvpn/easy-rsa/2.0/build-ca

Wichtig!
Die beiden Fragen bzw. Werte müssen einzigartig sein und dürfen nicht doppelt vergeben werden!
Common Name (eg, your name or your server’s hostname) [changeme]:vpn.euer-host.com
Name [changeme]:einmaliger-name

7. OpenVPN privaten Server Schlüssel erstellen

Nun gilt es wieder, wie so oft, einen Befehl in der Shell ein zutippen um damit den privaten Schlüssel für den Server zu erstellen. Im Zuge dessen wird man auch wieder aufgefordert einige Daten einzugeben. Die Eingaben bitte auf eure persönlichen Bedürfnisse anpassen. Das “challenge password” und den “company name” kann man in diesem Fall leer lassen. Die Eingaben muss man im Anschluss noch 2x mit der Taste “y” oder der „j“ Taste (engl.: yes, dt.: ja) bestätigen.
root@vpn:/etc/openvpn/easy-rsa/2.0# . /etc/openvpn/easy-rsa/2.0/build-key-server vpn-server

8. OpenVPN Schlüssel für einen Client erstellen

Um einen Schlüssel für einen Client zu erstellen einfach den nachfolgenden Shell Befehl eintippen wobei dabei das “windowspc” in diesem Befehl unbedingt durch eine eigene Bezeichnung ersetzt werden sollte. Es darf weiterhin keine 2 Clients geben die mit genau der gleichen Bezeichnung arbeiten. Sie müssen vom Namen her paarweise also immer verschieden sein.
Das “challenge password” und den “company name” kann man in diesem Fall auch leer lassen. Die Eingaben muss man im Anschluss noch 2x mit der Taste “y” oder der „j“ Taste (engl.: yes, dt.: ja) bestätigen.
root@vpn:/etc/openvpn/easy-rsa/2.0# . /etc/openvpn/easy-rsa/2.0/build-key windowspc
Möchte man später noch weitere Clients hinzufügen so muss man dieses Prozedere einfach mit folgenden Befehlen wiederholen und die Bezeichnung „linuxpc“ wieder entsprechend ändern:
root@vpn:~# cd /etc/openvpn/easy-rsa/2.0/
root@vpn:/etc/openvpn/easy-rsa/2.0# . /etc/openvpn/easy-rsa/2.0/vars
root@vpn:/etc/openvpn/easy-rsa/2.0# . /etc/openvpn/easy-rsa/2.0/build-key linuxpc

9. Diffie-Hellman-Parameter erstellen

Einfach folgenden Befehl ausführen:
root@vpn:/etc/openvpn/easy-rsa/2.0# . /etc/openvpn/easy-rsa/2.0/build-dh

10. OpenVPN Dateien auf den Client kopieren

Ich kopiere die Dateien per scp auf meinen Rechner und verteile diese von da aus an meine Clients per USB Stick oder als verschlüsseltes Archiv über eine verschlüsselte https Verbindung.
Hinweis
Wichtig ist, dass Ihr das eben nicht einfach nur unverschlüsselt per Browser, E-Mail, FTP oder ähnliches übertragt. Dann ist die Sicherheit eurer VPN-Verbindung, die ihr später einmal nutzen wollt, gegebenfalls bereits mitunter schon nicht mehr gewährleistet.
Benötigt wird für jeden Client die ca.cert. Weiterhin gibt es für jeden Client 2 Dateien die mit obigen Befehlen erstellt werden. In meinem Beispiel also die windowspc.crt und windowspc.key
Die Dateien liegen unter:
/etc/openvpn/easy-rsa/2.0/keys

11. OpenVPN Server Dateien kopieren

Hinweis

Beachtet bitte die “server.crt”, “server.key”, “server.conf” und “windowspc.conf” hat bei euch gegebenenfalls einen anderen Namen. Je nachdem wie ihr euren Server bzw. Client einige Schritte zuvor genannt habt.
Zuerst wechseln wir ins openvpn Verzeichnis, wo unsere Zertifikate und Keys gespeichert sind:
root@vpn:/etc/openvpn/easy-rsa/2.0# cd /etc/openvpn/easy-rsa/2.0/keys
Nun kopieren wir die erstellten Serverkeys und Serverzertifikate
root@vpn:/etc/openvpn/easy-rsa/2.0/keys# cp ca.crt ca.key dh4096.pem server.crt server.key /etc/openvpn
Jetzt holen wir uns die Server Konfigurationsdateien
root@vpn:/etc/openvpn/easy-rsa/2.0/keys# cd /usr/share/doc/openvpn/examples/sample-config-files
root@vpn:/usr/share/doc/openvpn/examples/sample-config-files# gunzip -d server.conf.gz
root@vpn:/usr/share/doc/openvpn/examples/sample-config-files# cp server.conf /etc/openvpn/server.conf
root@vpn:/usr/share/doc/openvpn/examples/sample-config-files# cp client.conf ~/windowspc.conf

12. OpenVPN Server Konfiguration editieren

Hinweis

In der “server.conf” muss kontrolliert werden ob die Bezeichnungen und Pfade für “ca”, “cert”, “key” und “dh” stimmen. Wenn der Server zum Beispiel anders genannt wurde, dann die Bezeichnungen an dieser Stelle einfach anpassen.
root@vpn:/usr/share/doc/openvpn/examples/sample-config-files# cd /etc/openvpn
root@vpn:/etc/openvpn# vi server.conf
# Any X509 key management system can be used.
# OpenVPN can also use a PKCS
#12 formatted key file
# (see „pkcs12“ directive in man page).
ca ca.crt
cert server.crt
key server.key
# This file should be kept secret
# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh4096.pem

Möchte man zusätzlich noch das der Client auch auf das vLAN Netz hinter dem VPN Server zugegriffen werden kann (Client to Client), müssen folgende Zeilen in die „server.conf“ eingefügt werden:
push „redirect-gateway def1 bypass-dhcp“
client-to-client
Zum konfigurieren bestimmter DNS Server einfach folgendes eintragen:
push „dhcp-option DNS 85.214.20.141“
push „dhcp-option DNS 8.8.8.8“
Man könnte auch weitere DNS Server eintragen. Ich nutze zum Beispiel einen DNS Server in meinem VPN Netzwerk. Damit ist es mir möglich Domains via Browser erreichbar zu machen die nur im VPN Netzwerk funktionieren und kein Geld kosten. Beispielsweise eine Domain wie vpn.netzwerk. Das hat nicht nur den Vorteil das man sich die Adressen leichter merken kann, sondern auch noch dass man für Entwicklungen keine zusätzlichen Domains kaufen muss.
Möchte man zusätzlich noch das heimische Netzwerk erreichbar machen, so fügt man einfach diese Zeile hinzu
push „route 192.168.0.0 255.255.255.0“
Die IP muss man natürlich an das heimische Netzwerk anpassen.
Eine Verschlüsselung und Kompression sollte man natürlich einbauen aber Achtung, dies treibt die CPU Auslastung natürlich etwas in die Höhe!
cipher AES-128-CBC
comp-lzo

Das wären die wichtigsten Funktionen, es gibt natürlich noch viele Parameter mehr aber das wäre dann schon für spezielle Anwendungsbereiche.

13. Windows Client Datei für die Verbindung mit OpenVPN Server

Die Datei müssen wir natürlich auch editieren und mit unseren Daten Füttern.
Wichtig ist dabei nur dass die Pfade der ca.crt, windowspc.crt und windowspc.key stimmen, die IP Eures VPN Servers eingetragen ist und Ihr den Verschlüsselungsmechanismus eintragt.
In der Zeile „remote“ bevorzuge ich persönlich eher Domain Namen. Da hat man weniger Probleme falls sich die IP mal ändern sollte.
# to load balance between the servers.
remote 192.168.0.1 1194
# 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 windowspc.crt
key windowspc.key
cipher AES-128-CBC

14. Anpassungen am OpenVPN Host Server

Damit das alles auch so funktioniert müssen noch Anpassungen am Host System vorgenommen werden.
In der “sysctl.conf” muss das IPv4-Forwarden aktiviert werden. Dazu das Semikolon vor “net.ipv4.ip_forward=1″ entfernen und die Datei speichern.
Die Datei liegt in /etc/
root@vpn:~# vi /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Nun müssen wir noch ein paar iptables Regeln anwenden.

Hinweis

Vor dem ausführen der Befehle mit „ifconfig“ die eigenen Einstellungen und Netzwerkkarten Namen herausfinden und in den Befehlen entsprechend anpassen!! sonst funktionieren die Regeln nicht!
Hat man seinene Netzwerkkarten Bezeichnung mittels „ifconfig“ herausgefunden, so muss man die einfach entsprechend in den Regeln ersetzen. Es kann also sein dass Ihr aus eth0 ein venet0 oder Ähnliches machen müsst.
Die Regeln, einzeln, einfach in die Konsole eingeben und Entern

iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Wichtig!
Bei den iptables Regeln unbedingt darauf achten, dass an den Stellen
state --state NEW -p udp - -dport 1194
eth0 -m state --state RELATED
tun+ -m state --state RELATED
Zwei – Striche vor state und dport sind. Manche Browser machen aus diesen 2 – Zeichen ein längeres — Zeichen
Danke Jakob, ohne das Gespräch mit dir wäre mir das selbst so nie aufgefallen.
Sollten bei diesen Befehlen keinerlei Fehler auftauchen, speichert diese in die „rc.local“ um die Befehle bei einem Restart des Server erneut auszuführen.
root@vpn:~# vi /etc/rc.local

# By default this script does nothing.
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Nun kann OpenVPN neugestartet werden. Dazu einfach den Befehl ausführen:
root@vpn:~# /etc/init.d/openvpn restart
Sollte dabei kein Fehler erscheinen kann mit der Client Konfiguration fortgefahren werden.
Erscheint bei Euch eine Fehlermeldung dann einfach die Schreibweise und Pfade in den Konfigurationen überprüfen, dort liegt oft der Fehler. Natürlich gebe ich gern Hilfe falls Ihr hängt.

15. OpenVPN Windows Client Einrichtung

In ein paar Schritten zuvor, habt Ihr euch ja 4 Dateien runter geladen.
ca.cert
windowspc.cert
windowspc.key
windowspc.conf
Mit diesen Dateien macht Ihr einfach an dieser Stelle hier weiter:
Windows VPN Einrichtung
Den Artikel schrieb ich schon vor einer ganzen Weile mal ist aber nach wie vor aktuell.

16. OpenVPN Linux Client einrichten

Als erstes muss auch hier die OpenVPN Software installiert werden
root@vpn-client:~# apt-get install openvpn
Die 4 Dateien die Ihr runtergeladen habt, einfach in den Ordner
/etc/openvpn
kopieren und dann openvpn mittels
root@vpn-client:~# openvpn --config windowspc.conf
neustarten.
Hinweis
Auch auf einem Linux Client muss entsprechend das TUN/TAP Device vorhanden sein!

17. OpenVPN unter OS X einrichten

Ladet euch die Software Tunnelblick herunter. Öffnet und installiert die heruntergeladene Datei dann bei euch so wie im Prinzip jedes andere Programm. Im Anschluss wird ein Abfragefenster angezeigt bei dem man auf “Open configuration folder” klickt. In das sich daraufhin öffnende Fenster kopiert man die 4 Dateien hinein. Jetzt Tunnelblick aus dem Programmordner heraus starten und eine Verbindung mit dem OpenVPN-Server herstellen.

18. OpenVPN Client unter iOS einrichten

Benennt die Datei “windowspc.conf” in “windowspc.ovpn” um.
Ladet euch die OpenVPN App für iOS auf euer iPhone, iPad oder iPod touch.
Startet dann die App und klickt rechts oben auf den Button “Help”. Ihr seht dann dort eine Vielzahl an Möglichkeiten eure OpenVPN-Verbindung damit einzurichten.
Mein persönlicher Favorit ist der: schließt euer iPhone, iPad oder iPod touch an euren PC/Mac an, startet iTunes, wählt euer Gerät unter “GERÄTE links im Menü aus, klickt dann auf “Apps”, scrollt runter zum Abschnitt “Dateifreigabe”, klickt die App “OpenVPN” an und dann rechts auf “Hinzufügen…” und wählt nun die 4 Dateien zum Hochladen in die App aus.
Nachdem ihr das gemacht habt startet ihr die OpenVPN App für iOS auf eurem iPhone, iPad oder iPod touch und richtet euch ein Profil mit diesen Dateien ein. Wenn ihr innerhalb der App dann den Schalter unterhalb von “Disconnected” umschaltet wird eine Verbindung zu eurem OpenVPN-Server hergestellt.

19. OpenVPN Client unter Android einrichten

Benennt die Datei “windowspc.conf” in “windowspc.ovpn” um.
Nun ladet Euch die OpenVPN App für Android auf das Android Gerät. Kopiert anschließend die 4 Dateien auf das Android Gerät und startet die OpenVPN App für Android. Klickt darin unten rechts auf das Ordnersymbol um die windowspc.ovpn Konfiguration für euren OpenVPN-Server auszuwählen. Im Anschluss werden einige Hinweise angezeigt die man in der Regel nicht zu beachten braucht es reicht dann auf das Diskettensymbol unten rechts zu klicken um den Import abzuschließen.
Im Hauptmenü sollte dann die Verbindung erscheinen die man mit einem Klick darauf starten kann.