Privacy Handbuch

Wenn man ein VPN verwendet, dann möchte man in der Regel auch die Sicher­heit haben, dass wirklich der gesamte Daten­verkehr, der den Rechner verlässt, durch das VPN geschickt wird.

Uncompliceded Firewall (UFW) Kill-Switch-Konfiguration für VPNs

Mit einer sogenannten Netzwerk-Kill-Switch-Konfiguration für die Uncompliceded Firewall (UFW) kann man das erzwingen und verhindert damit WebRTC Leaks und DNS Leaks oder dass Daten direkt ins Internet geroutet werden, wenn die Verbindung zum VPN-Server gestört ist.

  1. Die Installation und allgemeine Konfiguration von UFW ist hier beschrieben. Falls UFW noch nicht auf dem Rechner vorhanden ist, installiert und aktiviert man die Firewall mit: > sudo apt install ufw
    > sudo ufw enable
  2. Für eine Kill-Switch-Konfiguration der Firewall benötig man die IP-Adresse(n) der VPN-Server, die man unter Linux mit "nslookup" oder "dig" ermitteln kann, falls nicht bekannt.
  3. Für eine neue UFW Konfiguration löscht man zuerst alle aktiven Regeln: > sudo ufw reset
  4. Standardmäßig wird der gesamte aus- und eingehende Traffic blockiert: > sudo ufw default reject outgoing
    > sudo ufw default deny incoming
  5. Durch das virtuelle VPN Interface "tun0" (OpenVPN) bzw. "wg0…N" (Wireguard) ist aus­gehender Datenverkehr erlaubt. (Die folgenden Beispiele sind für OpenVPN. Wenn man Wireguard verwendet, ist "tun0" durch "wg0" zu ersetzen.) Alles erlauben, was raus will: > sudo ufw allow out on tun0 from any to any Man könnte es auch restriktiv konfigurierieren und nur bestimmte Daten via VPN erlauben: > sudo ufw allow out on tun0 http from any to any
    > sudo ufw allow out on tun0 https from any to any

    > sudo ufw allow out on tun0 dns from any to <DNS Server IP>
    Wenn der VPN-Server Port Forwarding anbietet und der eigene Rechner auf bestimmten Ports von außen erreichbar sein soll, könnte man Freigaben definieren (eher seltene Anforderung): > sudo ufw allow in on tun0 from any port 22
  6. Alle anderen Netzwerkschnittstellen dürfen nur mit den VPN-Servern kommunizieren: > sudo ufw allow out from any to <VPN Server1 IP>
    > sudo ufw allow out from any to <VPN Server2 IP>
 

Wenn man öfters zwischen dem Betrieb mit und ohne VPN wechselt, könnte man die Befehle zur Firewall­konfiguration in einem Script zusammen­fassen, dass der NetworkManger beim Starten und Beenden des VPNs ausführt. Ein einfaches Beispiel­script als Vorlage für Anpassungen:

#!/bin/sh

case "$2" in

   vpn-up)
      # UFW Kill-Switch Konfiguration mit VPN
      ufw reset
      ufw default reject outgoing
      ufw default deny incoming
      ufw allow out on tun0 from any to any
      ufw allow out from any to <VPN Server1 IP>
   ;;

   vpn-down)
      # UFW Konfiguration ohne VPN
      ufw reset
      ufw default allow outgoing
      ufw default deny incoming
   ;;

esac

Das Script ist in das Verzeichnis "/etc/NetworkManager/dispatcher.d/" zu kopieren, Eigentümer und Berechtigungen sind anzupassen. Der NetworkManager-dispatcher wird das Script nur ausführen, wenn es "root" gehört und die Berechtigungen korrekt sind:

> sudo cp beispielscript.sh /etc/NetworkManager/dispatcher.d/20-vpn-ufw
> sudo chown root:root /etc/NetworkManager/dispatcher.d/20-vpn-ufw
> sudo chmod 755 /etc/NetworkManager/dispatcher.d/20-vpn-ufw

Zukünftig wird der NetworkManager-dispatcher die Firewallregeln automatisch umschreiben, wenn das VPN aktiviert oder beendet wird. Sollte das nicht funktionieren, muss man evtl. den Dispatcher Service des NetworkManagers bei einigen Distributionen noch aktivieren:

> sudo systemctl enable NetworkManager-dispatcher

Mit folgendem Kommando kann man prüfen, ob es funktioniert und welche Regeln aktiv sind:

> sudo ufw status verbose