Anti-Post-Privacy Teil 1: OpenVPN-Server unter gentoo einrichten
Dieses HowTo stellt den ersten Teil einer kleinen Serie von HowTos dar, die jedermann (zumindest aber Server-Betreibern) helfen sollen, sich ein wenig anonymer durchs Internet zu bewegen. Klar sind die Texte und Anleitungen auf gentoo-Linux zugeschnitten, sollten sich aber eigentlich recht einfach auf andere Distributionen anwenden lassen.
Wir beginnen die Serie mit einem HowTo welches zeigt, wie man schnell und einfach einen einen OpenVPN-Server aufsetzt.
Vorraussetzungen
Um OpenVPN installieren und einen eigenen Server betreiben zu können, muss im Kernel das TUN/TAP-Device entweder fest einkompiliert oder als Modul aktiviert sein.
-
cd /usr/src/linux
-
make menuconfig
Folgendes sollte aktiviert sein:
-
Device Drivers ---> -
Network device support ---> -
[*]Network device support
-
<M> Universal TUN/TAP device driver support
Danach den Kernel neu kompilieren, oder wenn das Modul schon aktiviert ist, dann kann man das so lassen...
Installation
Die Installation ist - ich wiederhole mich gerne - unter gentoo wie immer sehr einfach:
-
emerge openvpn
Konfiguration
Erzeugen der SSL-Keys/-Zertifikaten
Bei OpenVPN ist dies nicht sehr schwierig, es bringt einige Skripte mit, dies diesen ganzen Prozess enorm vereinfachen.
-
cd /usr/share/openvpn/easy-rsa
Hier muss man noch ein paar Variablen in der Konfigurationsdatei anpassen, um das Zertifikat auf seine Bedürfnisse anzupassen,
besonders die Werte für KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG und KEY_EMAIL sollten bearbeitet werden.
-
nano ./vars
Nun initialisieren wir das PKI:
-
source ./vars
-
./clean-all -
./build-ca
Der letzte Befehl (build-ca) erstellt die Certificate Authority (CA) durch Aufruf eines interaktiven openssl-Befehls:
-
Generating a 1024 bit RSA private key -
............++++++ ...........++++++
-
writing new private key to 'ca.key' -
----- -
You are about to be asked to enter information
-
that will be incorporated into your certificate
-
request. What you are about to enter is what
-
is called a Distinguished Name or a DN.
-
There are quite a few fields but you can leave
-
some blank For some fields there will be a default
-
value, If you enter '.', the field will be left -
blank.
-
----- -
Country Name (2 letter code) [DE]:
-
State or Province Name (full name) [RLP]:
-
Locality Name (eg, city) [SOMEWHERE]:
-
Organization Name (eg, company) [OpenVPN-TEST]:
-
Organizational Unit Name (eg, section) []:
-
Common Name (eg, your name or your server's hostname) []:OpenVPN-CA
-
Email Address [me@myhost.mydomain]:
Hier kann man nochmal die unterschiedlichen Werte anpassen. Falls dies schon in der vars-Datei geschehen ist, kann man fast
überall mit Enter die vorgeschlagenen Werte übernehmen. Lediglich der "Common Name" muss angegeben werden!
Zertifikat & Schlüssel für den Server
Durch den folgenden befehl startet man die Generierung des Zertifikates und des Private Keys für den OpenVPN-Server:
-
./build-key-server server
Wie schon im ersten Schritt kann man hier fast alle vorgeschlagenen Werte übernehmen, lediglich bei der Frage nach dem Common Name
sollte man "server" angeben. Die Fragen "Sign the certificate? [y/n]" und "1 out of 1 certificate requests certified, commit? [y/n]" muss man
mittels "y" bejahen.
Als nächstes erstellen wir die Schlüssel für den Client:
-
./build-key client
Eigentlich das gleiche Spielchen wie oben, hier aber für jeden Client einen eindeutigen Bezeichner als "Common Name" angeben!
Die Diffie Hellman Parameter
Als nächstes müssen die DH-Parameter generiert werden, wobei uns OpenVPN auch wieder mit einem Skript unterstützt:
-
./build-dh
Ausgabe (für einen 1024-Bit Schlüssel):
-
Generating DH parameters, 1024 bit long safe prime, generator 2
-
This is going to take a long time -
.................+...........................................
-
...................+.............+.................+.........
-
......................................
Die Key-Files
OpenVPN hat nun ein Unterverzeichnis mit dem Namen keys angelegt in dem sich alle Schlüssel befinden. Alle Dateien, deren Dateiendung *.key ist,
sind besonders schützenswert, da sie die privaten Schlüssel enthalten. Als nächstes sollte man über einen sicheren Kanal die Client-Schlüssel und das CA-Zertifikat
zum Client bringen. Empfohlen wird SSH! Wenn jemand die Dateien abfangen kann, ist unsere ganze Sicherheit für die Katz.
-
scp ./ca.crt user@client-machine:/home/user/.vpn/
-
scp ./client.* user@client-machine:/home/user/.vpn/
Doppelte Sicherheit
Um unser VPN vor den sogenannten ManInTheMiddle-Attacken zu sichern, nutzen wir eine doppelte Verschlüsselung mittels den Secret-Keys und dem Zertifikat. Die benötigte
Konfiguration ist sehr simpel:
-
mkdir -p /etc/openvpn/privnet
-
mv /usr/share/openvpn/easy-rsa/keys/* /etc/openvpn/privnet/
-
#everytime you update openvpn you might lose these files creating a backup is only a good idea! -
tar cfzp /root/openvpn-privnet.tar.gz /etc/openvpn/privnet/
-
chmod 400 /root/openvpn-privnet.tar.gz
-
chmod 700 /etc/openvpn/privnet
Konfiguration des Servers
Nach einigem Rumprobieren hat sich bei mir die folgende Konfiguration als funktional erwiesen (Datei /etc/openvpn/openvpn.conf):
-
-
# non default port to prevent worm attacks! -
port 11194 -
# the tun-device did not work for me! -
dev tap
-
proto tcp-server
-
tls-server
-
ca privnet/ca.crt -
cert privnet/server.crt -
key privnet/server.key -
dh privnet/dh2048.pem
-
mode server
-
duplicate-cn
-
ifconfig 10.1.0.1 255.255.255.0 -
ifconfig-pool 10.1.0.2 10.1.0.11 255.255.255.0
-
# ip range for openvpn client -
ifconfig-pool-persist ipp.txt
-
keepalive 10 120
-
comp-lzo
-
user nobody
-
group nobody
-
persist-key
-
persist-tun
-
resolv-retry infinite
-
status openvpn-status.log
-
verb 1 -
log openvpn.log
-
push "dhcp-option DNS 10.1.0.1" -
# push DNS entries to openvpn client -
push "route-gateway 10.1.0.1" -
# push default gateway -
push "route 10.1.0.0 255.255.255.0 10.1.0.1"
Service automatisch starten
Als Nächstes binden wir den openVPN-Service in unser default-runlevel ein, so dass dieser bei jedem Reboot (was nicht allzu häufig passieren sollte ;-))
automatisch startet und starten ihn auch noch einmal manuell:
-
rc-update add openvpn default
-
/etc/init.d/openvpn start
Vorschau
Im nächsten Teil dieser HowTo-Serie zeige ich Euch dann, wie man sich unter den unterschiedlichsten Systemen (Linux/Android/...) mit dem VPN verbindet.
Windows kann ich leider nicht beschreiben, da ich in meinem Umfeld kein Windows mehr greifbar habe, um die Verbindung zu testen! Der dritte Teil wird dann auf dem
Server ein Transparenter Tor-Proxy eingerichtet, so dass alle Netzwerkzugriffe über das VPN nach aussen dann durch das Tor-Netzwerk geroutet werden.
Willkommen zum zweiten Teil meiner kleinen HowTo-Serie. Heute werde ich Euch zeigen, wie man einem Android-Handy zu einem Zugang zum OpenVPN-Server aus dem 



