Da mir persönlich die Verschlüsselung und Sicherheitsfeatures von WLAN zu schwach sind, wollte ich mein WLAN mit OpenVPN absichern. Da dies mittlerweile recht gut funktioniert, möchte ich meine Erkenntnisse mit euch teilen.
Zusammenfassung
Es wird ein AP direkt an einer nur dafür vorgesehenen Netzwerkkarte angeschlossen. Danach wird ein OpenVPN Netzwerk eingerichtet und mit iptables jeder andere Netzwerkverkehr gestoppt. Dadurch ist es nur noch möglich mit gültigen Key aufs Netzwerk zuzugreifen, selbst wenn man es geschafft hat an den WLAN Sicherungen vorbeizukommen.
Die beiden IP-Adressen werden per DHCP übermittelt.
Inhalt
0. Kernel-Vorraussetzungen
1. Konfigurieren der Netzwerkkarten am Server
2. Einrichten von OpenVPN 2.0 Server
3. Einrichten von DHCP am Server
4. Einrichten von OpenVPN am Client (Linux/Windows)
5. Konfigurieren der Netzwerkkarten am Client
6. Abdichten des Servers per iptables
0. Kernel Vorraussetzungen
OpenVPN benutzt das TUN/TAP Modul um ein virtuelles Netzwerkinterface zum tunneln zu erstellen. Dazu benötigt man die Unterstützung für das Universal TUN/TAP Device im Kernel unter Network-Support.
Wenn man es als Modul kompiliert hat, heisst es tun.
1. Konfigurieren der Netzwerkkarten am Server
Es steht mindestens eine Netzwerkkarten zur Verfügung. Ich gehe davon aus das jeder in der lage ist dieser eine IP-Adresse zuzuweisen. Ferner gehe ich davon aus das dieser Server das Gateway zum Internet darstellt und auch dieses schon eingerichtet ist (NAT, MASQUERADING, ...)
Damit sich ein eventuell vorhandes Kabelnetzwerk nicht mit dem WLAN beisst, muss sich beides an einer einzelnen Netzwerkkarte befinden. Um das VPN eindeutig zu kennzeichnen habe ich mich für das eigentliche WLAN für das Netzwerk 192.168.1.0/24 und für das VPN das Netzwerk 10.1.0.0/24 entschieden. Dadurch sind beide Netzwerke sehr einfach von einander zu unterscheiden.
Ich gebe dem Server für das normale WLAN die IP 192.168.1.1, wobei zu sagen ist das der Server ja nicht richtig im WLAN ist sondern es sich dabei nur um die IP Adresse der Netzwerkkarte zum AccessPoint handelt.
Das eventuell vorhandensein von DHCP des AccessPoints ist auszuschalten!
Folgendes haben wir bisher getan: Die Netzwerkkarte des Servers zum AP (z.b. eth1) hat nun die IP 192.168.1.1
2. Einrichten von OpenVPN 2.0 Beta am Server
Ich habe mich für OpenVPN 2.0 entschieden da der Serverbetrieb deutlich verbessert wurde. So ist es nun möglich mehrere Clients über nur 1 Interface anzubinden.
Wer nur einen Client verbinden möchte kann auch OpenVPN 1.5 oder 1.6 nehmen, ich werde an der entsprechenden Stelle auf den Unterschied hinweisen.
Ich empfehle das USE-Flag pthreads zu verwenden da dies die Performance erheblich steigern kann, gerade bei mehreren Clients.
Nach erfolgreicher Installation erstellen wir uns ein neues Verzeichnis in den alle Dateien abgelegt werden sollen:
Code: Select all
mkdir /etc/openvpn/wireless -pAls erstes müssen wir eine CA (certificate authority) welche die später erzeugten Schlüssel signiert. Dazu editieren wir als erstes die Datei openssl.cnf. Diese sollte sich bei euch im Verzeichnis /etc/ssl befinden, also
Code: Select all
cd /etc/ssl- default_days (spezifiziert wie lange das Zertifikat gültig sein soll, 3650 sind 10 Jahre)
- dir (falls ihr ein anderes Verzeichnis nehmen wollt)
- certificate (zu my-ca.crt)
- private_key (zu my-ca.key)
- default_bits (zu 2048 für mehr Sicherheit)
Nachdem wir die Änderungen vorgenommen haben können wir unsere CA erstellen. Wählt eure Angaben selber aus (Firma, Ort, usw.)
Code: Select all
openssl req -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -days 3650Code: Select all
openssl req -nodes -new -keyout server.key -out server.csr
openssl ca -out server.crt -in server.csr
openssl req -nodes -new -keyout client.key -out client.csr
openssl ca -out client.crt -in client.csrZum Schluss noch den DH-Key
Code: Select all
openssl dhparam -out dh2048.pem 2048Nun kopieren wir die eben erstellten Dateien in unser OpenVPN-Verzeichnis von eben.
Code: Select all
cp server.crt server.key client.crt dh2048.pem /etc/openvpn/wireless/Code: Select all
cp ./demoCA/my-ca.crt /etc/openvpn/wireless/Code: Select all
cd /etc/openvpn/wirelessZusätzlich empfehle ich noch einen weiteren Key hinzuzufügen. Dieser authentifiziert das anmelden und übertragen des eigenen Zertifikats. Dadurch wird die Sicherheit erhöht und mögliche DoS Attacken erschwert.
Code: Select all
openvpn --genkey --secret wireless.keyNun kommen wir zur eigentlichen Konfiguration von OpenVPN. Wir erstellen die Datei /etc/openvpn/wireless/local.conf mit folgendem Inhalt:
Code: Select all
dev tap
ifconfig 10.1.0.1 255.255.255.0
mode server
tls-server
dh dh2048.pem
ca my-ca.crt
cert server.crt
key server.key
tun-mtu 1500
mssfix 1400
# Kompression
comp-lzo
# Die nächste Zeile ist optional, nur verwenden falls die Datei oben erzeugt wurde
tls-auth /etc/openvpn/wireless/wireless.key 0
# Die nächste Zeile erlaubt mehrere Clients mit gleichem Zertifikat.
# Das vereinfacht die Sache erheblich.
# Nur mit Version 2.0 Beta verwenden.
duplicate-cn
chroot /etc/openvpn/wireless/newroot
user nobody
group nobody
Code: Select all
mkdir /etc/openvpn/wireless/newrootCode: Select all
/etc/init.d/openvpn start
rc-update add openvpn default3. Einrichten von DHCP am Server
Ich stelle hier nur kurz eine mögliche dhcpd.conf vor (/etc/dhcp/dhcpd.conf)
Code: Select all
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
ddns-update-style interim;
# Netzwerk des normalen WLAN
subnet 192.168.1.0 netmask 255.255.255.0
{
range 192.168.1.12 192.168.1.120;
# Die Nameserver solltet ihr gegen die eures Providers tauschen, diese hier sind von Arcor.
option domain-name-servers 145.253.2.203, 145.253.2.171;
option broadcast-address 192.168.1.255;
}
# Netzwerk des VPN
subnet 10.1.0.0 netmask 255.255.255.0
{
range 10.1.0.12 10.1.0.120;
# Die Nameserver solltet ihr gegen die eures Providers tauschen, diese hier sind von Arcor.
option domain-name-servers 145.253.2.203, 145.253.2.171;
# Erst hier wird das default Gateway übergeben, da der Verkehr über das normale Device ja geblockt ist
option routers 10.1.0.1;
option broadcast-address 10.1.0.255;
}4. Einrichten von OpenVPN am Client (Linux/Windows)
Da OpenVPN 1.5/1.6 nicht 100% kompatible zu OpenVPN 2.0 ist, benötigen wir hier auch OpenVPN 2.0, für Windows XP SP2 sowieso.
Der Client benötigt folgende Dateien, die möglichst sicher übertragen werden sollten (SSH, Diskette, USB-Stick, etc.)
- client.crt
- client.key
- my-ca.crt
- wireless.key
Linux
Diese sollten sich ebenfalls im Verzeichnis /etc/openvpn/wireless befinden.
Dann erstellen wir die config-Datei: /etc/openvpn/wireless/local.conf
Code: Select all
dev tap
# IP des Servers
remote 192.168.1.1 5000
tun-mtu 1500
mssfix 1400
tls-client
ca my-ca.crt
cert client.crt
key client.key
# Kompression der Daten
comp-lzo
# Optional, siehe oben
tls-auth /etc/openvpn/wireless/wireless.key 1
user nobody
group nobody
# Wichtige Resourcen behalten nach Wechsel zum user nobody
persist-key
persist-tunCode: Select all
/etc/init.d/openvpn start
rc-update add openvpn defaultHier sollten sich die Datein im Config-Verzeichnis des Installationsverzeichnisses befinden. Z.b. C:\Programme\OpenVPN\config
Dort erstellen wir die Datei local.ovpn:
Code: Select all
dev tap
remote 192.168.1.1 5000
tun-mtu 1500
mssfix 1400
# Optional, s.o.
tls-auth wireless.key 1
tls-client
ca my-ca.crt
cert client.crt
key client.key
comp-lzo5. Konfigurieren der Netzwerkkarten am Client
Linux
Da ich alles per DHCP übertragen lassen müsst ihr einfach in die Datei /etc/conf.d/net folgendes eintragen:
Code: Select all
ifconfig_tap0=( "dhcp" )Daher kopieren wir die Datei:
Code: Select all
cd /etc/init.d
cp net.eth0 net.tap0
rc-update add net.tap0 defaultCode: Select all
need openvpnWindows
Hier müsst ihr nichts mehr tun, da Windows automatisch nach einem DHCP Server sucht.
6. Abdichten des Servers per iptables
Auf dem Server wollen wir ja nur noch VPN-verbindungen dulden. Daher führen wir folgendes aus:
Code: Select all
iptables -t filter -A INPUT --protocol udp --dport 5000 -j ACCEPT -i eth1 # eth1 ist das Interface an dem der AP hängt
iptables -t filter -A INPUT -j REJECT -i eth1 #oder -j DROP, je nach Geschmack
/etc/init.d/iptables save
So, das wars schon! Ich hoffe es haben sich keine Fehler eingeschlichen und es ist alles verständlich erklärt.
OK, das Firewall-script ist etwas flach, aber um den Rahmen nicht zu sprengen musste ich es etwas kürzen. Jedenfalls tut es genau das was es soll. Es lässt nur Verbindungen über OpenVPN durch.
Natürlich muss man kein DHCP benutzen, sondern kann auch alle Netzwerkeinstellungen am Client selber setzen. Aber ich persönlich stehe auf DHCP, da es damit alles schön zentral gesteuert wird. Wenn neue Clients hinzukommen hat man zumindest mit der Netzwerkeinstellung weniger zu tun.
Bei Fragen, Kritik und Anregungen bitte ich doch sehr sich hier zu Wort zu melden.
EDIT:
- Universal TUN/TAP Anmerkung hinzugefügt
- OpenVPN 2.0 ist im Portage




