web-dev-qa-db-fra.com

Comment puis-je m'assurer que le trafic de transmission utilise un VPN?

Je voudrais m'assurer que la transmission n'envoie/reçoit du trafic que lorsque le serveur sur lequel elle s'exécute est connecté à un VPN.

Je j'ai trouvé cette question qui est similaire mais je ne veux pas forcer tout le trafic sur le VPN et je n'ai pas été en mesure de trouver un bon guide sur la façon d'utiliser Firestarter à partir de la ligne de commande.

Au lieu de cela, je pensais utiliser ufw, mais je n’ai aucune expérience des pare-feu, et j’espère que la communauté pourra m'aider.

Une de mes idées serait de forcer la transmission à utiliser un port spécifique, par exemple 33442, et à ne permettre ensuite que le trafic à destination et en provenance de ce port à partir de l'adresse IP du serveur VPN. J'ai consulté le guide du serveur Ubuntu et je pense pouvoir faire quelque chose comme ceci:

Sudo ufw enable
Sudo ufw deny port tcp from localhost to any port 33442
Sudo ufa allow port tcp from localhost to VPNIP port 33442
Sudo ufw deny port udp from localhost to any port 33442
Sudo ufa allow port udp from localhost to VPNIP port 33442

Cette logique tient-elle son sel? Comment le ferais-tu? Que devrais-je utiliser pour VPNIP, l'adresse IP publique du serveur VPN, ou devrais-je spécifier la plage de sous-réseau local à laquelle le VPN me connecte?

Merci de votre aide!

31
Evan

Créez le groupe vpnroute:

Sudo groupadd vpnroute

Ajoutez une règle iptables qui rejette toute connexion réseau sortante établie par les membres du groupe vpnroute qui ne passe pas par l’interface tun0:

Sudo iptables -A OUTPUT -m owner --gid-owner vpnroute \! -o tun0 -j REJECT

Lancer le processus de transmission en tant que membre du groupe vpnroute:

Sudo -g vpnroute transmission-gtk &
24
Anne Onyme

Cela fonctionne pour une transmission sans tête, je restreins le trafic en fonction de l'utilisateur qui exécute le service de transmission, 10.0.0.0/8 est votre réseau interne, vous devez le changer pour qu'il corresponde à votre réseau, tun0 est votre interface OpenVPN, eth0 est votre connexion LAN.

Ajoutez Sudo aux commandes, si vous n’êtes pas root:

iptables -F (Nous avons utilisé le commutateur -F pour effacer toutes les règles existantes afin de commencer avec un état propre à partir duquel ajouter de nouvelles règles.)

iptables -L (liste configuration actuelle)

NET=10.0.0.0/8
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT

rendre les iptables persistants après le redémarrage

apt-get install iptables-persistent
service iptables-persistent start
4
TheZeroth

Voici un 'HOW TO' complet pour NOOBS (à l’aide de debian) afin de s’assurer que le groupe d’utilisateurs de la distribution debian (transmission par exemple) achemine uniquement les données via le vpn.

N'UTILISEZ PAS le plus long 'Comment' pour vpn basé sur des scripts système complexes ...! iptables est LA MEILLEURE (et infaillible) MÉTHODE !!! - UTILISER QUELQUES RÈGLES IPTABLES basées sur l'utilisateur et le groupe de transmission pour contrôler le vpn (non comme beaucoup de méthodes de "hack" plus complexes qui utilisent des scripts systemd, des scripts ascendants, etc ...) et c'est tellement simple!

Étape 1 - Configuration: (en supposant que la transmission est installée, l’utilisateur debian-transmission existe donc!)

Sudo apt-get install iptables
Sudo apt-get install iptables-persistent

Étape 2 - Créez le fichier transmission-ip-rules

Sudo nano transmission-ip-rules

et ajoutez le texte dans le bloc de code ci-dessous à partir de #!/bin/bash

IMPORTANT

  • Si votre réseau local n’est pas de la forme 192.168.1.x, modifiez la variable NET pour qu’elle corresponde à votre propre format d’adressage de réseau local !!.
  • Sachez également qu’il est bizarre que 192.168.1.0/25 donne réellement la plage 192.168.1.0-255!
  • Parfois, vos interfaces eth0, tun0 (qui est le vpn), etc. peuvent être différentes - vérifiez avec 'ifconfig' et modifiez-les si nécessaire.
#!/bin/bash
# Set our rules so the debian-transmission user group can only route through the vpn
NET=192.168.1.0/25
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT
# not needed - but added these to properly track data to these interfaces....when using iptables -L -v
iptables -A INPUT -i $IFACE_VPN -j ACCEPT
iptables -A INPUT -i $IFACE_INTERNAL -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# track any forward (NAT) data for completeness - don't care about interfaces
iptables -A FORWARD

Enregistrez le fichier puis exécutez

Sudo iptables -F 
Sudo chmod +x transmission-ip-rules
Sudo ./transmission-ip-rules

puis assurez-vous que ces règles persistent entre les redémarrages avec:

Sudo dpkg-reconfigure iptables-persistent

et appuyez sur oui pour les deux invites. TERMINÉ!

Ce qui est génial avec ce script, c'est qu'il va suivre toutes les données via l'appareil! Lorsque vous publiez

Sudo iptables -L -v

il montrera combien de données vont à quelle interface et de quel côté INPUT ou OUTPUT afin que vous soyez assuré que le script vpn fonctionne correctement. Par exemple;

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
1749K  661M ACCEPT     all  --  tun0   any     anywhere             anywhere                                                                                            
3416K 3077M ACCEPT     all  --  eth0   any     anywhere             anywhere                                                                                            
 362K  826M ACCEPT     all  --  lo     any     anywhere             anywhere                                                                                            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
    0     0            all  --  any    any     anywhere             anywhere                                                                                            

Chain OUTPUT (policy ACCEPT 2863K packets, 2884M bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
 1260  778K ACCEPT     tcp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       tcp spt:9091 owner GID match debian-transmission
    0     0 ACCEPT     udp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       udp spt:9091 owner GID match debian-transmission
1973K 1832M ACCEPT     all  --  any    tun0    anywhere             anywhere                                                                                                     owner GID match debian-transmission
 8880  572K ACCEPT     all  --  any    lo      anywhere             anywhere                                                                                                     owner GID match debian-transmission
13132  939K REJECT     all  --  any    any     anywhere             anywhere                                                                                                     owner GID match debian-transmission reject-with icmp-port-unreachable

Ce script a été testé de manière exhaustive sur les connexions, déconnexions, redémarrages à partir du vpn. Ça marche très bien. La transmission ne peut utiliser que le VPN. Le grand avantage de ce script par rapport aux autres est que je me suis assuré, comme vous pouvez le constater (via iptables -L -v), que vos données correspondent à ce qui est transféré (en ajoutant les règles INPUT (tout) et En avant (tout) pour chaque interface eth0 , vpn (tun0)). Donc vous savez exactement ce qui se passe !!! Les totaux de données ne correspondent pas exactement à la transmission - Malheureusement, je ne peux pas distinguer le côté INPUT de l'utilisateur debian-transmission, et il y aura à la fois un temps système supplémentaire et peut-être d'autres processus utilisant le même VPN, mais vous verrez les données correspondre approximativement. du côté INPUT et environ la moitié de la sortie du vpn confirmant son fonctionnement. Une autre chose à noter - cela prend un certain temps sur une déconnexion de vpn (tout le trafic s’arrête avec la transmission) et se reconnecte pour que la transmission "démarre" sur le nouveau vpn alors ne vous inquiétez pas si cela prend environ 5 minutes pour recommencer à torrent .. .

CONSEIL - google 'MAN iptables' et voyez cet article sur le contrôle de la bande passante si vous voulez savoir, ligne par ligne, comment ce script fonctionne ...

4
Musclehead

Idéalement, vous devez utiliser un client torrent doté d'une fonctionnalité permettant de se lier à une interface spécifique (l'interface VPN).

Deluge fait cela parmi les clients torrent. Ainsi, vous pouvez installer Deluge et configurer l'interface dans les Préférences et vous êtes prêt!

3
user4124