OpenVPN
( Virtuelle Private Netzwerke)
Memelink Michael
09.09.2006 Tiroler Linuxtag, am
Inhaltsverzeichnis:
Inhaltsverzeichnis:
1.Einführung
• Was ist VPN
• Was ist OpenVPN
2.Vorbereitung
• Was benötige ich?
• Zertifikaterstellung
3.Einrichtung
• Server
• Client
Einführung:
Einführung:
1. 1. Was sind VPNs:Was sind VPNs:
• VPNs sind „Virtuelle Private Netzwerke“, die die Herstellung eines vertraulichen und sicheren Netzwerkes über öffentliche und unsichere Netzwerke wie z.B. das Internet ermöglichen.
• Bei einem VPN wird ein Tunnel zwischen VPN-Client und VPN-Server aufgebaut.
Es gibt verschiedene Möglichkeiten dies zu realisieren.
- Site-to-Site VPN …
z.B. Unternehmensnetzwerke zusammenschließen - End-to-Site VPN …
z.B. Anbindung der Aussendienstmitarbeiter an internes Firmennetz - End-to-End VPN …
z.B. Arbeitsrechner direkt miteinander verbinden
Einführung:
Einführung:
2. 2. Was ist OpenVPN:Was ist OpenVPN:
• OpenVPN ist ein OpenSource Programm zur Herstellung eines VPN's
• Es verwendet wahlweise UDP oder TCP als Protokoll
• Zur Verschlüsselung und Authentisierung werden Bibliotheken des Programms OpenSSL* verwendet
*… OpenSSL ist ein Toolkit, welches das SSL v2/v3 Protokoll und das TSL v1 Protokoll implementiert und zudem noch eine gute Kryptographie Library besitzt.
• Anwender können zwischen verschiedenen Authentisierungsmöglichkeiten wählen:
- Preshared-Keys - Preshared-Keys - Zertifikate
- Zertifikate
- Authentisierungsplugins - Authentisierungsplugins
Einführung:
Einführung:
Preshared-Keys …
Preshared-Keys … eignen sich für kleine VPN-Verbindungen mit wenigen Teilnehmern, wenn es nicht von großer Bedeutung ist, dass mehrere Personen den gleichen Schlüssel haben;
Zertifikate …
Zertifikate … sind eine wesentlich sichere Methode zur Authentisierung.
Der Client muss ein gültiges Zertifikat vorweisen, um sich am VPN-Server anmelden.
Authentisierungs-Plugins … Authentisierungs-Plugins …
hiermit kann auf zusätzliche Authentisierungsmöglichkeiten zurückgegriffen werden, wie z.B. Benutzername und Passwort auf einem RADIUS oder LDAP Server zu überprüfen
Im Vortrag wird nur auf Zertifikate näher eingegangen.
Einführung:
Einführung:
3. 3. OpenVPN im Detail:OpenVPN im Detail:
• OpenVPN benutzt den Client/Server Ansatz, d.h. der OpenVPN Client initiiert eine Verbindung zum OpenVPN Server.
• Dabei wird das X.509 Zertifikat vom Server beim Client auf Echtheit überprüft.
• Wurde der Server auf Echtheit überprüft, dann wird die 1. Stufe der Client Authentisierung gestartet.
• 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.
•Wenn die Authentisierung mit einem X.509 Client Zertifikat erfolgt, dann prüft der Server das vom Client übermittelte Zertifikat anhand des Public-Keys
der ausgegeben Certificate Authority.
Einführung:
Einführung:
3. 3. Wesentlicher Aufbau des X.509 Standards:Wesentlicher Aufbau des X.509 Standards:
- Zertifikat - Version
- Seriennumner - Algorithmen ID - Aussteller
- Gültigkeit - von - bis - Subject
- Subject Public Key Info
- Public Key Algorithmus - Subject Public Key
- Eindeutige ID des Ausstellers (optional) - Eindeutige ID des Inhabers (optional) - Erweiterungen
....
- Zertifikat Signaturalgorithmus - Zertifikat Signatur
X.509
X.509 ist ein ITU-T-Standard für eine Public-Key-Infrastruktur und derzeit der wichtigste Standard für digitale Zertifikate.
Die aktuelle Version ist X.509v3.
Vorbereitung:
Vorbereitung:
Software: Die neueste Software von OpenVPN finden Sie unter
http://openvpn.net/download.html
OpenVPN braucht folgende libary's, damit es erfolgreich kompiliert werden kann:
1. Was benötige ich?Was benötige ich?
- OpenSSL library … notwendig für die Verschlüsselung - LZO library … notwendig für die Link-Kompression - Pthread libary
tar xzvf openvpn-2.0_Version.tar.gz cd openvpn_Version
./configure --prefix=/usr/local make
make install Code:
Unter Debian Systeme reicht ledigleich ein simples „apt-get install openvpn“
Vorbereitung:
Vorbereitung:
Zertifikaterstellung:
Zertifikaterstellung:
Das erstellen der Zertifikate ist dank vorgefertigter Skripte die im „easy-rsa“-Verzeichnis liegen, schnell erledigt.
Wir wechseln ins Verzeichnis „/etc/openvpn/easy-rsa“ und öffnen die VARS-Datei.
In der VARS-Datei befinden sich die allgemeinen Einstellungen für die Zertifikate.
export D=`pwd`
export KEY_CONFIG=$D/openssl.cnf export KEY_DIR=$D/keys
export KEY_SIZE=1024 export KEY_COUNTRY=AT export KEY_PROVINCE=TIROL export KEY_CITY=HALL
export KEY_ORG=„umit"
export KEY_EMAIL=" mein@email"
Code:
Vorgabefelder für die Erstellung des Zertifikates. Alle Felder müssen Ausgefüllt sein!
Ziel der zu erstellenden Schlüssel Stärke der Verschlüsselung,
hier 1024BIT, geht natürlich auch mehr!
Vorbereitung:
Vorbereitung:
Zertifikaterstellung:
Zertifikaterstellung: Erstellen des Wurzelzertifikates
Als erstes muss die PKI vorbereitet werden und das Wurzel-Zertifikat erstellt werden.
. ./vars ./clean-all ./build-ca Befehle:
initialisiert die VARS-Datei die wir eben geändert haben Leert das Verzeichnis „keys“, das in der VARS-Datei spezifiziert wurde
erstellt das Zertifikat und den Schlüssel für certificate authority, das root-certificate bzw. das Wurzel-Zertifikat.
Erstellen des Server-Zertifikates und Schlüssels:
Mit dem Befehl: ./build-key-server server wird das Zertifikat und der Schlüssel generiert.
Dabei wird dem Skript der Parameter „server“ übergeben, der den Dateinamen für Schlüssel und Zertifikat festlegt.
CN muss einzigartig sein!!!
Vorbereitung:
Vorbereitung:
Zertifikaterstellung:
Zertifikaterstellung: Erstellen des Client-Zertifikates und Schlüssels
Nun werden noch schnell die Schlüssel und Zertifikate für die Clients erstellt, mit:
./build-key client1
Dabei stellt der übergebene Parameter client1 wieder den Namen
für das Zertifikat und den Schlüssel da. Wiederum muss unter Common Name ein einzigartiger Name gewählt werden, der bislang nicht verwendet wurde.
Wenn weitere Clients ein Zertifikat und einen Schlüssel erhalten sollen, muss der entsprechende Befehl erneut aufgerufen werden.
./build-key clientXYZ
Erstellen der Diffie-Hellmann-Parameter:
Nun müssen noch die Diffie-Hellmann-Parameter für den Server erstellt werden:
./build-dh
Der Vorgang dauert einige Zeit - insbesondere bei langsamen PCs
Einrichtung:
Einrichtung:
Nun erfolgt die Einrichtung des eigentlichen VPNs.
Zunächst werden wir den Server konfigurieren:
dev tun proto udp
server 192.168.4.0/24 255.255.255.0 mode server
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key dh /etc/openvpn/easy-rsa/keys/dh1024.pem cipher AES-128-CBC
tls-server
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 comp-lzo
Keepalive 10 60 status openvpn.log verb 6
persist-key persist-tun tun-mtu 1452
Angaben zur Verschlüsselung
Key und Zertifikat
werden im Speicher behalten Logs
Geräte für den Tunnel festlegen und das Protokoll bestimmen
Kompression
Einrichtung:
Einrichtung:
Einrichtung des Clients:
remote meineAdresse.dyndns.org dev tun
port 1194 client proto udp tls-client
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 1 ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/client1.crt key /etc/openvpn/easy-rsa/keys/client1.key cipher AES-128-CBC
comp-lzo tun-mtu 1452
Verschlüsselung
Maximum Transfer UNIT muss auf Client und Server identisch sein Ziel des Tunnels, also der VPN-Server, als Beispiel hier die DynDNS-Adresse
Einrichtung:
Einrichtung:
Firewall noch schnell einrichten:
# Protokoll ist UDP und Port ist 1194
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
# Erlaube Pakete der TUN/TAP Schnittstelle.
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
Vielen Dank für Ihre Aufmerksamkeit
Mail: michael.memelink@umit.at