|_|0|_|
|_|_|0|
|0|0|0|

Be-Paranoid.net

OpenVPN Tutorial

Orginal Version | Artikel editieren | Versionen anzeigen | Bottom
Letzte Änderung: 06.12.2008, 12:34

Inhaltsverzeichnis



Vorwort Top



OpenVPN ist eine VPN-Lösung, die eine sichere, verschlüsselte Verbindung für alle *BSD-, Linux-, Mac OS X- und Windows-PCs beinhaltet.

Dieses Tutorial lehrt den Umgang mit OpenVPN, als Voraussetzung sollte man die Grundlagen der Netzwerktechnik, und die Grundlagen vom eigenen System kennen. Der Server wird nur für eine Linux Version erklärt, es sollte aber kein Problem sein, einen Windows Server zu betreiben.

Wenn Kenntnisse in einem Gebiet fehlen -> einfach im Forum fragen, wir haben auf fast alles eine Antwort laugh

Installation Top










Schlüssel erzeugen, und richtig plazieren Top



Die Schlüssel erzeugen wir wie in unserem OpenSSL Tutorial.

Danach kopieren wir die Zertifikate, und Schlüssel in unser Arbeitsverzeichnis, hier, unter Debian: /etc/openvpn in den Ordner certs.

Code:


workstation:/etc/# cd /etc/openvpn 
workstation:/etc/openvpn# mkdir certs
workstation:/etc/openvpn# cp /usr/local/ssl/dh1024.pem ./certs/
workstation:/etc/openvpn# cp /usr/local/ssl/vpn-ca.pem ./certs/
workstation:/etc/openvpn# cp /usr/local/ssl/certs/servercert.pem ./certs/
workstation:/etc/openvpn# cp /usr/local/ssl/private/serverkey.pem ./certs/
workstation:/etc/openvpn# chmod 0600 certs/serverkey.pem



Ausgangslage Top



Wir haben 3 PC's:

- Linux Server im Netzwerk Home 192.168.0.1/24 und später 10.0.0.1 als VPN Adresse, im Internet existiert er unter vsn.test-host.de
- Rechner im Netzwerk Home 192.168.0.99/24
- Rechner im Internet 83.73.211.1/32 oder später 10.0.0.x als VPN Adresse

Wir haben auf dem Linux Rechner einen Webserver auf Port 80, und auf dem Windows PC einen Samba Server (445), der sich um die Datenfreigabe kümmert (hat standardmässig jeder Windows Rechner).

Jetzt wollen wir über das Internet auf den Samba -und Webserver zugreifen, dazu wird ein VPN zum Server aufgebaut, und danach per iptables zum Netzwerk Rechner geroutet.

Wenn wir keinen hostname im Internet haben, können wir ihn per dynDNS einrichten. Dazu gibt es einige Dienste, z.B ProutDNS. Unter google sollte man einige finden.

TCP oder UDP Top



Als erstes müssen wir uns überlegen, was wir verwenden, entweder TCP, oder UDP. TCP über TCP ist eine schlechte Idee, da es in diesem Protokoll eine Fehlerkontrolle gibt, d.h. es wird nach Paketen die nicht ankommen nochmal gefragt, das bringt das ganze Protokoll durcheinander. Mehr dazu sites.inka.de/sites/bigred/devel/tcp-tcp.html.

Da wir einen TCP Dienst nutzen wollen, verwenden wir UDP als Protokoll für den Tunnel, wenn wir auschließlich UDP Dienste nutzen wollen wäre TCP eine feine Sache, da dann alle Pakete ankommen Lachend.

Server konfigurieren Top



Als erstes brauchen wir ein config Script für den Server, /etc/openvpn/server.conf (unter Windows OpenVPNInstallationsverzeichnis/config/server.ovpn, wie OpenVPN unter Windows installiert wird, kommt steht oben, Rechtsklick->"Start OpenVPN on this file" startet den Server unter Windows, unseres schaut so aus:

Code:


# Port
port 1194

# TCP oder UDP?
#proto tcp-server
proto udp
mode server
tls-server

# tun oder tap?
# Das tun Device erstellt einen IP Tunnel,
# während das tap Device einen Ethernet Tunnel erstellt.
#tun or tap device
#tun is an IP tunnel,
#tap an ethernet tunnel
dev tap

#Our Server IP
ifconfig 10.0.0.1 255.255.255.0

#dynamic clients from 10.0.0.2-10.0.0.254
ifconfig-pool 10.0.0.2 10.0.0.254

#Die pakete werden auf dieser größe gekapselt
tun-mtu 1492
#fragment 1300
mssfix

#Paths to the certs
ca certs/vpn-ca.pem
cert certs/servercert.pem
key certs/serverkey.pem

#Clients können miteinander kommunizieren
#client-to-client

#Diffie-Hellmann Parameters
dh certs/dh1024.pem

#Same Ip in the next session
ifconfig-pool-persist ipp.txt

#Routes the packages to the intern network, you should use iptables instead of this
#push "route 192.168.0.0 255.255.255.0"

#Tests the connection with a ping like paket. (wait=120sec)
keepalive 10 120

#Authenication
auth SHA1

#Our encryption algorithm
#cipher aes-256-ecb
#openvpn --show-ciphers for testing

#comp
comp-lzo

#Sets new rights after the connection
user nobody
group nogroup

#We need this because of user nobody/group nobody.
persist-key
persist-tun

#Logging 0, (testing:5)
verb 0



Mit cd /etc/openvpn/ && openvpn --config /etc/openvpn/server.conf können wir die Datei testen, jetzt schauen wir ob's klappt (mit verb 3):

Code:


vsn-server:/etc/openvpn# cd /etc/openvpn&& openvpn --config server.conf
Wed Aug 24 17:48:56 2005 OpenVPN 2.0 i386-pc-linux [SSL] [LZO] built on Apr 22 2005
Wed Aug 24 17:48:56 2005 Diffie-Hellman initialized with 1024 bit key
Wed Aug 24 17:48:56 2005 WARNING: file 'certs/serverkey.pem' is group or others accessible
Wed Aug 24 17:48:56 2005 TLS-Auth MTU parms [ L:1568 D:140 EF:40 EB:0 ET:0 EL:0 ]
Wed Aug 24 17:48:56 2005 TUN/TAP device tap0 opened
Wed Aug 24 17:48:56 2005 /sbin/ifconfig tap0 10.0.0.1 netmask 255.255.255.0 mtu 1492 broadcast 10.0.0.255
Wed Aug 24 17:48:56 2005 Data Channel MTU parms [ L:1568 D:1450 EF:44 EB:23 ET:32 EL:0 AF:3/1 ]
Wed Aug 24 17:48:56 2005 GID set to nogroup
Wed Aug 24 17:48:56 2005 UID set to nobody
Wed Aug 24 17:48:56 2005 Listening for incoming TCP connection on [undef]:21
Wed Aug 24 17:48:56 2005 TCPv4_SERVER link local (bound): [undef]:21
Wed Aug 24 17:48:56 2005 TCPv4_SERVER link remote: [undef]
Wed Aug 24 17:48:56 2005 MULTI: multi_init called, r=256 v=256
Wed Aug 24 17:48:56 2005 IFCONFIG POOL: base=10.0.0.2 size=253
Wed Aug 24 17:48:56 2005 IFCONFIG POOL LIST
Wed Aug 24 17:48:56 2005 Home,10.0.0.2
Wed Aug 24 17:48:56 2005 MULTI: TCP INIT maxclients=1024 maxevents=1028
Wed Aug 24 17:48:56 2005 Initialization Sequence Completed



Unter debian gibt es noch das nette Programm rcconfig, das uns das script automatisch mit openvpn startet, mehr dazu siehe Doku.

Falls es Probleme gibt, einfach im Forum melden laugh

OpenVPN Client Top





Jetzt müssen wir die config Datei noch unter dem Namen xyz.ovpn erstellen:

Code:


client
float
dev tap

#MTU
tun-mtu 1492
#fragment 1300
mssfix

#device name, unter linux nicht mehr auskommentieren (# löschen)
#dev-node vsn-device

#tcp oder udp
proto udp

#Server IP
remote vsn.test-host.de 1194

#force authentication
#WICHTIG: hier den COMMON Name vom Server Zertifikat nehmen!
tls-remote server

ca vpn-ca.pem
cert simon_lan_cert.pem
key simon_lan_key.pem

auth SHA1
#cipher aes-256-cbc
nobind
comp-lzo
persist-key
persist-tun
verb 0

# Nach dem Verbindungsaufbau wird eine Route zum lokalen Netz vom Server aus aufgebaut
# AUSKOMMENTIERT
# Beispiel: Subnetz 192.168.2.0/24
#route 192.168.2.0 255.255.255.0

# Default route ueber VPN
# AUSKOMMENTIERT
#route remote_host 255.255.255.255 net_gateway
#route 0.0.0.0 0.0.0.0 vpn_gateway



Routing Top



Jetzt haben wir eine Verbindung zum Server, über einen Tunnel, jetzt müssen wir nur noch das Zeug von 445 in das interne Netz leiten.

Dazu haben wir 2 möglichkeiten



Theoretische Absicherung eines WLAN-Netzwerks mit OpenVPN Top



Die WEP Verschlüsselung von WLAN-Netzwerken ist unsicher, und unbrauchbar, deshalb würde ich bei einem WLAN-Netzwerk auf jeden Fall auf OpenVPN ausweichen.

Ich würde das so aufbauen:

Ein Server mit einer WLAN-Karte, der als Accesspoint dient, dieser Server dient als NAT-Router zwischen dem internen, dem WLAN, und dem Internet-Netzwerk. Jeder PC würde in's Internet geroutet werden(optional, kann man auch weglassen laugh), aber alle Pakete, die in das interne oder in das WLAN-Netzwerk wollen, müssen vom VPN-Tunnel, der mit OpenVPN aufgebaut wird, kommen.

Clientspezifischer Zugriff Top



Es kommt oft vor, dass man für unterschiedliche Leute den Zugriff auf das Netzwerk regeln will.

Nehmen wir an, Sie haben drei Zugriffsklassen, Angestellte, Systemadministratoren, und Partnerfirmen. Sie wollen den Systemadministrator auf das gesammte Netzwerk routen, die Angestellten nur auf den Samba Server und die Partnerfirmen auf einen speziellen Server zugreifen können.

Die meisten Leute sind Angestellte, Sie bekommen die ganz normalen Regeln von der Server-Konfigurations Datei, d.h. sie sind in 10.0.0.0/24.

Der Administrator bekommt das Netzwerk 10.0.1.0/24. Und die Partnerfirma 10.0.2.0/24.

In der Server Konfiguration wird ganz normal die Option server benutzt, ausserdem müssen noch routen für die anderen Netzwerke erstellt werden:

Code:


server 10.0.0.0 255.255.255.0
route 10.0.1.0 255.255.255.0
route 10.0.2.0 255.255.255.0



Jetzt bekommt jeder normale Benutzer eine IP-Adresse von 10.0.0.0/24. Unsere "speziellen" Benutzer müssen noch mithilfe des common names vom Zertifikat spezielle Regeln bekommen, dazu gibt es den Befehl client-config-dir <Verzeichnis>.

Code:


client-config-dir clients



Je nach common name vom Zertifikat wird jetzt die Konfiguration clients/<common name> aufgerufen.

Jetzt brauchen wir nur noch Dateien für die entsprechenden Benutzer erstellen:

Code:


clients/sysadmin1:
    ifconfig-push 10.0.1.1 10.0.1.2
clients/company1:
    ifconfig-push 10.0.2.1 10.0.2.2
clients/company2:
    ifconfig-push 10.0.2.5 10.0.2.6



ifconfig-push weißt den Clients eine virtuelle IP zu, die kann dann per routing auf die entsprechenden Server gerouted werden. Die erste IP-Adresse gibt die Adresse des virtuellen Clients an, die 2. des virtuellen Server endpoints. Laut openvpn.org-HOWTO müssen Sie aus /30 subnets geholt werden, damit die Windows Clients/TAP-Win32 Treiber mitspielen.

Quote: http://openvpn.net/howto.html:


Specifically, the last octet in the IP address of each endpoint pair must be taken from this set:

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]



Proxy-server">OpenVPN über einen Proxy Server Top



In einigen Fällen ist es notwendig OpenVPN über einen Proxy Server laufen zu lassen. Dazu gibt es einige Punkte zu beachten:






Beispiele:







Weitere Optionen Top












Probleme Top










Beispielkonfigurationen Top







Weblinks Top



Die offizielle Dokumentation
www.mathematik.uni-marburg.de/~schmidtm/openvpn_slides.pdf
Ein Mini Howto
Ein gutes Tutorial
Ein wikiweb Tutorial
Ein Tutorial von Linux-Magazin.de
www.sans.org/rr/whitepapers/vpns/1459.php
www.netzmafia.de/skripten/sicherheit/sicher2.html
Click me!
www.sauff.org/blog/static.php?page=mtu-mini-faq#1

Orginal Version | Artikel editieren | Versionen anzeigen | Top
Letzte Änderung: 06.12.2008, 12:34