J'avais la même configuration, et les "VPN kill switches" sont plus délicats qu'on ne le pense.
Cependant, en suivant votre spécification, qui se lit comme "tuer certaines applications lorsque le VPN tombe", il existe une solution simple.
Sur Ubuntu, le moniteur réseau a des rappels pour les événements réseau, de sorte que vous pouvez écrire un script pour tuer les applications que vous souhaitez. Voici un exemple:
Modifier /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb
:
#!/usr/bin/env ruby
if ARGV == [ 'tun0', 'vpn-down' ]
`pkill -f transmission`
`pkill -f deluge`
end
Le rendre exécutable:, chmod 755 /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb
et profitez :-)
Ce script est en Ruby (il nécessite donc Ruby), mais il peut être converti trivialement en script shell.
Il suppose également que l'adaptateur VPN est tun0
, ce qui est la norme pour les configurations OpenVPN.
ARGV
cela a commencé'tun0'
pendant longtemps et s'est soudainement transformé en'tun1'
sans préavis. Donc, pour que le kill switch fonctionne malgré cette première (inutile) modification de valeur, j'ai dû changer le test enif ARGV.last == 'vpn-down'
J'avais ce même besoin et j'ai développé ma propre solution car il ne semble pas y avoir d'outil dédié pour cela sous Linux. Il n'est pas nécessaire de supprimer / fermer les applications ouvertes! :)
Vous devez configurer le pare-feu iptables, afin que votre machine puisse se connecter UNIQUEMENT aux serveurs VPN spécifiés (aucun autre trafic autorisé, sauf local, il n'y aura donc pas de "fuites"). Voici un script pour cela (trouvé sur le web):
Vous devrez configurer la table
servers=()
. Spécifiez simplement les IP de vos serveurs VPN préférés.Vérifiez également que les autres variables au début du script sont correctement définies, sinon cela bloquera toute votre connexion.
Assurez-vous de faire une sauvegarde iptables avec:
(restaurer avec
sudo iptables-restore < working.iptables.rules
)Il prend en charge les connexions TCP et UDP, si vous n'en avez besoin que d'une, supprimez deux lignes indésirables de la
for ()
boucle. Vérifiez également si votre fournisseur utilise les mêmes ports - peut être différent.Exécutez ce script avec fe
sudo /home/user/vpn.sh
.Si vous voulez le charger au démarrage (iptables se réinitialise généralement après le redémarrage), ajoutez à votre
/etc/rc.local
fichier fe commebash /home/user/vpn.sh
.La partie suivante est le connecteur automatique et le moniteur VPN. Voici mon propre engin pour cela:
Il se connectera automatiquement au démarrage et surveillera votre connexion avec un intervalle donné (
amount=10
donne un intervalle de 10 secondes) et se reconnectera en cas de perte de connexion. Vous avez une fonction de journalisation et quelques autres options.Vérifiez vos connexions UUID en utilisant
nmcli con show
et ajoutez vos favoris (correspondant aux IP ajoutées au pare-feu) auvpn=()
tableau. Chaque fois, il sélectionnera au hasard une connexion spécifiée dans ce tableau.Vous pouvez l'ajouter à votre démarrage automatique (n'a pas besoin du privilège sudo). Voici un exemple comment le démarrer dans le terminal:
... et voici à quoi cela ressemble dans le terminal:
... et voici à quoi ressemble un ping étanche après la coupure de votre connexion VPN:
Prendre plaisir :)
la source
/etc/rc.local
?J'ai pu configurer un simple kill switch VPN avec UFW. Cela fonctionne avec tous les VPN que j'ai.
Voici mes paramètres ufw:
Fonctionne très bien pour moi :)
la source
sudo ufw allow out 443/tcp
permet une fuite de site Web sécurisée lorsque le VPN n'est pas connecté. Ne voudriez-vous pas arrêter cela? Un site HTTPS avec AJAX ou WebSockets peut se reconnecter en arrière-plan seul, peut-être via une minuterie JavaScript.J'ai résolu ce problème en configurant Ufw pour bloquer tout le trafic sortant, puis en mettant en liste blanche tous les nœuds VPN en référençant leurs adresses IP individuelles. Ce n'est pas aussi onéreux que cela puisse paraître: les VPN, selon mon expérience, permettent d'utiliser la recherche DNS pour obtenir leurs différentes adresses IP.
J'ai écrit un programme PHP pour ce faire, appelé ufw-vpn . Je l'utilise depuis quelques années, avec diverses petites améliorations apportées au fil du temps. Vous aurez besoin de PHP installé bien sûr, et de Git si vous souhaitez le cloner plutôt que le télécharger.
Vous pouvez également le saisir à l'aide de wget:
Ensuite, exécutez la commande pour vérifier qu'elle semble correcte (sans paramètres, elle affiche simplement un message de syntaxe):
Maintenant, en supposant que votre VPN le prend en charge, vous pouvez utiliser un domaine pleinement qualifié pour obtenir une liste de serveurs pour une région (vous devrez le trouver dans la documentation de votre fournisseur, ou peut-être auprès de son service d'assistance):
Cela devrait vous donner une grande liste de règles de pare-feu à ajouter. Pour les installer facilement, vous pouvez simplement faire ceci:
De temps en temps, les fournisseurs de VPN mettront à jour leurs adresses IP, vous devrez donc mettre à jour les vôtres pour qu'elles correspondent. Vous pouvez le faire via un diff:
Pour un diff, il vaut la peine de vérifier les règles avant de l'exécuter, car cela supprimera tout ce qui n'appartient pas au VPN. Donc, si vous avez des règles personnalisées, elles devront être supprimées avant d'être exécutées.
Plus de documents sont disponibles au référentiel, et tout est open source, vous pouvez donc vérifier le code pour les problèmes de sécurité. Les rapports de bogues et les suggestions de fonctionnalités sont les bienvenus.
la source