Ich hatte das gleiche Setup und "VPN Kill Switches" sind schwieriger als man denkt.
Nach Ihrer Spezifikation, die lautet "Bestimmte Apps beenden, wenn das VPN ausfällt", gibt es eine einfache Lösung.
Unter Ubuntu verfügt der Netzwerkmonitor über Rückrufe für Netzwerkereignisse, sodass Sie ein Skript schreiben können, um die gewünschten Apps zu beenden. Beispiel folgt:
Bearbeiten /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb
:
#!/usr/bin/env ruby
if ARGV == [ 'tun0', 'vpn-down' ]
`pkill -f transmission`
`pkill -f deluge`
end
Die machen es ausführbar: chmod 755 /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb
und genießen :-)
Dieses Skript befindet sich in Ruby (daher ist Ruby erforderlich), kann jedoch trivial in ein Shell-Skript konvertiert werden.
Es wird auch davon ausgegangen, dass der VPN-Adapter tun0
der Standard für OpenVPN-Konfigurationen ist.
ARGV
begann mit'tun0'
für eine lange Zeit und wechselte plötzlich zu'tun1'
ohne Vorankündigung.if ARGV.last == 'vpn-down'
Ich hatte das gleiche Bedürfnis und entwickelte meine eigene Lösung, da es unter Linux anscheinend kein spezielles Tool dafür gibt. Geöffnete Anwendungen müssen nicht gelöscht / geschlossen werden! :) :)
Sie müssen die iptables-Firewall einrichten, damit Ihr Computer NUR eine Verbindung zu bestimmten VPN-Servern herstellen kann (außer lokalem Datenverkehr ist kein anderer Datenverkehr zulässig, sodass keine "Lecks" auftreten). Hier ist ein Skript dafür (im Web gefunden):
Sie müssen die Tabelle einrichten
servers=()
. Geben Sie einfach die IP-Adressen Ihrer bevorzugten VPN-Server an.Überprüfen Sie auch, ob andere Variablen am Anfang des Skripts richtig eingestellt sind, da sonst Ihre gesamte Verbindung blockiert wird.
Stellen Sie sicher, dass iptables gesichert wird mit:
(wiederherstellen mit
sudo iptables-restore < working.iptables.rules
)Es unterstützt TCP- und UDP-Verbindungen. Wenn Sie nur eine dieser Verbindungen benötigen, entfernen Sie unerwünschte zwei Leitungen aus der
for ()
Schleife. Überprüfen Sie auch, ob Ihr Provider dieselben Ports verwendet - möglicherweise unterschiedlich.Führen Sie dieses Skript mit z
sudo /home/user/vpn.sh
.Wenn Sie es beim Booten laden möchten (iptables wird normalerweise nach dem Neustart zurückgesetzt), fügen Sie Ihrer
/etc/rc.local
Datei zB Zeile wie hinzubash /home/user/vpn.sh
.Der nächste Teil ist VPN Auto-Connector & Monitor. Hier ist meine eigene Erfindung dafür:
Es stellt beim Start eine automatische Verbindung her und überwacht Ihre Verbindung mit einem bestimmten Intervall (
amount=10
gibt ein Intervall von 10 Sekunden an) und stellt bei einem Verbindungsverlust wieder eine Verbindung her. Ich habe eine Protokollierungsfunktion und einige andere Optionen.Überprüfen Sie die Verwendung Ihrer Verbindungs-UUIDs
nmcli con show
und fügen Sie Ihre Favoriten (die mit den der Firewall hinzugefügten IP-Adressen übereinstimmen) zurvpn=()
Tabelle hinzu. Jedes Mal wird zufällig eine in dieser Tabelle angegebene Verbindung ausgewählt.Sie können es zu Ihrem Autostart hinzufügen (benötigt kein Sudo-Privileg). Hier ist ein Beispiel, wie man es im Terminal startet:
... und so sieht es im Terminal aus:
... und so sieht ein auslaufsicherer Ping aus, nachdem Ihre VPN-Verbindung unterbrochen wurde:
Genießen :)
quelle
/etc/rc.local
?Ich konnte mit UFW einen einfachen VPN-Kill-Switch einrichten. Es funktioniert mit allen VPNs, die ich habe.
Hier sind meine UFW-Einstellungen:
Funktioniert bei mir ganz gut :)
quelle
sudo ufw allow out 443/tcp
erlaubt aber sicheres Durchsickern der Website, wenn das VPN nicht verbunden ist. Möchtest du das nicht aufhalten? Eine HTTPS-Site mit AJAX oder WebSockets stellt möglicherweise selbst eine Verbindung im Hintergrund her, möglicherweise über einen JavaScript-Timer.Ich habe dieses Problem gelöst, indem ich Ufw so eingerichtet habe, dass der gesamte ausgehende Datenverkehr blockiert wird, und dann alle VPN-Knoten auf die Whitelist gesetzt habe, indem ich auf ihre individuellen IP-Adressen verwiesen habe. Dies ist nicht so lästig, wie es sich anhört: VPNs ermöglichen meiner Erfahrung nach die Verwendung der DNS-Suche, um ihre verschiedenen IP-Adressen abzurufen.
Ich habe dazu ein PHP-Programm namens ufw-vpn geschrieben . Ich habe es für ein paar Jahre benutzt, mit verschiedenen kleinen Verbesserungen im Laufe der Zeit. Sie müssen natürlich PHP und Git installiert haben, wenn Sie es klonen möchten, anstatt es herunterzuladen.
Sie können es auch mit wget abrufen:
Führen Sie dann den Befehl aus, um zu überprüfen, ob er in Ordnung ist (ohne Parameter wird nur eine Syntaxnachricht gerendert):
Vorausgesetzt, Ihr VPN unterstützt dies, können Sie eine vollqualifizierte Domäne verwenden, um eine Liste der Server für eine Region abzurufen (diese finden Sie in der Dokumentation Ihres Anbieters oder möglicherweise in der Supportabteilung):
Das sollte Ihnen eine große Liste von Firewall-Regeln geben, die Sie hinzufügen müssen. Um sie einfach zu installieren, können Sie einfach Folgendes tun:
Von Zeit zu Zeit aktualisieren VPN-Anbieter ihre IP-Adressen, daher müssen Sie Ihre IP-Adressen entsprechend aktualisieren. Sie können dies über ein Diff tun:
Für einen Unterschied lohnt es sich, die Regeln zu überprüfen, bevor Sie dies ausführen, da dadurch alles gelöscht wird, was nicht zum VPN gehört. Wenn Sie also benutzerdefinierte Regeln haben, müssen diese vor dem Ausführen entfernt werden.
Weitere Dokumente sind im Repo verfügbar, und alles ist Open Source, sodass Sie den Code auf Sicherheitsprobleme überprüfen können. Fehlerberichte und Funktionsvorschläge sind sehr willkommen.
quelle