Website-Suche

So erstellen Sie einen VPN-Killswitch mit iptables unter Linux


Objektiv

Verwenden Sie iptables, um alle Internetverbindungen zu blockieren, falls die Verbindung zu Ihrem VPN unterbrochen wird.

Ausschüttungen

Dies funktioniert auf jeder Linux-Distribution.

Anforderungen

Eine funktionierende Linux-Installation mit Root-Rechten.

Konventionen

  • # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder mit dem Befehl sudo
  • $ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden

Einleitung

Wenn Sie mit einem VPN verbunden sind, benötigen Sie einen Killswitch. Nein, es ist nicht so metallisch, wie es sich anhört. Es ist nur ein Mechanismus, der Ihre Internetverbindung stoppt, wenn Sie vom VPN getrennt werden. Es schützt Sie davor, versehentlich vertrauliche Informationen ins Internet zu gelangen, wenn die VPN-Verbindung unterbrochen wird.

Einige VPN-Dienste bieten Clients einen integrierten Killswitch, aber keiner ist so zuverlässig wie die Verwendung von iptables. Da iptables unabhängig von Ihrem VPN-Dienst ist und in den Kernel selbst integriert ist, wird es nicht versagen, wenn Ihr VPN dies tut. Iptables ist auch eine bewährte Sicherheitstechnologie, die Ihren Computer schützen kann und wird.

Sysctl (Englisch)

Bevor Sie mit dem Erstellen von iptables-Regeln beginnen, sollten Sie einige Änderungen an der sysctl-Konfiguration vornehmen. In einigen Distributionen befindet es sich unter /etc/sysctl.d/99-sysctl.conf. Andere haben es unter /etc/sysctl.conf. Öffnen Sie diese Datei, suchen Sie die folgende Zeile, und ändern Sie sie so, dass sie dem Beispiel hier entspricht.

net.ipv4.ip_forward=1

Fügen Sie dann die folgenden Zeilen am Ende der Datei hinzu. Stellen Sie sicher, dass Sie die Schnittstellen so ändern, dass sie mit denen auf Ihrem Computer übereinstimmen.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1

Speichern und beenden. Führen Sie dann Folgendes aus:

sysctl -p

Einrichten des Dokuments

Jetzt können Sie eine Datei für Ihre Regeln erstellen. Es ist nicht wirklich wichtig, wo du es herstellst, also mach einfach eines. In diesem Leitfaden wird es als ipv4 bezeichnet.

Beginnen Sie die Datei, indem Sie die folgenden Zeilen hinzufügen. Sie sind der Anfang und das Ende der Datei.

*filter



COMMIT

Grundregeln

Bevor Sie iptables so konfigurieren, dass jeglicher Datenverkehr zugelassen wird, müssen Sie die Standardeinstellung ändern, um den gesamten Datenverkehr nicht zuzulassen. Fügen Sie diese drei Regeln hinzu, um standardmäßig den gesamten Datenverkehr zu verwerfen.

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP

Eingabe

Am sichersten ist es, nur eingehenden Datenverkehr von etablierten oder verwandten Verbindungen zuzulassen. Richten Sie das als Nächstes ein.

-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Loopback und Ping

Lassen Sie als Nächstes die Loopback-Schnittstelle und den Ping zu.

-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o tun0 -p icmp -j ACCEPT

Dies setzt voraus, dass Ihre VPN-Verbindung auf tun0 steht. Überprüfen Sie dies mit ip a, wenn Sie sich nicht sicher sind.

LAN

Es macht nicht viel Sinn, Ihren LAN-Verkehr herunterzufahren oder zu blockieren, insbesondere in einem Heimnetzwerk, also lassen Sie dies auch zu.

-A OUTPUT -d 192.168.1.0/24 -j ACCEPT

DNS

Für diesen nächsten Teil müssen Sie die IP-Adresse der DNS-Server Ihres VPNs kennen. Wenn Ihr VPN Zugriff auf Ihre resolv.conf hat, werden Sie diese wahrscheinlich dort finden.

-A OUTPUT -d 10.45.16.1 -j ACCEPT

Erlauben Sie das VPN

Natürlich müssen Sie das VPN selbst zulassen. Das besteht aus zwei Teilen. Sie müssen sowohl den Service-Port als auch die Schnittstelle zulassen.

-A OUTPUT -p udp -m udp --dport 1194 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT

Überprüfen Sie erneut den Port und die Schnittstelle, die Ihre VPN-Verbindung verwendet.

Hier könnten Sie anhalten. Das funktioniert gut für einen Killswitch. Wenn Sie jedoch möchten, dass iptables als reguläre Firewall fungiert und auch Verbindungen an unerwünschten Ports blockiert, können Sie dies tun.

Von hier aus löschen Sie die letzte Zeile, die den gesamten Datenverkehr auf tun0 akzeptiert, und ersetzen sie durch bestimmte Berechtigungen für die Ports, die Sie zulassen möchten.

-A OUTPUT -o tun0 -p tcp --dport 443 -j ACCEPT
-A OUTPUT -o tun0 -p tcp --dport 80 -j ACCEPT

-A OUTPUT -o tun0 -p tcp --dport 993 -j ACCEPT
-A OUTPUT -o tun0 -p tcp --dport 465 -j ACCEPT

Du verstehst die allgemeine Idee. Es ist länger und mühsamer, aber es gibt Ihnen mehr Kontrolle darüber, welcher Datenverkehr durchkommt.

IPv6 (Englisch)

IPv6 ist im Moment wirklich schlecht für VPNs. Die meisten unterstützen es nicht ausreichend, und Ihre Informationen können über diese Verbindung nach außen dringen. Es ist am besten, es ganz abzuschalten.

Erstellen Sie eine weitere Datei für IPv6 und blockieren Sie alles.

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP

Begehen

Sie müssen Ihre Dateien in iptables importieren, damit sie wirksam werden. Räumen Sie zunächst alle alten Regeln auf.

iptables -F && iptables -X

Importieren Sie die neuen aus Ihren Dateien.

iptables-restore < /tmp/ipv4
ip6tables-restore < /tmp/ipv6

Machen Sie es dauerhaft

Iptables speichert seinen Zustand nach einem Neustart standardmäßig nicht. Das müssen Sie selbst einrichten.

Debian/Ubuntu

Debian-basierte Systeme haben ein Programm namens iptables-persistent. Es handelt sich um einen Dienst, der das Sichern und Laden Ihrer Konfigurationen übernimmt.

Wenn Sie es installieren, werden Sie von iptables-persistent gefragt, ob Sie Ihre vorhandene Konfiguration speichern möchten. Sagen Sie ja.

apt install iptables-persistent

Da Debian-Systeme standardmäßig Dienste beim Start ausführen, müssen Sie nichts weiter tun.

Andere Systemd

Andere Systeme haben verschiedene Möglichkeiten, dies zu handhaben. Die erste besteht darin, /etc/sysconfig/iptables-config zu bearbeiten. Dort befindet sich eine von zwei Linien. Bearbeiten Sie diejenige, die wie folgt aussehen soll.

IPTABLES_SAVE_ON_STOP="yes"

OR

IPTABLES_SAVE_ON_RESTART="yes"

Die andere Möglichkeit besteht darin, die Speicher- und Wiederherstellungsfunktionen von iptables zu verwenden. Erstellen Sie ein Verzeichnis, in dem Sie Ihre Regeln speichern möchten.

mkdir /etc/iptables/
iptables-save > /etc/iptables/iptables.rules
ip6tables-save > /etc/iptables/ip6tables.rules

Erstellen Sie dann ein Skript, um diese Regel beim Hochfahren Ihres Computers zu laden.

#! /bin/bash

iptables-restore < /etc/iptables/iptables.rules;
ip6tables-restore < /etc/iptables/ip6tables.rules;

OpenRC (Englisch)

OpenRC-Systeme wie Gentoo haben ihre eigene Art, die Konfigurationen zu speichern.

rc-service iptables save
rc-service ip6tables save

rc-service iptables start
rc-service ip6tables start

rc-update add iptables default
rc-update add ip6tables default

Abschließende Gedanken

Die Verwendung eines iptables-basierten Killswitches macht Ihr VPN viel sicherer. Das Durchsickern von Daten macht den Zweck der Verwendung eines VPN völlig zunichte, daher sollte das Stoppen von Lecks oberste Priorität haben.

Vertrauen Sie nicht den sogenannten Killswitches, die in VPN-Clients integriert sind. Die meisten funktionieren nicht. Der einzige Weg, um wirklich sicherzustellen, dass Ihre Daten nicht durchsickern, besteht darin, dies selbst mit iptables zu tun.

Verwandte Artikel: