Comment créer un VPN Killswitch à l’aide d’iptables sur Linux
Objectif
Utilisez iptables pour bloquer toutes les connexions Internet au cas où votre VPN serait déconnecté.
Distributions
Cela fonctionnera sur n’importe quelle distribution Linux.
Exigences
Une installation Linux fonctionnelle avec des privilèges root.
Conventions
- # – nécessite que les commandes Linux données soient exécutées avec les privilèges root, soit directement en tant qu’utilisateur root, soit en utilisant la commande
sudo - $ – nécessite que des commandes Linux données soient exécutées en tant qu’utilisateur régulier non privilégié
Introduction
Si vous êtes connecté à un VPN, vous avez besoin d’un killswitch. Non, ce n’est pas aussi metal qu’il n’y paraît. Il s’agit simplement d’un mécanisme qui arrête votre connexion Internet lorsque vous êtes déconnecté du VPN. Il vous protège contre la fuite par inadvertance d’informations sensibles sur Internet lorsque la connexion VPN est interrompue.
Certains services VPN fournissent aux clients un killswitch intégré, mais aucun n’est aussi fiable qu’en utilisant iptables. Étant donné qu’iptables est indépendant de votre service VPN, et qu’il est intégré dans le noyau lui-même, il n’échouera pas lorsque votre VPN le fera. Iptables est également une technologie de sécurité éprouvée qui peut et va protéger votre ordinateur.
Sysctl
Avant de commencer à créer des règles iptables, vous devez apporter quelques modifications à la configuration sysctl. Dans certaines distributions, il se trouve dans /etc/sysctl.d/99-sysctl.conf. D’autres l’ont sur /etc/sysctl.conf. Ouvrez ce fichier, recherchez la ligne suivante et modifiez-la pour qu’elle corresponde à l’exemple ci-dessous.
net.ipv4.ip_forward=1Ensuite, ajoutez les lignes suivantes au bas du fichier. Assurez-vous de modifier les interfaces pour qu’elles correspondent à celles de votre machine.
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
Enregistrez et quittez. Puis exécutez :
sysctl -p
Configurer le document
Vous pouvez maintenant créer un fichier pour vos règles. Peu importe où vous le fabriquez, alors faites-en un. Il sera appelé ipv4 dans ce guide.
Démarrez le fichier en ajoutant les lignes suivantes. Ils seront le début et la fin du fichier.
*filter
COMMIT
Règles de base
Avant de configurer iptables pour autoriser tout trafic, vous devez changer sa valeur par défaut pour interdire tout trafic. Ajoutez ces trois règles pour supprimer tout le trafic par défaut.
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
Entrée
Il est plus sûr d’autoriser uniquement le trafic entrant provenant de connexions établies ou associées. Configurez-le ensuite.
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Bouclage et ping
Ensuite, autorisez l’interface de bouclage et le ping.
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o tun0 -p icmp -j ACCEPT
Cela suppose que votre connexion VPN est sur tun0. Vérifiez cela avec l’ip a, si vous n’êtes pas sûr.
LAN
Cela n’a pas beaucoup de sens d’arrêter ou de bloquer votre trafic LAN, en particulier sur un réseau domestique, alors autorisez-le également.
-A OUTPUT -d 192.168.1.0/24 -j ACCEPT
DNS
Pour cette prochaine partie, vous allez avoir besoin de connaître l’adresse IP du ou des serveur(s) DNS de votre VPN. Si votre VPN a accès à votre resolv.conf, vous les trouverez probablement là-bas.
-A OUTPUT -d 10.45.16.1 -j ACCEPT
Autoriser le VPN
Bien sûr, vous devez autoriser le VPN lui-même. Il y a deux parties à cela. Vous devez autoriser à la fois le port de service et l’interface.
-A OUTPUT -p udp -m udp --dport 1194 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
Encore une fois, vérifiez le port et l’interface utilisés par votre connexion VPN.
Vous pourriez vous arrêter ici. Cela fonctionnera très bien pour un killswitch. Cependant, si vous voulez qu’iptables fonctionne comme un pare-feu normal et bloque également les connexions sur les ports indésirables, vous pouvez le faire.
À partir de là, vous devez supprimer la dernière ligne qui accepte tout le trafic sur tun0 et la remplacer par des allocations spécifiques pour les ports que vous souhaitez autoriser.
-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
Vous voyez l’idée générale. C’est plus long et plus fastidieux, mais cela vous donne plus de contrôle sur le trafic.
IPv6
IPv6 est vraiment mauvais pour les VPN en ce moment. La plupart ne le prennent pas en charge de manière adéquate, et vos informations peuvent être divulguées via cette connexion. Il est préférable de l’arrêter complètement.
Créez un autre fichier pour IPv6 et bloquez tout.
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
Commettre
Vous devez importer vos fichiers dans iptables pour qu’ils prennent effet. Tout d’abord, éliminez toutes les anciennes règles.
iptables -F && iptables -X
Importez les nouveaux à partir de vos fichiers.
iptables-restore < /tmp/ipv4
ip6tables-restore < /tmp/ipv6
Rendez-le permanent
Par défaut, iptables ne sauvegarde pas son état après un redémarrage. Vous devez le configurer vous-même.
Debian/Ubuntu
Les systèmes basés sur Debian ont un programme appelé iptables-persistent. Il s’agit d’un service qui gère la sauvegarde et le chargement de vos configurations.
Lorsque vous l’installez, iptables-persistent vous demandera si vous souhaitez sauvegarder votre configuration existante. Dites oui.
apt install iptables-persistent
Comme les systèmes Debian exécutent les services au démarrage par défaut, vous n’avez rien d’autre à faire.
Autres systèmes
D’autres systèmes ont plusieurs façons différentes de gérer cela. La première consiste à modifier /etc/sysconfig/iptables-config. Il y aura l’une des deux lignes là-bas. Modifiez celui que vous devez ressembler à ce qui suit.
IPTABLES_SAVE_ON_STOP="yes"
OR
IPTABLES_SAVE_ON_RESTART="yes"
L’autre méthode consiste à utiliser les fonctions de sauvegarde et de restauration d’iptables. Créez un répertoire dans lequel vous souhaitez enregistrer vos règles.
mkdir /etc/iptables/
iptables-save > /etc/iptables/iptables.rules
ip6tables-save > /etc/iptables/ip6tables.rules
Ensuite, créez un script pour charger ces règles au démarrage de votre ordinateur.
#! /bin/bash
iptables-restore < /etc/iptables/iptables.rules;
ip6tables-restore < /etc/iptables/ip6tables.rules;
OpenRC
Les systèmes OpenRC comme Gentoo ont leur propre façon de sauvegarder les configurations.
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
Réflexions finales
L’utilisation d’un killswitch basé sur iptables rend votre VPN beaucoup plus sûr. La fuite de données va totalement à l’encontre de l’objectif de l’utilisation d’un VPN, donc l’arrêt des fuites devrait être une priorité absolue.
Ne faites pas confiance aux killswitches intégrés aux clients VPN. La plupart ne fonctionnent pas. La seule façon de vraiment s’assurer que vos données ne fuient pas est de le faire vous-même avec iptables.
