OpenVPN ist eine gute Möglichkeit sicher in „freien“ Netzwerken zu surfen. Mit einem VPN wird der gesamte Datenverkehr verschlüsselt zu dem Server übertragen und dort erst wieder entschlüsselt. Der Client „nutzt“ dann auch die IP Adresse des Servers, wodurch die eigene IP Adresse für einen dritten nicht mehr sichtbar ist. In dieser Anleitung richten wir einen OpenVPN Server unter Debian 8 Jessie ein und konfigurieren danach einen Client unter Linux Mint. Die Konfiguration wurde extra so angepasst, dass sie sehr sicher ist.

1.OpenVPN Server installieren

Im ersten Schritt installieren wir den OpenVPN Server. Dazu einfach folgenden Befehl eingeben:

apt-get install openvpn easy-rsa

2.Zertifizierungsstelle einrichten

Damit die Verbindung nachher verschlüsselt ist, müssen wir uns eine Zertifizierungsstelle einrichten. Diese erstellt später die Zertifikate für unseren Client / Server.

make-cadir /etc/openvpn/easy-rsa

Nachdem wir dies erledigt habe, können wir die Standardwerte noch anpassen. Dies ist nicht dringend notwendig, da es mit diesen Werten auch funktioniert.

nano /etc/openvpn/easy-rsa/vars

Hier kann man jetzt das Land auf „DE“ setzen und die restlichen Werte anpassen. Der Fantasy sind keine Grenzen gesetzt.

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

3.Zertifikate erstellen

Nachdem wir die Zertifizierungsstelle eingerichtet haben, können wir nun unsere eigenen Zertifikate erstellen. Dazu wechseln wir ins neu erstelle Verzeichnis und führen folgende Befehle aus:

cd /etc/openvpn/easy-rsa/
source ./vars
./clean-all
./build-dh 2048
./build-ca

Die Fragen bei „build-ca“ könnt ihr einfach mit „Enter“ bestätigen.

Nun erstellen wir uns einen privaten Key für unseren OpenVPN Server. Ich nenne diesen Server „server“. Ihr könnt hier jeden beliebigen anderen Namen verwenden.

./build-key-server server

Hier könnt ihr wieder die Fragen mit „ENTER“ bestätigen.

Optional könnt ihr noch ein „Challenge password“ festlegen, was die Sicherheit erhöht.

Zum Schluss müsst ihr „Sign the certificate“ und „1 out of 1 certificate requests certified“ mit „y“ bestätigen.

Nun erstellen wir das Zertifikat für unseren ersten VPN Client. Dieser heißt bei mir „VPNClient1“. Dies kann jedoch auch jeder andere Name sein.

./build-key VPNClient1

Auch hier bestätigen wir wieder alle Fragen mit „ENTER“.

Nun erstellen wir uns noch einen TLS Key, um alle Pakete zu signieren.

cd keys/
openvpn --genkey --secret ta.key

Wenn ihr euch nun mittels „ls“ alle Dateien im Verzeichnis „/etc/openvpn/easy-rsa/keys“ anschaut, dann sollte es so aussehen.

ls /etc/openvpn/easy-rsa/keys

Danach kopieren wir die nun erstellten Dateien ins richtige Verzeichnis:

cp ca.crt ca.key dh2048.pem server.crt server.key ta.key /etc/openvpn

4.Konfigurationsdateien erzeugen

4.1 Server Konfiguration

Nun erstellen wir uns Konfigurationsdateien für den OpenVPN Server.

Dazu gebt ihr folgenden Befehl ein:

cd /etc/openvpn/

echo "port 1194
;proto tcp
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
status openvpn-status.log
verb 3
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "explicit-exit-notify 3"
tls-auth ta.key 0
tls-version-min 1.2
cipher AES-256-CBC
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA" > server.conf

Nun habt ihr die Datei „server.conf“ erzeugt mit dem benötigten Inhalt.

4.2 Client Konfiguration anpassen

Dazu führt ihr folgenden Befehl aus:

cd /etc/openvpn/

echo "client
dev tun
proto udp
remote eureDomain.de 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ns-cert-type server
tls-version-min 1.2
cipher AES-256-CBC
auth SHA512
key-direction 1
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA
<ca>
$(cat /etc/openvpn/easy-rsa/keys/ca.crt)
</ca>
<cert>
$(cat /etc/openvpn/easy-rsa/keys/VPNClient1.crt)
</cert>
<key>
$(cat /etc/openvpn/easy-rsa/keys/VPNClient1.key)
</key>
<tls-auth>
$(cat /etc/openvpn/ta.key)
</tls-auth>" > VPNClient1.ovpn

Nun existiert eine Datei „VPNClient1.ovpn“. Diese Datei müsst ihr nun öffnen und euren OpenVPN Server eintragen:

nano VPNClient1.ovpn

Dort die Zeile abändern
remote euerServer 1194

"euerServer" ersetzt ihr durch den DNS Namen eures Servers oder dessen IP Adresse
Die "1194" lässt ihr stehen, da dies der Port ist

Nun downloaded ihr euch die Datei „VPNClient1.ovpn“, da ihr diese auf eurem Client benötigt. Den Download könnt ihr mittels WinSCP erledigen.

4.2.1 weitere Clients anlegen

Wenn ihr weitere VPN Clients anlegen wollt, dann müsst ihr folgendes tun:

cd /etc/openvpn/easy-rsa/
./build-key VPNClientX

Nun habt ihr ein Zertifikat erstellt. Dieses müsst ihr nun im nachfolgenden Befehl benutzten. Das heißt, dass ihr folgende 3 Zeilen pro Client abändern müsst:

$(cat /etc/openvpn/easy-rsa/keys/VPNClientX.crt)
$(cat /etc/openvpn/easy-rsa/keys/VPNClientX.key)
VPNClientX.ovpn

Danach führt ihr dann das angepasste Script aus:

cd /etc/openvpn/

echo "client
dev tun
proto udp
remote eureDomain.de 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ns-cert-type server
tls-version-min 1.2
cipher AES-256-CBC
auth SHA512
key-direction 1
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA
<ca>
$(cat /etc/openvpn/easy-rsa/keys/ca.crt)
</ca>
<cert>
$(cat /etc/openvpn/easy-rsa/keys/VPNClientX.crt)
</cert>
<key>
$(cat /etc/openvpn/easy-rsa/keys/VPNClientX.key)
</key>
<tls-auth>
$(cat /etc/openvpn/ta.key)
</tls-auth>" > VPNClientX.ovpn

5.Firewall anpassen

Nun müssen wir die Firewall des Servers noch anpassen, damit die Pakete vom Client weitergeleitet werden. Dies könnt ihr mit iptables ODER mit ufw machen.

5.1 IPv4 forwarding aktivieren

Um diese Funktion zu aktivieren müsst ihr nachfolgenden Befehl eingeben:

sed -i '/\<net.ipv4.ip_forward\>/c\net.ipv4.ip_forward=1' /etc/sysctl.conf
echo 1 > /proc/sys/net/ipv4/ip_forward

5.2.1 Firewall Regeln erstellen mit iptables

Nun gibt ihr nachfolgende Befehle ein:

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT 
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT 
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

5.2.2 Firewall Regeln speichern

Damit ihr nach einem Neustart noch eure Firewall Regeln habt, müsst ihr folgendes Programm installieren:

apt-get install iptables-persistent

Nach der Installation führt ihr folgenden Befehl aus:

iptables-save > /etc/iptables/rules.v4

Nun stehen eure Firewall Regeln nach einen Reboot noch zur Verfügung.

5.3 Firewall Regeln erstellen mit ufw

Wenn ihr die ufw Firewall noch nicht kennt, dann könnt ihr diesen Beitrag lesen. Für diese Befehle muss ufw bereits installiert sein.

Der folgende Befehl gibt den UDP Port für euren Server frei:

ufw allow 1194/udp

Danach geht ihr in die ufw Konfiguration und ändert folgendes ab:

nano /etc/default/ufw

DEFAULT_FORWARD_POLICY="DROP"

zu

DEFAULT_FORWARD_POLICY="ACCEPT"

Nun müsst ihr noch eine Datei bearbeiten:

nano /etc/ufw/before.rules

In dieser Datei sollten schon einige Kommentare stehen. Die MARKIERTEN Zeilen müsst ihr einfügen.

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# 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

# Don't delete these required lines, otherwise there will be errors
*filter

Nun könnt ihr eure Firewall aktivieren.

ufw enable

Jetzt solltet ihr überprüfen, ob die Portfreigabe funktioniert hat.

ufw status

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
1194                       ALLOW       Anywhere
22                         ALLOW       Anywhere (v6)
1194                       ALLOW       Anywhere (v6)

6.OpenVPN Server starten

Nun starten wir den OpenVPN Server

systemctl enable openvpn.service && systemctl start openvpn.service

Um den Status zu überprüfen, kann folgender Befehl ausgeführt werden.

systemctl status openvpn*.service

7.Client starten

Ich habe mir als Client ein Linux Mint gewählt. Dort müsst ihr einen OpenVPN Client installiert haben. Danach könnt ihr die VPN Verbindung per Terminal mit folgendem Befehl aufbauen:

sudo openvpn --config "/PfadzurDatei/VPNClient1.ovpn"

 

8.Quellen

Unterstützte TLS-Ciphers:

https://community.openvpn.net/openvpn/wiki/Hardening

Überblick aller OpenVPN Parameter:

https://openvpn.net/index.php/open-source/documentation/manuals/65-openvpn-20x-manpage.html

OpenVPN inline:

https://community.openvpn.net/openvpn/wiki/IOSinline

 

 

Teile diesen Beitrag
Christian

Categories:

3 Kommentare

  1. „Challenge password“ hat nichts mit Sicherheit zu tun!
    Und schon gar nicht, wenn die CA selbst signiert wird.
    Das „Challenge password“ ist nur im CSR. – Nicht im KEY und nicht im CRT!

     

    Für iptables (persistent) würde ich ferm empfehlen! Die Rules kann man dort schön einstellen…. und was ein super Vorteil ist: Wenn man sich per SSH auf dem Server befindet – und versehentlich aussperren sollte – kann das mit ferm nicht passieren. Probiert es aus – und ihr seht warum 😉

     

    Was hat dieser Artikel mit härten zu tun?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.