Installation Openvpn auf einem Raspberry Pi für Ubuntu und Android
Ich wollte schon länger mal auf meinem “Amsterdamer Raspberry Pi” einen Openvpn Server installieren. Ziel ist es, den Netzwerkverkehr auf einem Ubuntu Rechner und einen Android Gerät in öffentlichen WLAN Verkehr verschlüsselt über einen Server zu leiten.
Da ich demnächst auf dem Chaos Communication Congress in Hamburg sein werde und dort vielleicht die “Hackerdichte” höher sein dürfte hatte ich jetzt mal einen richtigen Grund dafür.
Die Installation ist etwas kniffelig und teilt sich auf in vier Schritte
- Installation der Firewall ufw
- Installation des Openvpn Servers auf Raspbian
- Erstellen der notwendigen Zertifikate
- Konfiguration des Openvpn Clients auf Ubuntu
- konfiguration des Openvpn Clients auf Android
###1. Installation der Firewall ufw
Die Installation folgt im wesentlichen dieser Anleitung. Zuerst auf dem Pi installieren
apt-get update
apt-get install ufw
Status prüfen
ufw status
Status: inactive
Jetzt erst einmal sicherstellen das gleich mit meinem SSH Port weiter reinkomme und die Firewall starten
ufw allow $custom ssh port
Rules updated
Rules updated (v6)
ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)
Firewall is active and enabled on system startup
ufw status
Status: active
Natürlich noch die weiteren Ports erlauben die man auf dem Server betreiben möchte.
###2. Installation des Openvpn Servers auf Raspbian
Bei dem Anteil der Openvpn Schritte bin ich im wesentlichen dieser Anleitung gefolgt. Nur bei den Pfaden gab es Raspbian spezifische Änderungen
apt-get install openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
cd /etc/openvpn
In der Serverkonfiguration die Schlüssellänge erhöhen, DNS einstellen, Redirect Gatway erlauben und Nutzer auf Nobody umstellen
vi server.conf
dh dh2048.pem
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
user nobody
group nogroup
Dem Raspbian erlauben das wir IP Verkehr weiterleiten (temporär und für immer)
echo 1 > /proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
Die Firewall anpassen
ufw allow 1194/udp
vi /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
vi /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
/etc/init.d/ufw restart
###3. Erstellen der notwendigen Zertifikate
Die Zertifikate kann man natürlich auch mit einer eigenen CA erstellen aber um die Komplexität am Anfang zu reduzieren starte ich erst mal mit dem Standardweg von Openvpn.
sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa
mkdir /etc/openvpn/easy-rsa/keys
cd /etc/openvpn/easy-rsa/vars
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
cd /etc/openvpn/easy-rsa/
. ./vars
./clean-all
./build-ca
./build-key-server serve
cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
/etc/init.d/openvpn start
/etc/init.d/openvpn status
./build-key client1
./build-key client2
###4. Konfiguration des Openvpn Clients auf Ubuntu
Auf dem Server erstellen wir zuerst die Konfiguration und packen alles zusammen für den Transfer auf dem Client
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn
vi client.ovpn
remote your.openvpn-server.de 1194
# Downgrade privileges after initialization (non-Windows only)
user nobody
group no group
tar czvf openvpn-client.tar.gz client1.crt client1.key client.ovpn ca.crt
Auf dem Client packen wir das alles aus
mkdir openvpn
cd openvpn/
scp vpnserver:/home/hbauer/openvpn-client.tar.gz .
tar xvzf openvpn-client.tar.gz
Über das Netzwerkicon in der Ubuntu Menuleiste habe ich dann ein Openvpn Netzwerk erstellt
###5. Konfiguration des Openvpn Clients auf Android
Auf den Ubuntu Rechner habe ich das Paket mit den Zertifikaten und der Konfiguration kopiert, ausgepackt und das Openvpn Configfile angepasst
cd Daten/openvpn/
mkdir android1
cd android1/
scp tor:/home/hbauer/openvpn-client2.tar.gz .
tar xzvf openvpn-client2.tar.gz
vi client.ovpn
ca ca.crt
cert client2.crt
key client2.key
Die CRT und Key Dateien dann auf das Android Gerät kopieren und die App OpenVpn Connect aus Play Store installieren. Dort kann man dann die Konfiguration einfach importieren und den Openvpn Dienst starten.
Auf meineip.de kann man dann prüfen ob man mit der lokalen oder der IP Adresse des Openvpn Servers im Internet surft.