Erstellt nach:
 [1] - https://www.linode.com/docs/networking/vpn/set-up-a-hardened-openvpn-server/
 [2] - https://oli.new-lan.de/2015/02/openvpn-crypto-tuning-tls-auth-tls-cipher-tls-version-min-dh-verify-x509-name-cipher-auth-remote-cert-tls/
 [3] - Raspberry PI TUN/TAP-Device: https://blog.doenselmann.com/raspberry-pi-als-openvpn-server/
 [4] - Persistente IP-Tables: https://www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern  
 [5] - Interfaces - https://askubuntu.com/questions/853615/files-in-etc-network-interfaces-d-ignored-but-not-etc-network-interfaces-itse 
 [6] - Compress lz4-v2 instead of lzo - https://forums.openvpn.net/viewtopic.php?t=28372
  
OpenSSL / EasyRSA:
    Für den Server wird ein neues Key-Pair benötigt, welches wir lokal erzeugen und
    anschließend auf den Server uploaden. EasyRSA ist entsprechend vorkonfiguriert,
    sodass nur die folgenden Schritte ausgeführt werden müssen:
        1.) Die "EasyRSA-Start.{bat/sh}" aus dem "EasyRSA"-Verzeichnis ausführen
        2.) $ ./easyrsa build-server-full [NAME] nopass
        3.) $ ./easyrsa gen-dh
        4.) Verschiebe den private Key, das Zertifikat sowie die
            Diffie-Hellmen Parameter auf den VPN-Server
            - private Key:  EasyRSA\pki\private\[NAME].key
            - Zertifikat:   EasyRSA\issued\[NAME].crt
            - DH-Parameter: EasyRSA\pki\dh.pem

Server-Konfiguration:
    1.) Installiere persistente IP-Tables sowie OpenVPN.
        $ apt-get install openvpn iptables-persistent
        
    2.) Lösche unter "/etc/openvpn" die Verzeichnise "server" und "client"
    
    3.) Erstelle das Verzeichnis "VPN" und kopiere die folgenden Dateien hinen:
        - ca.crt (aus OpenVPN/Config)
        - SharedSecret.psk (aus OpenVPN/Config)
        - dh.pem (siehe "OpenSSL / EasyRSA")
        - den private Key (siehe "OpenSSL / EasyRSA")
        - das Zertifikat (siehe "OpenSSL / EasyRSA")
        
    4.) Erstelle das Verzeichnis "logs"
    
    5.) Kopiere die Server-Config (Server.conf) auf den Server
        in das Verzeichnis /etc/openvpn
        
    6.) Ersetze "[NAME]" in der Server-Config durch den Namen des Server-Zertifikats und
        "[DNS-SERVER-IP]" durch die IP des lokalen DNS-Servers:
        $ nano /etc/openvon/server.conf
        
    7.) Lege für OpenVPN einen eigenen Benutzer und eine Gruppe an:
        $ adduser --system --shell /usr/sbin/nologin --no-create-home ovpn
        $ groupadd ovpn
        $ usermod -g ovpn ovpn
        
    8.) Setze die Berechtigungen für die Ordner "VPN" und "logs"
        im Verzeichnis /etc/openvon
        $ chmod -R 400 VPN
        $ chmod -R 700 logs
        $ chown -R ovpn:ovpn VPN
        $ chown -R root:root logs
        
    9.) IP-Forwarding aktivieren
        - temporär: $ echo 1 >> /proc/sys/net/ipv4/ip_forward
        - persistent: edit "/etc/sysctl.conf"
            # Packet forwarding
            net.ipv4.ip_forward = 1
            net.inet.ip.fastforwarding = 1
            
    10.) In den IP-Tables das NAT einrichten:
        Im Ordner "IP-Tables" finden sich verschiedene Regel-Listen:
        - "min-rules.ipv4"
            Diese Liste ermöglicht nur das NATing ins Netzwerk des Servers und
            bietet darüber hinaus keinen Schutz.
        - "rules.ipv4"
            Diese Liste sperrt sämtlichen eingehenden Datenverkehr außer SSH und VPN.
            Damit stellt diese Liste die sicherer Variante dar.
            
        Für den Fall, dass "wlan0" genutzt werden soll, müssen die
         - eth0-Regeln mit dem Präfix "#" versehen und bei den
         - wlan0-Regeln das Präfix "#" entfernt werden.
        
        Kopiere eine der IPv4-Listen als "rules.v4" auf den Server
        in das Verzeichnis "/etc/iptables" und aktiviere die Regeln mittels
            $ iptables-restore < /etc/iptables/rules.v4
            
        Passe die Dateiberechtigungen an:
            $ chown -R root:root /etc/iptables
            & chmod -R 740 /etc/iptables
            
    11.) Statische IP
        Editiere die Datei "/etc/network/interfaces" [5]
            Ersetze "source-directory /etc/network/interfaces.d"
            mit "source /etc/network/interfaces.d/*"
        Erstelle unter "/etc/network/interfaces.d/" die Datei "eth0.conf" mit folgendem Inhalt:
            auto eth0
            iface eth0 inet static
              address [Adresse des PI's]
              netmask 255.255.255.0
              network [Internes Netz]
              broadcast [Broadcast-Adresse]
              gateway [Netzwerk-Gateway]
              dns-nameservers [DNS-Nameserver]     
            
    12.) OpenVPN starten
        $ service openvpn start
        
Client-Konfiguration (nutzt die Dateien aus dem Verzeichnis "Config"):
    1.) Lege die client.ovpn in das Konfigurations-Verzeichnis von OpenVPN
    
    2.) Kopiere die folgenden Daten in einen neuen Ordner "VPN" neben
        der Konfigurations-Datei:
        - ca.crt
        - SharedSecret.psk
        - [User].crt
        - [User].key
        
    3.) Ersetze in der client.ovpn in Zeile 2 "[SERVER-IP]" mit der öffentlichen IP
        des VPN-Servers, [Port] mit dem Port, auf dem das VPN operiert.