Tutorials - OpenVPN Tutorial
Sprachenübersicht/Betriebssysteme/Linux/Security
OpenVPN Tutorial
Diese Seite wurde 505511 mal aufgerufen.
Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.
Editieren Versionen Linkpartnerschaft Bottom Printversion
Keywords: OpenVPN, Tutorial, SSL, sicheres WLAN, VPN
Abbildung
Inhaltsverzeichnis
OpenVPN ist eine VPN Lösung, die eine sichere, verschlüsselte Verbindung für alle *BSD, Linux Mac OS X und Windows PC's erhaltet.
Dieses Tutorial lehrt den Umgang mit OpenVPN, als Voraussetzung sollte man die Grundlagen der Netzwerktechnik, und die Grundlagen vom eigenen System kennnen. 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
- Debian
Unter Debian kann man OpenSSL mit apt-get install openvpn installieren lassen.
- RedHat RPM
Wenn das Packetverwaltungssystem RPM installiert ist, müssen Sie nur das rpm Packet (google: openvpn .rpm "index of") herunterladen, und es ausführen.
- Source Code
Den Quellcode können wir unter www.openvpn.org herunterladen, in unserem Fall ist es openvpn.net/release/openvpn-2.0.1.tar.gz, als Grundlage brauchen wir ein installiertes OpenSSL.
Nachdem wir die Datei heruntergeladen haben, können wir openvpn installieren:
Code:
workstation:/usr/src# tar -xzvf openvpn-2.0.1.tar.gz
workstation:/usr/src# cd openvpn-2.0.1
workstation:/usr/src/openvpn-2.0.1# ./configure
workstation:/usr/src/openvpn-2.0.1# make
workstation:/usr/src/openvpn-2.0.1# make install
Wir sollten folgende Pakete zusätzlich installieren:lzo, lzo-devel, pam, pam-devel
Wenn wir lzo nicht wollen, können wir ./configure --disable-lzo machen.
Bei meinem Debian System erschien folgende Meldung: OpenSSL Crypto headers not found.
Das habe ich mit folgenden Parametern gelöst:
./configure --with-ssl-headers=/usr/local/ssl/include/ --with-ssl-lib=/usr/local/ssl/lib/, das Verzeichnis kann natürlich anders sein.
Wir müssen noch sicher gehen, das tun/tap vom Kernel unterstützt wird, mit make menuconfig findet man das z.B. unter Device Drivers/Network Support/Universal TUN/TAP device driver support [*].
Jetzt sollte alles installiert sein.
- Windows
Als erstes müssen wir den Windows Client installieren, das sollte kein Problem sein, bei der Frage nach unsignieren Treibern mit JA Antworten.
Jetzt finden wir unter
Einstellungen->Systemsteuerung->Netzwerkverbindungen das neue tun Device. Es hat irgendeinen anderen Namen... Nach einem Rechtsklick auf das Device gehen wir auf Eigenschaften->Konfigurieren und dort auf die Registerkarte Erweitert.
OpenVPN richtet ein tun Device ein, das man unter Systemsteuerung->Netzwerkumgebund findet. Mit F2 benennen wir es um, in meinem Fall: vsn-device. Jetzt machen wir einen Rechtsklick->Eigenschaften->Konfigurieren->Erweiterte Einstellungen, hier stellen wir das MTU auf 1492.
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
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.
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
.
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 21
# 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
#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
- Windows
Wir installieren den OpenVPN Client wie im Kapitel “Installation” beschrieben.
Als erstes muss vpn-ca.pem, simon_lan_key.pem, und simon_lan_cert.pem in das Verzeichnis Installationsverzeichnis-OpenVPN/config, danach sollte die Zertifikat-Geschichte erledigt sein.
Die config Datei kommt in dieses Verzeichnis: Installationsverzeichnis-OpenVPN/config. Mehr dazu, siehe weiter unten.
Wenn die config Datei (weiter unten) erstellt wurde, können wir sie mit Rechtsklick->"Start OpenVPN on this file" starten.
Wenn "Initialization Sequence Completed" kommt haben wir gewonnen
Jetzt gehen wir auf Start->Ausführen, und geben da cmd ein:
Code:
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.
D:\>ping 10.0.0.1
Ping wird ausgeführt für 10.0.0.1 mit 32 Bytes Daten:
Antwort von 10.0.0.1: Bytes=32 Zeit<10ms TTL=64
Antwort von 10.0.0.1: Bytes=32 Zeit<10ms TTL=64
Ping-Statistik für 10.0.0.1:
Pakete: Gesendet = 2, Empfangen = 2, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms
STRG-C
^C
D:\>
Wir haben es geschafft, wir haben eine Verbindung.
Unter Systemsteuerung->Verwaltung-Dienste können wir unter Rechtsklick->Eigenschaften "Dienst automatisch starten" auswählen, dann startet der Client alle .ovpn files automatisch.
- Linux
Wir installieren OpenVPN wie beim Server, (siehe Kapitel Installation) und machen eine Datei /etc/openvpn/openvpn-client.conf, danach kopieren wir die config die wir weiter unten finden rein.
openvpn --config /etc/openvpn/client.conf startet den client, "Initialization Sequence Completed" bedeutet das alles OK ist.
Jetzt öffnen wir ein Shell, und tippen folgendes rein:
Code:
home:/etc/openvpn# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: icmp_seq=0 ttl=128 time=3.2 ms
64 bytes from 10.0.0.1: icmp_seq=1 ttl=128 time=2.4 ms
--- 10.0.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 2.4/2.8/3.2 ms
Wir haben es geschafft, wir haben eine Verbindung.
Wie beim Server können wir rcconfig benutzen, damit das ganze läuft.
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 windows auskommentieren (# löschen)
#dev-node vsn-device
#tcp oder udp
proto udp
#Server IP
remote vsn.test-host.de 21
#force authentication
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
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
- Die schnelle, unsaubere Möglichkeit wenn wir kein vorhandenes iptables Script haben
Wir kommentieren #push "route 192.168.0.0 255.255.255.0" im Server Script aus, dadurch hat der OpenVPN Client zugriff auf das komplette interne Netzwerk 192.168.0.0/24, dabei sollten wir beachten das das Netzwerk vom Server nicht das selbe ist wie das vom OpenVPN Client.
- Die gute, sichere Methode: iptables - Ports einzeln forwarden
Dazu fügen wir 2 commands in unser iptables Script ein:
Code:
IPTABLES=/sbin/iptables
#finden wir mit ifconfig heraus
VPN_DEV=tap0
#VPN Netzwerk
VPN_NET=10.0.0.0/24
#internes netzwerk
INT_DEV=eth0
#Leitet alles was per Port 445 kommt zum Internen Netz um, auf Port 445 darf auf dem Server nichts laufen
$IPTABLES -t nat -A PREROUTING -i $VPN_DEV -p tcp --dport 445 -j DNAT --to 192.168.0.99
#Lässt alles in's VPN durch
$IPTABLES -A FORWARD -i $INT_DEV -o $VPN_DEV -s $VPN_NET -p tcp -j ACCEPT
$IPTABLES -A FORWARD -i $INT_DEV -o $VPN_DEV -s $VPN_NET -p udp -j ACCEPT
Wie man ein iptables Script einrichtet erfahren wir hier.
- Die gute, sichere Methode: iptables - Netzwerk per NAT routen
Wir brauchen wie in der zweiten Methode ein iptables Script, dort fügen wir folgendes hinzu:
Code:
IPTABLES=/sbin/iptables
#finden wir mit ifconfig heraus
VPN_DEV=tap0
#VPN Netzwerk
VPN_NET=10.0.0.0/24
#internes netzwerk
INT_DEV=eth0
#--m multiport wegnehmen, wenn nur 1 Port geforwardet werden soll
NAT_FORWARDING_TCP_PORT_TO_VPN="21,22"
#--m multiport wegnehmen, wenn nur 1 Port geforwardet werden soll
#Ports im internen Netzwerk
NAT_FORWARDING_TCP_PORT_TO_LAN="445,80"
$IPTABLES -A POSTROUTING -t nat -p tcp -o $EXT_DEV -s $INT_NET -j MASQUERADE
$IPTABLES -A POSTROUTING -t nat -p icmp -o $EXT_DEV -s $INT_NET -j MASQUERADE
$IPTABLES -A FORWARD -p tcp ! --syn -j ACCEPT
#Der interne PC soll auf die Ports vom OpenVPN Client zugreifen können.
$IPTABLES -A FORWARD -i $INT_DEV -o $VPN_DEV -s $INT_NET -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT_TO_VPN -j ACCEPT
#Die Ports vom internen Netzwerk sollen erreichbar sein
$IPTABLES -A FORWARD -i $VPN_DEV -o $INT_DEV -s $VPN_NET -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT_TO_LAN -j ACCEPT
#icmp
$IPTABLES -A FORWARD -m state --state NEW -p icmp -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Jetzt müssen wir noch im Client das Gateway einstellen.
Linux
#Wir setzen 10.0.0.1 als gateway für 192.168.99.0 fest.
route add -net 192.168.99.0 netmask 255.255.255.0 metric 1 gw 10.0.0.1 tap
Windows
route add 192.168.99.0 mask 255.255.255.0 10.0.0.1 metric 1 -p
Unter Windows sorgt -p dafür das es permanent ist, unter Linux kann sich das je nach Distribution unterscheiden.
Das war's
Die WEP Verschlüsselung von WLAN-Netzwerken ist unsicher, und unbrauchbar, deshalb würde ich bei einem WLAN-Netzwerk auf jedenfall auf OpenVPN auweichen.
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
), aber alle Pakete, die in das interne oder in das WLAN-Netzwerk wollen, müssen vom VPN-Tunnel, der mit OpenVPN aufgebaut wird, kommen.
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
www.join.uni-muenster.de/Dokumente/Howtos/Howto_OpenVPN_Tunnelbroke...
Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?
Editieren Versionen Linkpartnerschaft Top Printversion
Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden
Sprachenübersicht/Betriebssysteme/Linux/Security/OpenVPN Tutorial