Netzwerke via OpenVPN verbinden
Wem pptp Verbindungen zu unsicher, und ipsec Verbindungen mit dem OpenBSD isakmpd zu komplizert sind, hat noch eine andere Möglichkeit:
OpenVPN
Diese Anleitung gilt für OpenBSD 3.6
Dazu müssen zuerst ein paar Software Pakete heruntergeladen und installiert werden.
Für die LZO Komprimierung das lzo Paket aus den packages installieren,
pkg_add ftp://ftp.de.openbsd.org/unix/OpenBSD/3.6/packages/i386/lzo-1.08.tgz
danach die OpenVPN Software installieren, in unserem Fall wie folgt herunterladen:
cd /usr/local/src
ftp http://heanet.dl.sourceforge.net/sourceforge/openvpn/openvpn-2.0_rc17.tar.gz
danach,
tar xzvf openvpn-2.0_rc17.tar.gz
cd openvpn-2.0_rc17
./configure –with-lzo-headers=/usr/local/include –with-lzo-lib=/usr/local/lib
make && make install
wenn das install Skript erfolgreich durchgelaufen ist,
können die ssl Zertifikate erstellt werden. OpenVPN ist
dabei so freundlich entsprechende Skripte zur Erzeugung
der keys gleich mitzubringen. Um diese Keys zu sichern
sollte das Verzeichnis “easy-rsa” nach /root kopiert
werden:
cp -R easy-rsa /root
danach dorthin wechseln,
cd /root/easy-rsa
Jetzt werden mit folgenden Befehlen die CA files erzeugt:
. ./vars
./clean-all
./build-ca
beim “build-ca” werden die üblichen Fragen beim erzeugen
eines ssl Certs gestellt, wichtig ist dabei der “common-name”,
wir nennen unseren Beispielserver “foo.host.ltd”.
Jetzt erzeugen wir das Server Zertifikat:
./build-key-server foo.host.ltd
danach ein client Zertifikat,
./build-key unknown-ip.host.ltd
und zum Schluss ein Diffie Hellman Zertifikat,
./build-dh (dies dauert je nach CPU Power einige Zeit).
all diese erstellten Zertifikate finden wir nun unter
“/root/easy-rsa/keys”. Jetzt wollen wir uns um die Konfiguration
des Servers kümmern, dazu erstellen wir am besten
das “/etc/openvpn” Verzeichnis. In diese Vezeichnis per
cd /etc/openvpn
wechseln. Die Zertifikats Verzeichnisse anlegen,
mkdir ca server
dann die Zertifikate an Ihren Platz kopieren,
cp /root/easy-rsa/keys/ca.* /etc/openvpn/ca/
cp /root/easy-rsa/keys/foo.host.ltd* /etc/openvpn/server/
die Zertifikate noch auf 600 setzen,
chmod 600 /etc/openvpn/ca/*
chmod 600 /etc/openvpn/server/*
Ein Beispiel Server Config File befinden sich im source
Verzeichnis von Openvpn, dieses kopieren wir nach /etc/openvpn,
cp /usr/local/src/openvpn-2.0_rc17/sample-config-files/server.conf /etc/openvpn
Jetzt passen wir das “server.conf” File unserer Umgebung an.
—– snip —–
port 1194 #Mittlerweile von der IANA für OpenVPN vorgesehener Port
proto udp ‘UDP Protokoll
dev tun0 #Vorsicht, wenn sich der Server via pppoe einwählt hier tun1 wählen
ca /etc/openvpn/ca/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/ca/dh1024.pem #unsere vorhin kopierten Zertifikate
server 10.20.20.0 255.255.255.0 #Das virtuelle Netz welches erstellt werden soll, dieses sollte ein nicht an Netzwerkinterfaces gebundenes Netz sein
ifconfig-pool-persist /var/log/ipp.txt #Logfile für an cleints vergeben IP Adressen
push “route 192.168.100.0 255.255.255.0″
push “route 10.100.100.0 255.255.255.0″ #für einen OpenVPN Server mit DMZ und LAN
client-config-dir /etc/openvpn/ccd #der inhalt des Verzeichnisses steht weiter unten
route 192.168.1.0 255.255.255.0 #falls wir einen Router als client haben wird hiermit der Zugang von allen Clients aus diesem Netz möglich
push “dhcp-option DNS 10.100.100.2″
push “dhcp-option WINS 10.100.100.2″ #für Windows Clients
keepalive 10 120
tls-auth /etc/openvpn/server/ta.key 0 #dazu weiter unten eine Erklärung
cipher BF-CBC # Blowfish (default)
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log #Augenblicklicher Zustand des OpenVPN Prozesses
log-append /var/log/openvpn.log #dorthin werden alle Ereignisse geloggt
verb 3 #Loglevel
—– snip —–
Um die Direktive “tls-auth” nutzen zu können, muss noch ein entsprechendes Zertifikat erstellt werden. Dazu in das /etc/openvpn/server Verzeichnis wechseln,
cd /etc/openvpn/server
und folgenden Befehl ausführen,
/usr/local/sbin/openvpn –genkey –secret ta.key
Der Vorteil von “tls-auth” ist, dass UDP Pakete welche nicht den
vorgegebenen ta.key mit sich führen, ohne weitere Verarbeitung
gedropped werden. Sehr sicher gegen syn-flood Attacken.
Die Direktive “client-config-dir” hilft dabei Netz zu Netz
Verbindungen herzustellen. Wenn sich also ein client einwählt welcher gleichzeitig Router für sein eigenes Netz ist, legt man eine
Datei mit dem Namen == Common Name in das Verzeichnis
“/etc/openvpn/ccd” mit z.B. folgendem Inhalt:
iroute 192.168.1.0 255.255.255.0
Somit kann aus dem privaten Netz hinter dem sich einwählenden Router
jeder Host auch den Tunnel nutzen.
Jetzt ist der Server einsatzbereit und kann gestartet werden,
/user/local/sbin/openvpn –config /etc/openvpn/server.conf&
Nun kommen wir zur Client Seite, dort gibts es verschiedene
Versionen Linux, Win32, Mac OS X u.s.w.
Wir nehmen der einfachheit halber auch ein OpenBSD System.
Installation wie oben beschrieben, nur die Zertifikate
müssen wir vom Server auf den client kopieren.
Wir benötigen ca.crt, ta.key und die beiden unknown-ip.host.ltd Certs.
Ein entsprechendes Client Config sieht so aus:
—– snip —–
client #wir sind also client
dev tun1 #wie oben gesagt ein freies tun device wählen
proto udp
remote foo.host.ltd 1194 #unser Einwahl Server
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca /etc/openvpn/ca/ca.crt
cert /etc/openvpn/cert/unknown-ip.host.ltd.crt
key /etc/openvpn/cert/unknown-ip.host.ltd.key
ns-cert-type server
tls-auth /etc/openvpn/ca/ta.key 1
cipher BF-CBC
comp-lzo
verb 3
—– snip —–
Jetzt den Tunnel mit folgendem Befehl aufbauen:
/user/local/sbin/openvpn –config /etc/openvpn/client.conf&
und wir können die Gegenseite sehen.
Es lassen sich auf diese Weise alle möglichen Clients sicher mit
einem Netzwerk verbinden.