|
Hier Suchen und Finden, Links, Tutorials Hier findet Ihr viele gut vorbereitete Lösungen |
|
Themen-Optionen | Bewertung: | Ansicht |
19.01.05, 23:35 | #1 | ||
Moderator
Registriert seit: Jul 2002
Ort: Berlin und München
Beiträge: 1.862
|
Deutsches OpenVPN howto
Deutsches OpenVPN Howto
Zitat:
Über OpenVPN gibt es mehr oder weniger gute Howto's, die hauptsächlich das Verschlüsseln mit Preshared-Keys erklären. Da manche so wie ich ein wenig Paranoid sind und das ganze sicherer haben wollen, wollte ich das ganze auch mit Zertifikaten gelöst haben. Bei Google war ein fertiges OpenVPN/SSL Howto so gut wie gar nicht zu finden. Auch das englischsprachige Howto brachte bei mir einige kleine Fehler und so habe ich mich entschlossen meinen Weg zu beschreiben und in Anlehnung an das Entwickler Howto. Damit das Howto Vollständiger wird werde ich trotz aller Beschreibungen auch nochmal OpenVPN mit Pre-Shared-Keys erklären. Neben Linux wird auch OpenVPN mit Windows beschrieben, da ein nicht unerheblicher Teil der Benutzer ein heterogenes Netzwerk verwenden. Was ist ein VPN Der Sinn eines VPN (Virtuelles Privates Netzwerk) ist die Herstellung eines vertraulichen und sicheren Netzwerks über öffentliche und unsichere Netzwerke wie z.B. das Internet. Das hierbei der Begriff „Privat” verwendet wird, heißt nicht, dass es unbedingt eine verschlüsselte Übertragung sein muß. Genauso kann einfach nur die Integrität der Daten gemeint sein. Bei einem VPN wird ein Tunnel zwischen VPN-Client und VPN-Server aufgebaut. Dabei gibt es verschiedene Möglichkeiten dies zu realisieren. Die am häufigsten genutzten Varianten ist die Lan-zu-LAN Verbindung (Site-to-Site) oder die des Netwarriors (End-to-Site), wobei sich meist ein Notebook Besitzer am VPN-Server der Firma anmeldet und so Zugriff auf seine Daten bekommt. Was ist OpenVPN? OpenVPN ist ein OpenSource Programm zur Herstellung eines VPN's. Es verwendet wahlweise UDP oder TCP als Protokoll und benutzt zur Verschlüsselung und Authentisierung Bibliotheken des Programmes OpenSSL. Je nach Anforderungen kann der Anwender zwischen verschiedene Authentisierungen wählen. Die Möglichkeiten sind Preshared-Keys, Zertifikate oder per Authentisierungs-Plugin. Preshared-Keys eignen sich für kleine VPN-Verbindungen, mit wenigen Teilnehmern, wenn es keine Rolle spielt, dass mehrere Teilnehmer den gleichen Schlüssel benutzen. Zertifikate sind eine wesentlich sichere Methode zur Authentisierung. Ein Client muß ein gültiges Zertifikat vorweisen, um sich am VPN-Server anzumelden. Mit Authentisierungs-Plugin's kann flexibel auf weitere oder zusätzliche Authentisierungsformen zurück gegriffen werden. Beispielsweise kann ein Benutzername und ein Passwort an einem RADIUS oder LDAP Server geprüft werden. Anmerkung: In diesem Howto werden nur PreShared-Keys und Zertifikate angesprochen! OpenVPN steht unter der GPL und ist für verschiedenste Betriebssysteme verfügbar. Darunter befinden sich z.B. Linux, Windows 2000/XP, Mac OSX, *BSD's und einige andere. OpenVPN im Detail OpenVPN benutzt den Client/Server Ansatz. Der OpenVPN Client initiiert eine Verbindung zum OpenVPN Server. Dabei wird das X.509 Zertifikat vom Server beim Client auf Echtheit überprüft. Die Prüfung erfolgt anhand des Public-Keys der ausgebenden CA (Certificate Authority). Wurde der Server auf Echtheit überprüft, dann wird die 1. Stufe der Client Authentisierung gestartet. Wenn die Authentisierung mit einem X.509 Client Zertifikat erfolgt, dann prüft der Server das vom Clienten übermittelte Zertifikat anhand des Public-Keys der ausgegeben Certificate Authority. Steht das Zertifikat nicht in der Certificate Revocation List (CRL) und es ist gültig, dann ist die 1. Stufe der Authentisierung abgeschlossen und die verschlüsselte Verbindung kann starten. Standardmäßig werden mit SSL/TLS die Session-Keys dynamisch ausgehandelt. Beim Up- und Downstream werden jeweils eigene Keys zum verschlüsseln und signieren verwendet. Bei Shared Keys ist die Authentisierung mit der Verschlüsselung verbunden. Wenn kein korrekter Schlüssel vorhanden ist, dann kann keine verschlüsselte Verbindung aufgebaut werden. Shared-Keys werden verwendet, um Aktienpakete zu verschlüsseln und zu signieren. Die private IP-Adresse bezieht der Client vom Server und bekommt die notwendigen Einstellungen bez. DNS, WINS über den Tunnel mitgeteilt. Als Endpunkte werden virtuelle Interfaces (TUN/TAP) verwendet. Damit alle Pakete durch den Tunnel geschickt werden, wird die Sprungtabelle manipuliert. Auf Seite des Servers wird die Kommunikation ebenfalls über ein virtuelles Interface abgehandelt. Die getunnelten IP-Pakete ausgepackt und anschließend mit Network Adress Translation (NAT) auf eine oder mehrere Adressen im lokalen Netz übersetzt. 1) Einleitung OpenVPN 2) Vorbereitungen für OpenVPN 3) Konfigurationsparameter für OpenVPN 4) Zertifikatserstellung 5) PreShared Keys 6) Bridging 04.04.2006 Erstellung des Howto: Deutsches OpenVPN Howto (Neufassung) Fragen zum Thema bitte nur im Forum stellen, ich gebe keinen Support außerhalb des Forums! Zitat:
Geändert von DaGrrr (02.02.08 um 09:52 Uhr) |
||
16.03.05, 21:34 | #2 |
Moderator
Registriert seit: Jul 2002
Ort: Berlin und München
Beiträge: 1.862
|
Vorbereitungen für OpenVPN (Linux)
Wenn ein Kernel selbst kompiliert werden soll, dann muß der Kernel entsprechend konfiguriert werden. OpenVPN benötigt zum funktionieren das TUN/TAP Device. Kernel 2.6.x Device Drivers -> Networking support ->[*] Universal TUN/TAP device driver support aktivieren und den Kernel neu kompilieren. Ein Howto wie man einen Kernel kompiliert gibt es hier: http://www.linuxforen.de/forums/showthread.php?t=161878 (Kernel 2.6) und http://www.linuxforen.de/forums/showthread.php?t=20583 (Allgemein) Bei Distributionskernel ist meist die TUN/TAP Unterstützung als Modul im Kernel bereits vorhanden und muß nur noch geladen werden. OpenVPN Software Das aktuelle OpenVPN bekommst du unter: http://openvpn.net/download.html Anmerkung: Falls es Problemen mit der kompilierung gibt, dann bekommst du im Linuxforen.de Forum Hilfestellung. OpenVPN braucht folgende libary's, damit ein kompilieren möglich (aus dem englischen Howto) ist: - OpenSSL library – notwendig für die Verschlüsselung http://www.openssl.org/ - LZO library – notwendig für die Link kompression http://www.oberhumer.com/opensource/lzo/ - Pthread libary Mehr Informationen über OpenSSL gibt es unter: http://www.pca.dfn.de/certify/ssl/ha...5/ossl095.html (Deutsch) und natürlich auf der Entwicklersite http://www.openssl.org/ (Englisch) Auspacken und Installation von OpenVPN (Linux) Code:
tar xzvf openvpn-2.0_Version.tar.gz cd openvpn_Version ./configure --prefix=/usr/local make make install Damit sollte eine erfolgreiche Installation von OpenVPN möglich sein. Für Distributionen, die OpenVPN als Binärpaket anbieten, können dieses Paket natürlich auch installieren. Unter Debian GNU/Linux reicht z.B. ein einfaches “apt-get install openvpn”, um OpenVPN zu installieren. Installation von OpenVPN unter Windows OpenVPN für Windows gibt es ebenfalls unter http://openvpn.net/download.html Die Installation unter Windows ist kein Problem, da ein Windows Installer ausgeführt wird, der OpenVPN automatisch installiert. Das TAP-Device wird unter Windows automatisch angelegt. Sollte dies nicht der Fall sein, so kann das im Installationsverzeichnis enthaltene Script ausgeführt werden, welches das TAP-Device anlegt. c:\Programme\OpenVPN\bin\ --> addtap.bat Bei Installation von OpenVPN unter Windows wird OpenSSL mit installiert, womit auch unter Windows SSL Zertifikate angefertigt werden können. Geändert von DaGrrr (04.04.06 um 14:35 Uhr) |
20.03.05, 00:21 | #3 |
Moderator
Registriert seit: Jul 2002
Ort: Berlin und München
Beiträge: 1.862
|
Konfigurationsparameter von OpenVPN
Erstellen der Konfigurationsdatei (Linux) Code:
touch /etc/openvpn/openvpn_ssl.conf Erstellen der Konfigurationsdatei (Windows) Mit einem Text Editor erstellen wir im Verzeichnis c:\Programme\Openvpn\config die Datei openvpn_ssl.ovpn Die Endung .ovpn ist wichtig, da sonst z.B. die Windows GUI die Konfigurationsdatei nicht findet. Ebenfalls ist es dann möglich per Rechtsklick auf die Konfigurationsdatei OpenVPN mit dieser Konfiguration zu starten. Weitere wichtige Dinge bei Windows in Bezug auf die Konfigurationsdatei sind die Pfadangaben. Die Pfadangaben für die erstellten Zertifikate werden lesbar für Windows eingetragen, das heißt mit doppeltem Backslash ( \\ ). Code:
ca c:\\Programme\\OpenVPN\\config\\ca.crt dh c:\\Programme\\OpenVPN\\config\\dh2048.pem cert c:\\Programme\\OpenVPN\\config\\server.crt key c:\\Programme\\OpenVPN\\config\\server.key Vorstellung der Optionen für eine Konfigurationsdatei dev tun Erstellt einen gerouteten IP Tunnel. Client und Server. dev tap Erstellt einen Ethernet Tunnel und wird für Bridging gebraucht. Client und Server. dev-node bridgename Windows braucht den TAP-Win32 Namen, welcher unter Netzwerkverbindungen einsehbar ist, wenn mehr als ein TAP Adapter vorhanden ist. Linux braucht den Parameter dev-node nicht. Server und Client. proto udp proto tcp Welches Protokoll soll verwendet werden, TCP oder UDP? Standard ist UDP und sollte auch verwendet werden, da es mit TCP zu Problemen kommen kann. Wenn angegeben, dann in der Server und Client Konfiguration eintragen. port Portnummer Die Portangabe. Standard ist 1194. Wenn angegeben, dann in der Server und Client Konfiguration eintragen. remote IP-Addresse Diese Option wird für den Client benutzt, damit dieser weiß wohin er sich verbinden muß. Die IP-Adresse kann auch ein DynDNS Name sein. Möglich ist auch mehrere Angaben von remote, um z.B. bei Ausfall eines VPN Servers einen Ersatz Server zu nehmen. Beispiele: remote 192.168.1.5 oder remote myhome.dyndns.org. Nur Client. nobind Verhindert eine feste Bindung zu einer lokalen Adresse und einem lokalen Port. Diese Option ist nützlich für Rechner, die eine neue Verbindung mit der remote Option aufbauen. Nur Client. ifconfig A B Setzt die TUN/TAP Adapter-Parameter. „A“ ist die IP-Adresse des lokalen VPN-Endpunktes. Für unter TUN betriebene Geräte ist „B“ die IP-Adresse des entfernten TUN-Endpunktes, während bei den unter TAP betriebenen Geräten „B“ die Subnetz-Maske des virtuellen Ethernet-Segmentes darstellt, das ins Leben gerufen oder zu dem eine Verbindung aufgebaut werden soll. Für unter TUN betriebene Geräte, die virtuelle point-to-point IP-Verbindungen ermöglichen, besteht die richtige Benutzung von ifconfig darin, zwei für sich stehende IP-Adressen anzugeben, die nicht zu einem derzeit ans System angeschlossenen Subnetz gehören. Die IP-Adressen können nacheinander nummeriert sein und sollten in einer Reihenfolge angegeben werden, die umgekehrt zu den Einträgen auf dem entfernten Rechner verhält. Nachdem das VPN eingerichtet ist, kann man durch den Ping-Aufruf mit „B“ durch das VPN senden. Für TAP-Geräte, die dafür vorgesehen sind, virtuelle Netzwerk-Segmente in einem Ethernet bereitzustellen, wird ifconfig dazu benutzt, eine IP-Adresse und eine Subnetz-Maske so einzugeben, wie sie auch bei der Installation eines physikalischen Ethernet-Adapters angegeben werden. Bei einem Verbindungsaufbau zu einer entfernten Ethernet-Brücke muss sichergestellt werden, dass das die angegebene IP-Adresse und die Subnetz-Parameter auf Werte gesetzt werden, die vom anzuschließenden fernen Ethernet sinnvoll interpretiert werden können. (Für diesen Zweck kann auch DHCP verwendet werden.) Bei Benutzung einer unter TAP definierten Schnittstelle sollte ifconfig nicht benutzt werden wenn die Schnittstelle ihre IP-Adresse von einem DHCP-Server zugewiesen bekommt. Client und Server. tls-server Mit „tls-server“ wird festgelegt, wer bei der Authentisierung der Server ist, notwendig wenn Zertifikate verwendet. Nur Server. tls-client Mit „tls-client“ wird festgelegt, wer bei der Authentisierung der Client ist, notwendig wenn Zertifikate verwendet. Nur Client. dh Dieffie-Hellman Parameter dh gibt den Dieffie-Hellman Parametet an und kommt bei Zertifikaten zur Anwendung. Als Beispiel: dh /Pfad/zum/Zertifikat/dh2048.pem. Nur Server. ca CA-Certifikat ca ist das Authentifikationszertifikat, welches jeweils in der Server- und Client Konfiguration angegeben werden muß, wenn Zertifikate verwendet werden. Beispiel: ca /Pfad/zum/Zertifikat/ca.crt cert Publickey Angabe des Publickey's, welches in der Server- und Client Konfiguration angegeben werden muß, wenn Zertifikate verwendet werden. Beispiel: cert /Pfad/zum/Zertifikat/server.crt key Privatkey Angabe des Privatkey's, welches in der Server- und Client Konfiguration angegeben werden muß, wenn Zertifikate verwendet werden. Beispiel: key /Pfad/zum/Zertifikat/server.key ifconfig-pool-persist ipp.txt Enthält eine Liste mit den vergebenen IP-Adressen. Falls OpenVPN abstürzt oder eine Downtime hat, können die gleichen Client Adressen vergeben werden, wie vor der Downtime. Jeder Client behält also seine zuvor zugewiesene IP-Adresse. Nur Server. server Netzwerkadresse Netzwerkmaske Diese Option konfiguriert den Server in den Servermodus. Im Servermodus wird OpenVPN auf einem einzigen Port auf eingehende Verbindungen warten. Alle Client Verbindungen werden durch eine einzige TUN- TAP-Schnittstelle geleitet. Preshared-Keys können nicht verwendet werden, da der Servermodus nur mit der SSL/TLS-Authentifikation funktioniert. Wenn Bridging verwendet wird, sollte „server-bridge“ benutzt werden, um den Server Modus zu aktivieren. Nur Server. Als Beispiel hier die Darstellung für --server 10.8.0.0 255.255.255.0 und was die hier beschriebene Unterstützung daraus macht: mode server tls-server if dev tun: ifconfig 10.8.0.1 10.8.0.2 ifconfig-pool 10.8.0.4 10.8.0.251 route 10.8.0.0 255.255.255.0 if client-to-client: push "route 10.8.0.0 255.255.255.0" else push "route 10.8.0.1" if dev tap: ifconfig 10.8.0.1 255.255.255.0 ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 push "route-gateway 10.8.0.1" server-bridge gateway netmask IP-Start-Bereich IP-End-Bereich Wenn Bridging (TAP Device) verwendet wird, dann diese Zeile eintragen und die Option „server“ entfernen oder muß kommentiert ( werden. Die Parameter „gateway“ und netmask für „server-bridge“ können entweder auf die Werte der IP/Netzmaske der Bückenschnittstelle gesetzt werden, oder auf die IP/Netzmaske des "gebrückten“ Subnetzes. Als Letztes muss ein Bereich von IP-Adressen im "gebrückten“ Subnetz reserviert werden, der mit IP-Start-Bereich bis IP-End-Bereich definiert wird, damit OpenVPN die Möglichkeit hat, diese Adressen den Clients zuzuordnen, die sich zum OpenVPN-Server verbinden wollen. Nur Server. Beispiel: Der Server bekommt die IP 192.168.1.1, die verwendete Subnetzmaske 255.255.255.0 und der IP Pool für die Clients von 192.168.1.100 bis 192.168.1.110. „server-bridge 192.168.1.0 255.255.255.0 192.168.1.100 192.168.1.110“ interpretiert folgendes bzw. ist damit gleich zu setzen: mode server tls-server ifconfig-pool 192.168.1.100 192.168.1.110 255.255.255.0 push "route-gateway 192.168.1.0" push „Optionen“ push schickt dem Clienten Optionen die verwendet werden sollen. Das könnte eine Route sein, damit der Client weiß wie er das Netzwerk hinter dem OpenVPN Server erreicht. Beispiel: push „route 192.168.10.0 255.255.255.0“ Es könnten aber auch DHCP, Gateway Optionen sein, z.B. push „dhcp-option DNS 192.168.1.1“ wird für Windows spezifische Netzwerk Einstellungen verwendet oder push „redirect-gateway“ konfiguriert alle Clients, dass sämtlicher Verkehr durch das VPN geht. Das heißt surfen, E-Mails abrufen etc. wird durch das VPN geroutet und die Anfrage geht von dort ins Internet. Nur Server. pull Wenn push beim Server verwendet wird, braucht der Client die pull Option. Nur Client. client-to-client Mit dieser Option können sich die Clienten untereinander sehen. Normalerweise sieht ein Client nur den Server, was auch die Default Einstellung ist. client-to-client funktioniert nur wenn die Option „server“ gesetzt wurde. Nur Server. cipher Algorithmus Mit der Angabe Cipher wird bestimmt, welcher Verschlüsselungsalgorithmus verwendet werden soll, wenn Zertifikate benutzt werden. Default ist Blowfish, wenn keine Angabe erfolgt. Es gibt weitere Algorithmen z.B. AES oder Triple-DES. Client und Server. Beispiele: cipher BF-CBC cipher AES-128-CBC cipher AES-256-CBC cipher DES-EDE3-CBC secret /Pfad/zur/Datei Diese Option setzt den Statischen-Schlüssel-Verschlüsselungsmodus, wenn z.B. keine Zertifikate verwendet werden sollen. Die vorher mit dem Befehl „openvpn --genkey Dateiname“ erstellte Datei mit dem PreShared-Key. Der Schlüssel muß auf dem Server und Client gleich sein. Ist der Schlüssel auf dem Server erstellt worden, dann wird diese Datei über eine sichere Verbindung z.B. SSH an den Client geschickt. Server und Client. log openvpn.log log-append openvpn.log Per default wird mit syslog (Linux) und bei Windows nach c:\Programme\OpenVPN\log geloggt. Beide Varianten übergehen die default Einstellung und man kann eine andere Datei angeben. „log openvpn.log“ überschreibt bisherige Einträge, während „log-append openvpn.log“ neue Eintrage z.B. nach einem Neustart von OpenVPN neue Einträge an das Ende der bisherigen Datei anhängt. Client und Server. user nobody group nogroup Erhöht die Sicherheit von OpenVPN, weil nach Inbetriebnahme der OpenVPN-Prozess dem user nobody und der Gruppe nogroup gehört und nicht mehr root. Nur für nicht Windows Rechner! Client und Server. status /Pfad/zur/Datei/openvpn-status.log Erstellt die Datei openvpn-staus.log im angebenen Verzeichnis und erlaubt das Anzeigen von momentanen Verbindungen Beispiel: status /etc/openvpn/openvpn-status.log. Nur Server. comp-lzo Wenn OpenVPN mit LZO-Kompression kompiliert wurde, dann kann diese Option eingetragen werden. Komprimiert die Daten. Server und Client verb Level Verbosity Level zur Detail Angabe von Meldungen die OpenVPN anzeigt. Bereich 0-11. 0 – keine Ausgabe, außer Fehlermeldungen 1-4 – normale Ausgaben 5- bei Aktivitäten werden die Buchstaben „R“ und „W“ ausgegeben, klein für TCP/UDP Pakete und GROSS für TUN/TAP Pakete 6-11 – Ausführliches Debuging Beispiel: verb 3 up Kommando Ist ein Befehlszeilenkommando, dass nach erfolgreicher Installation eines TUN/TAP-Gerätes durchgeführt wird. Mit „up“ kann ein Script gestartet werden, um z.B. Routing-Kommandos zu spezifizieren. Server und Client. Beispiel: up ./server.up. In diesem Script könnte z.B. stehen: #!/bin/bash route add -net 10.0.1.0 netmask 255.255.255.0 gw $5 keepalive n m Diese Hilfansweisung wird benutzt, um die Befehle „ping“ und „ping-restart“ in der Serverkonfiguration zu vereinfachen. Der Befehl „keepalive 10 60“ neinhaltet folgende Anweisungen: if mode server: Wenn Server-Modus: ping 10 ping 10 ping-restart 120 ping neustart 120 push „ping 10“ führe aus „ping 10” push „ping-restart 60” führe aus „ping-neustart 60” else im anderen Fall (kein Server-Modus) ping 10 ping 10 ping-restart 60 ping-neustart 60 Geändert von DaGrrr (04.04.06 um 14:49 Uhr) |
15.07.05, 15:12 | #4 |
Moderator
Registriert seit: Jul 2002
Ort: Berlin und München
Beiträge: 1.862
|
Zertifikatserstellung
Unter Linux gibt es viele Möglichkeiten Zertifikate zu erstellen. Ich stelle hier in diesem Howto die manelle und easy-rsa script Möglichkeit vor. Unter Windows ist es ebenfalls möglich Zertifikate zu erstellen und ich möchte dies ebenfalls aufzeigen, wie dies unter Windows funktioniert anhand der easy-rsa Scripte. Im Anschluß der Zertifikatserstellung folgen Beispiele für die Konfiguration. Zertifikatserstellung mit easy-rsa Wir erstellen Zertifikate mit den easy-rsa Scripten aus dem OpenVPN-Paket. Ich werde hier die Vorgehensweise für Linux und Windows darstellen. Die Beschreibung lehnt sich stark an die Original-Dokumentation von OpenVPN an und kann als Übersetzung ins Deutsche verstanden werden, mit Kommentaren und Erweiterungen von mir. Als erstes kopieren wir das easy-rsa Verzeichnis in unser /etc/openvpn Verzeichnis, was zur besseren Übersicht dient. Wir wechseln danach in das Verzeichnis /etc/openvpn/easy-rsa. Unter Windows wechseln wir in der Command-Shell (cmd.exe) das Verzeichnis nach c:\Programme\OpenVPN\easy-rsa. Anmerkung für Windows: Wir führen init-config.bat aus, dabei werden existierende vars.bat und openssl.cnf Dateien überschrieben. Anmerkung für Linux: Eventuell muß die enthaltene OpenSSL Konfigurationsdatei opennssl.cnf entpackt werden, da sonst die Datei nicht gefunden wird. Code:
init-config.bat KEY_COUNTRY=DE KEY_PROVINCE=Bezirk KEY_CITY=Berlin KEY_ORG=IT-Abteilung KEY_MAIL=holgi@domain.de Dabei sollte keine dieser Variablen leer bleiben. Wer Paranoid ist, kann auch den Wert „KEY_SIZE=1024“ höher setzen, z.B. auf 2048 oder 4096. Wir erstellen nun in dem kommenden Abschnitt die Zertifikate und Schlüssel für die Root-CA, den Server und den oder die Clients. Wir führen nun folgende Befehle aus: Code:
Linux . ./vars ./clean-all ./build-ca Code:
Windows vars.bat clean-all.bat build-ca.bat Nun kann man entsprechende Werte setzen aber da wir die Variablen bereits in der Datei vars (Linux) / vars.bat (Windows) gesetzt haben, brauchen wir nur noch mit der Return-Taste bestätigen. Achtung: Der einzige Wert den wir explizit setzen müssen ist der „Common Name“. Der Common Name muß einzigartig sein und darf in keinem anderen Zertifikat vorkommen. Ich habe für das Root-CA Zertifikat „OpenVPN-CA“ gewählt. Erstellung des Zertifikats und des Schlüssels für den OpenVPN Server Code:
Linux ./build-key-server server Code:
Windows build-key-server.bat server Achtung: Auch hier muß ein „Common Name“ per Hand eingetragen werden und wie schon gesagt muß der Name einzigartig sein. Ich habe als Common Name „Vpn-Server“ gewählt. Nach Ausführung müssen wir noch 2x mit [y] (Ja) bestätigen. Erstellung der Zertifikate und Schlüssel für den/die Clients Code:
Linux ./build-key client1 Code:
Windows build-key.bat client1 Code:
Linux ./build-key-pass client1 Code:
Windows build-key-pass.bat client1 Denk daran, dass der „Common Name“ für jedes Zertifikat anders lauten muß. Ich habe als Common Name „client1“ ausgewählt. Für weitere Clients könnte man das fortführen und als Common Name client2, client3 usw. nutzen. Wieder bestätigen wir 2x mit [y] (Ja). Generieren des Diffie Hellman Parameters Der Diffie Hellman Parameter wird für den OpenVPN Server erstellt und verbleibt auf diesem. WindowsLinux build-dh.bat ./build-dh Die Erstellung von DH kann eine weile dauern. Die Geschwindigkeit ist abhängig von der CPU-Leistung und der gewählten Bitlänge. Je höher die Bitlänge, um so länger dauert die Erstellung. Zugehörigkeit unser neu erstellten Zertifikate und Schlüssel http://www.linux-technik.de/downloads/links/zert.png Der nächste Schritt ist, die erstellten Schlüssel und Zertifikate an den entsprechenden Ort zu kopieren. Auf entfernte PCs sollte man fürs kopieren eine sichere Übertragungsart wählen. Entweder manuell z.B. per Usb-Stick (falls möglich) oder per SSH. Manuelle Erstellung der Zertifikate unter Linux Anmerkung: Ich habe in der Konfigurationsdatei für OpenSSL einige Pfadangaben geändert. Im Anhang füge ich die bearbeitete openssl.cnf bei. Es sollte zur Vermeidung von eventuellen Problemen meine openssl.cnf verwendet werden. Wir erstellen erstmal ein Arbeitsverzeichnis indem wir alle weiteren Schritte durchführen werden. Code:
mkdir /etc/openvpn/zertifikate Code:
cd /etc/openvpn/zertifikate Die Datei CA.pl befindet sich bei Debian unter /usr/lib/ssl/misc/CA.pl. Code:
cp /usr/lib/ssl/misc/CA.pl /etc/openvpn/zertifikate Code:
locate CA.pl oder Code:
find / -name CA.pl Nun erstellen wir die Datei “serial“ Code:
touch serial Code:
01 Als letztes erstellen wir uns eine index.txt die leer bleibt. Code:
touch index.txt Code:
export OPENSSL_CONF=/etc/openvpn/zertifikate/openssl.cnf Bevor wir nun anfangen, können wir noch die openssl.cnf nach unseren wünschen verändern zb können wir den Standard Wert von 1024Bit auf 2048Bit setzen. Für ganz Paranoide ist wohl auch 4096Bit möglich, was ich aber nicht getestet habe. Ist die openssl.cnf editiert (kein muss) können wir uns nun an die Erstellung der Zertifikate wenden: Erstellung der CA: Code:
./CA.pl -newca Master Zertifikat: Code:
openssl req -days 3650 -nodes -new -x509 -keyout ca.key -out ca.crt Code:
openssl dhparam -out dh2048.pem 2048 Zertifikat für Server: Code:
openssl req -days 3650 -nodes -new -keyout server.key -out server.csr openssl ca -days 3650 -out server.crt -in server.csr Code:
openssl req -days 3650 -nodes -new -keyout client1.key -out client1.csr openssl ca -days 3650 -out client1.crt -in client1.csr Der Common Name muss immer verschieden sein, ansonsten gibt es ein Database Error! Immer alle *.old files löschen nach dem erstellen von Zertifikaten. Nun können wir die Dateien client1.crt, client1.key und ca.crt über einen sicheren Weg z.B. SSH auf den Clienten übertragen. Die Zertifikate für den Server kommen auf dem OpenVPN Server. Beispiel Konfigurationen Routing: Wenn geroutet werden soll, was bei Verwendung des TUN-Adapters ja notwendig ist, dann muß Routing bei dem Linux Rechnern aktiviert werden. Bei Verwendung von iptables-Paketfilter muß entsprechend eine weitere Regel hinzugefügt werden. Das Routing aktivieren: Code:
echo 1 > /proc/sys/net/ipv4/ip_forward Code:
iptables -A FORWARD -i tun+ -j ACCEPT Ausgangslage für Beispiel 1) und 2) OpenVPN Server: Netzwerk Home: 192.168.1.1/24, VPN Adresse: 10.1.0.1 OpenVPN Client: Netzwerk Home; 192.168.1.1/24, VPN Adresse; 10.1.0.2 1) Einfacher OpenVPN Tunnel mit Zertifikaten, 1 Server, 1 Client (Linux) Server: Code:
dev tun proto udp port 1194 ifconfig 10.1.0.1 10.1.0.2 tls-server dh /etc/openvpn/zertifikate/dh2048.pem ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/server.crt key /etc/openvpn/zertifikate/server.key user nobody group nogroup status /etc/openvpn/openvpn-status.log comp-lzo verb 3 Client: Code:
dev tun remote 192.168.1.1 ifconfig 10.1.0.2 10.1.0.1 tls-client ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/client1.crt key /etc/openvpn/zertifikate/client1.key port 1194 user nobody group nogroup comp-lzo verb 3 2) OpenVPN Tunnel mit Zertifikaten, Routing, 1 Server, x Client's (Linux) In der ersten Beispielkonfiguration konnte nur ein Client mit dem VPN Server eine Verbindung aufbauen. Des Weiteren war kein Zugriff auf hinter dem OpenVPN Server liegendem Netzwerk möglich, da keine Routing Optionen gesetzt wurden. In der folgenden Konfiguration wird der OpenVPN Server als DHCP Server dienen, sprich den Clienten eine IP Adresse zuweisen. Damit das funktioniert, muß das Routing stimmen. Außerdem ersetzen wir den Verschlüsselungsalgorithmus „Blowfish“ durch AES mit 256Bit. Server: Code:
dev tun proto udp port 1194 server 192.168.1.0 255.255.255.0 mode server ifconfig-pool-persist /etc/openvpn/ipp.txt tls-server dh /etc/openvpn/zertifikate/dh2048.pem ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/server.crt key /etc/openvpn/zertifikate/server.key push „route 192.168.1.0 255.255.255.0“ cipher AES-256-CBC user nobody # Nur Linux group nogroup # Nur Linux status /etc/openvpn/openvpn-status.log comp-lzo verb 3 Für weitere Clients, brauchen wir natürlich weitere Client Zertifikate, die wir vorher erstellt haben. Code:
dev tun remote 192.168.1.1 tls-client ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/client1.crt key /etc/openvpn/zertifikate/client1.key pull port 1194 cipher AES-256-CBC user nobody # Nur Linux group nogroup # Nur Linux comp-lzo verb 3 3) OpenVPN Tunnel mit Zertifikaten, Site-to-Site, 2 Server (Linux) Ausgangslage für Beispiel 3) OpenVPN Server1: Netzwerk Home: 192.168.1.1/24, VPN Adresse: 10.1.0.1, DnyDNS Name: berlin.dyndns.org OpenVPN Server2: Netzwerk Home; 192.168.3.1/24, VPN Adresse; 10.1.0.2 In diesem Konfigurations Beispiel soll eine Site-to-Site dargestellt werden. Es werden sozusagen 2 Firmenstandorte miteinander verbunden. Das heißt, es gibt keine Clients in dem Sinne wie in den anderen Beispielen, wo z.B. ein Roadwarrior, also von unterwegs per Notebook auf das Netzwerk zugegriffen werden soll. Es soll aber jeder Client das andere Netzwerk erreichen können. Damit das klappt, muß das Routing auf beiden Seiten modifiziert werden. Des Weiteren muß einer der OpenVPN Server als Server konfiguriert und der andere als Client konfiguriert werden. Server: Code:
dev tun proto udp port 1194 ifconfig 10.1.0.1 10.1.0.2 tls-server dh /etc/openvpn/zertifikate/dh2048.pem ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/server.crt key /etc/openvpn/zertifikate/server.key up ./server1.up cipher AES-256-CBC user nobody # Nur Linux group nogroup # Nur Linux status /etc/openvpn/openvpn-status.log comp-lzo verb 5 Code:
touch server1.up && chmod +x server1.up Code:
#!/bin/bash route add -net 192.168.3.0 netmask 255.255.255.0 gw 10.1.0.2 Code:
route add 192.168.3.0 mask 255.255.255.0 10.1.0.2 metric 1 -p Server 2: Code:
dev tun remote berlin.dyndns.org ifconfig 10.1.0.2 10.1.0.1 tls-client ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/server2.crt key /etc/openvpn/zertifikate/server2.key up ./tunnel.up port 1194 cipher AES-256-CBC user nobody # Nur Linux group nogroup # Nur Linux comp-lzo verb 5 Code:
touch server2.up && chmod +x server2.up Code:
#!/bin/bash route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.1.0.1 Code:
route add 192.168.1.0 mask 255.255.255.0 10.1.0.1 metric 1 -p Geändert von DaGrrr (04.04.06 um 19:48 Uhr) |
15.07.05, 15:15 | #5 |
Moderator
Registriert seit: Jul 2002
Ort: Berlin und München
Beiträge: 1.862
|
Konfiguration von OpenVPN mit Pre-Shared Keys
Als Ausgangsbasis benutzen wir unser Arbeitsverzeichnis /etc/openvpn (Linux) oder c:\Programme\OpenVPN\config (Windows). Für die Konfiguration mit Preshared Keys ist weniger Arbeit notwendig, als mit Zertifikaten und es ist einfacher bzw. Fehler lassen sich schneller finden. Wir wechseln in unser Arbeitsverzeichnis, wo wir später unsere Konfigurationsdatei anlegen werden. Unter Windows können wir den Befehl zur Key Erstellung genauso verwenden wie unter Linux, da die Syntax gleich ist. Wir erstellen jetzt einen Key mit dem unser VPN Tunnel später verschlüsselt wird: Code:
openvpn --genkey --secret geheim.key Der Schlüsselaustausch sollte über ein sicheres Medium wie z.B. per SSH ausgetauscht werden! Hat ein fremder diesen Schlüssel so kann er den VPN Tunnel knacken! Beispiel Konfigurationen Ausgangslage OpenVPN Server: Netzwerk Home: 192.168.1.1/24, VPN Adresse: 10.1.0.1 OpenVPN Client: Netzwerk Home; 192.168.2.10/24, VPN Adresse; 10.1.0.2 Server: Code:
dev tun ifconfig 10.1.0.1 10.1.0.2 up /etc/openvpn/server.up secret /etc/openvpn/geheim.key # Geheimer Schlüssel port 1194 user nobody # Nur Linux group nobody # Nur Linux comp-lzo Verbosity level verb 3 Code:
touch server.up && chmod +x server.up Code:
#!/bin/bash route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.1.0.2 Code:
route add 192.168.2.0 mask 255.255.255.0 10.1.0.2 metric 1 -p Client: Code:
dev tun remote 192.168.1.1 ifconfig 10.1.0.2 10.1.0.1 up etc/openvpn/client1.up secret /etc/openvpn/geheim.key # Geheimer Schlüssel port 1194 user nobody # Nur Linux group nobody # Nur Linux comp-lzo verb 3 Code:
touch client1.up && chmod +x client1.up Code:
#!/bin/bash route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.1.0.1 Code:
route add 192.168.1.0 mask 255.255.255.0 10.1.0.1 metric 1 -p Auf beiden Seiten starten wir nun unser VPN mit folgendem Befehl Code:
openvpn --config /pfad/zur/openvpn.conf Wir testen die Verbindung auf dem Clienten mit Code:
ping 10.1.0.1 Geändert von DaGrrr (04.04.06 um 15:36 Uhr) |
04.04.06, 18:47 | #6 |
Moderator
Registriert seit: Jul 2002
Ort: Berlin und München
Beiträge: 1.862
|
Unterschiede zwischen TUN und dem TAP Device
Bisher haben wir nur mit dem TUN-Adapter gearbeitet. Da nun Ethernet Bridging behandelt wird, sollte nun auch der Unterschied zwischen TUN- und TAP Adapter erklärt werden. Ein TAP Device ist ein virtueller Ethernet Adapter, während das TUN Device eine virtuelle Point-to-Point IP Verbindung ist. Vielleicht etwas genauer gesagt: TAP überträgt Ethernetframes (Layer 2) Layer 2 Protokolle z.B. NETBUI, DHCP, Broadcasts können so über das VPN transportiert werden. Applikationen, die diese Protokolle brauchen, können so völlig transparent über das VPN benutzt werden. TUN überträgt IP-Pakete (Layer 3) Layer 3 oder auch Vermittlungsschicht genannt, beschäftigt sich mit der Steuerung des Subnetz-Betriebes. Die wichtigste Aufgabe ist die Bestimmung von Paketleitwegen vom Ursprungs- zum Bestimmungsort (Routing). Man kann beide Devices nicht mixen, z.B. TUN auf dem Server und TAP auf dem Client. Was ist Bridging? Bridging ist eine Technik für das Erstellen eines virtuellen Wide-Area Ethernet LAN, welches in einem einzigen Subnetz läuft. Kurz gesagt können mit Bridging zwei oder mehr getrennte Subnetze logisch in eines verschmelzen, als ob sie ein einzelnes Subnetz wären. Als Beispiel kann hier gesagt werden, dass es mit Bridging möglich ist, dass SMB Protokoll ohne Probleme nutzen zu können. Um Bridging mit OpenVPN verwenden zu können, muß das TAP Device verwendet werden. Wichtiger Hinweis zum Site-to-Site Bridging: Wenn kein Router verwendet wird, dann darf auch nicht die Netzwerkkarte überbrückt werden die mit dem DSL Modem verbunden ist, weil diese Netzwerkkarte eine IP-Adresse vom Internet Service Provider (ISP) bekommt. Sollte keine weitere Netzwerkkarte in dem Rechner installiert sein, dann wird auch kein Bridging benötigt, weil kein Netzwerk an diesem PC angeschlossen ist. Wenn eine zweite Netzwerkkarte vorhanden ist, und an dieser ein Netzwerk angeschlossen wurde, dann muß diese mit dem TAP-Adapter gebridged werden. Bridging konfigurieren Anhand folgendem Beispiels, wird ein OpenVPN Server-Side Ethernet Bridge erstellt. Mehrere Clients können so zur Bridge Verbindung aufnehmen und jedem Client-TAP-Device wird eine IP-Adresse zugeteilt. Es gibt zwei Methoden für die IP Zuweisung: 1)OpenVPN verwaltet seinen eigenen Client IP Pool 2)Konfigurieren eines DHCP Servers im LAN Bei diesem Beispiel benutzen wir die erste Methode. Der OpenVPN Server verwaltet also seinen eigenen IP-Address-Pool. Folgende Bridge Einstellungen werden wir hier verwenden: Ethernet Interface -- eth -- eth0 Lokale IP-Addresse -- eth_ip -- 192.168.1.1 Lokale Netzwerkmakse -- eth_netmask -- 255.255.255.0 Lokale Broadcast Addresse -- eth_broadcast -- 192.168.1.255 VPN Client IP-Address Pool -- 192.168.1.100-192.168.1.110 Virtueles Bridge Interface -- br -- br0 Virtuelles TAP Interface -- tap -- tap0 Bridge Server mit Linux Damit Bridging benutzt werden kann, muß als erstes das „bridge-util“ Paket installiert werden. Danach werden wir im folgenden Script unsere Werte aus der Tabelle einfügen. Gesetzt werden müssen: br, tap, eth, eth_ip, eth_netmask und eth_broadcast Code:
#!/bin/bash ################################# # Erstellt eine Netzwerkbrücke unter Linux # Benötigt: bridge-utils ################################# # Definiert den Bridge Adapter br="br0" # Definiert eine Liste von TAP Adaptern,die gebridged werden sollen, # Beispiel tap="tap0 tap1 tap2". tap="tap0" # Definiert den physischen Ethernet Adapter der gebridged werden soll, # mit dem TAP Adapter, siehe oben. eth="eth0" eth_ip="192.168.1.1“ eth_netmask="255.255.255.0" eth_broadcast="192.168.1.255" for t in $tap; do openvpn --mktun --dev $t done brctl addbr $br brctl addif $br $eth for t in $tap; do brctl addif $br $t done for t in $tap; do ifconfig $t 0.0.0.0 promisc up done ifconfig $eth 0.0.0.0 promisc up ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast Zum stoppen des Bridging Modus, können wir folgendes Script verwenden: Code:
#!/bin/bash #################################### # Herunterfahren der Ethernet Bridge unter Linux #################################### # Definiert den Bridge Adapter br="br0" # Definiert eine Liste von TAP Adaptern die vorher gebridged wurden. tap="tap0" ifconfig $br down brctl delbr $br for t in $tap; do openvpn --rmtun --dev $t done Danach starten wir das Script mit „sh startbridge.sh“ . Das Script kreiert ein festes tap0 Interface und „bridgt“ es es mit unserem Ethernet Interface (eth0). Nun müssen wir noch unsere OpenVPN Konfiguration (Server) bearbeiten, damit OpenVPN die Bridge benutzen kann. Wir ersetzen in der Konfiguration Code:
dev tun Code:
dev tap0 Des Weiteren ersetzen oder löschen folgende Zeile mit der Option „server“ (falls vorhanden) Code:
server IP-Adresse Netzwerkmaske Code:
server-bridge 192.168.1.1 255.255.255.0 192.168.1.100 192.168.1.110 Wir setzen folgende zusätzliche iptables Regeln, die es erlauben, dass die Pakete durch unsere neu erstellten tap0 und br0 Interfaces geleitet werden. Code:
iptables -A INPUT -i tap0 -j ACCEPT iptables -A INPUT -i br0 -j ACCEPT iptables -A FORWARD -i br0 -j ACCEPT 1)sh startbridge.sh 2)OpenVPN starten z.B. mit openvpn --config openvpn.conf 3)Openvpn stoppen 4)sh stopbridge.sh Bridge Server mit Windows XP Bridging unter Windows 2000 ist als „Server“ nicht möglich, da es nicht unterstützt wird. Daher benutzen wir Windows XP oder höher als Server. Allerdings kann Windows 2000 als Bridging Client eingesetzt werden. Wenn OpenVPN unter Windows installiert wurde, wird ein virtueller TAP-Win32 Adapter mit dem Namen „Lan-Verbindung X“ kreiert. X ist eine Zahl und bezeichnet das X'te Netzwerkadapter. Als erstes benennen wir Lan-Verbindung X in „tap-bridge“ um. Als zweiten Schritt klicken wir mit der rechten Maustaste auf „tap-bridge“ und wählen „Verbindungen überbrücken“ . Das wird ein neues Bridge Device erstellen unter Netzwerkverbindungen. Das ganze stelle ich hier als Screenshots vor: (Die Namen der Adapter unterscheiden sich von den hier dargestellten Bildern!) http://www.linux-technik.de/downloads/links/1.jpg http://www.linux-technik.de/downloads/links/2.jpg http://www.linux-technik.de/downloads/links/3.jpg http://www.linux-technik.de/downloads/links/4.jpg http://www.linux-technik.de/downloads/links/5.jpg Unter TCP/IP Eigenschaften setzen wir die IP 192.168.1.1 und eine Subnetzmaske 255.255.255.0. In unserer OpenVPN Konfiguration „openvpn.ovpn“ ersetzen wir Code:
dev tun Code:
dev tap dev-node tap-bridge Weiterhin schreiben in der Serverkonfiguration folgendes rein: Code:
server-bridge 192.168.1.1 255.255.255.0 192.168.1.100 192.168.1.110 Bridge Client Konfiguration In der Client Konfigurationsdatei (Windows / Linux) ist es notwendig „dev tun“ durch „dev tap“ zu setzen. Das ist alles. Beispiel Konfigurationen Ausgangslage OpenVPN Server: Netzwerk Home: 192.168.1.1/24, bekommt VPN Adresse: 10.1.0.1 OpenVPN Clients: Netzwerk Home; 192.168.1.2-192.168.1.12/24, bekommt VPN Adresse; 10.1.0.10-10.1.0.20 1) Bridge OpenVPN Tunnel mit Zertifikaten, 1 Server, 10 Client's (Linux) Server: Code:
dev tap proto udp port 1194 server-bridge 10.1.0.0 255.255.255.0 10.1.10 10.1.20 tls-server dh /etc/openvpn/zertifikate/dh2048.pem ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/server.crt key /etc/openvpn/zertifikate/server.key user nobody # Nur Linux group nogroup # Nur Linux status /etc/openvpn/openvpn-status.log comp-lzo verb 3 Code:
dev tap remote 192.168.1.1 tls-client ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/client1.crt key /etc/openvpn/zertifikate/client1.key port 1194 user nobody # Nur Linux group nogroup # Nur Linux comp-lzo verb 3 2) OpenVPN Tunnel mit Zertifikaten, Site-to-Site, 2 Server (Linux) Ausgangslage für Beispiel 3) OpenVPN Server1: Netzwerk Home: 192.168.1.1/24, VPN Adresse: 10.1.0.1, DnyDNS Name: berlin.dyndns.org OpenVPN Server2: Netzwerk Home; 192.168.3.1/24, VPN Adresse; 10.1.0.2 In diesem Konfigurations Beispiel soll eine Site-to-Site dargestellt werden. Es werden sozusagen 2 Firmenstandorte miteinander verbunden. Das heißt, es gibt keine Clients in dem Sinne wie in dem vorigen Beispiel, wo z.B. ein Roadwarrior, also von unterwegs per Notebook auf das Netzwerk zugegriffen werden soll. Des Weiteren muß einer der OpenVPN Server als Server konfiguriert und der andere als Client konfiguriert werden. Server1: Code:
dev tap proto udp port 1194 mode server ifconfig 10.1.0.1 255.255.255.0 tls-server dh /etc/openvpn/zertifikate/dh2048.pem ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/server.crt key /etc/openvpn/zertifikate/server.key cipher AES-256-CBC user nobody # Nur Linux group nogroup # Nur Linux status /etc/openvpn/openvpn-status.log comp-lzo verb 3 Server 2: Code:
dev tap remote berlin.dyndns.org ifconfig 10.1.0.2 255.255.255.0 tls-client ca /etc/openvpn/zertifikate/ca.crt cert /etc/openvpn/zertifikate/server2.crt key /etc/openvpn/zertifikate/server2.key port 1194 cipher AES-256-CBC user nobody # Nur Linux group nogroup # Nur Linux comp-lzo verb 3 |
Lesezeichen |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
ein anderes HowTo für Suse 9.0 und ATI 3.28/3.7.0 und 3.7.6 | DonMartin | X-Konfiguration | 4 | 26.02.06 16:55 |
Problem mit OpenVPN installation (Deb) | stevg | Linux Allgemein | 0 | 10.11.04 12:36 |
openvpn macosx<->linux: probleme mit nfs | Nebukadneza | Router und Netzaufbau | 0 | 07.07.04 14:36 |
Suche deutsches HowTo zwecks installation und konfiguration zu Wine | Wastl | Emulatoren für Spiele | 1 | 09.04.03 12:19 |
HowTos schreiben | hunter | Hier Suchen und Finden, Links, Tutorials | 0 | 16.12.02 08:58 |