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

31

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

J'ai trouvé cette question qui est similaire mais je ne veux pas forcer tout le trafic via le VPN et je n'ai pas pu 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 pas ou peu d'expérience avec les pare-feu, et j'espère que la communauté pourra m'aider.

Une idée que j'avais serait de forcer la transmission à utiliser un port spécifique, disons 33442, puis de n'autoriser le trafic vers et depuis ce port qu'à partir de l'adresse IP du serveur VPN. J'ai vérifié le guide du serveur Ubuntu et je pense qu'il pourrait 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 feriez-vous? Que devrais-je utiliser pour VPNIP, l'adresse IP publique du serveur VPN, ou dois-je spécifier la plage de sous-réseau locale à laquelle le VPN me connecte?

Merci de votre aide!

Evan
la source

Réponses:

25

Créer un vpnroutegroupe:

sudo groupadd vpnroute

Ajoutez une iptablesrègle qui rejette toute connexion réseau sortante établie par les membres du vpnroutegroupe qui ne passe pas par l' tun0interface:

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

Lancer le processus de transmission en tant que membre du vpnroutegroupe:

sudo -g vpnroute transmission-gtk &
Anne Onyme
la source
1
Ceci est exactement ce que je cherchais. Merci!
Taeram
3
Attention: cela ne fonctionne pas avec Deluge, AFAICT car Deluge génère des processus sup. Je l'ai soigneusement testé et ma configuration est correcte - sudo -g vpnroute ping google.com affichera «Destination inaccessible» jusqu'à ce que j'active le VPN sur tun0. Mais l'interface utilisateur de Deluge peut toujours télécharger des torrents, que le VPN soit connecté ou non. Avec pgrep -G vpnroute, j'ai trouvé que c'est parce que seul le processus initial / usr / bin / python est exécuté sous le vpnroute GID, les processus deluge-gtk engendrés ne semblent pas l'être.
happyskeptic
10
Quelqu'un pourrait-il expliquer exactement ce que fait chacune de ces étapes?
ohnoplus
2
La transmission a la capacité d'écouter une adresse spécifique - mais pas une interface spécifique. Lorsque démarré à partir de la ligne de commande, --bind-address-ipv4 $IP_ADDRindiquera à Transmission à quelle adresse se lier. Cela nécessite alors les bonnes règles de routage pour garantir que le trafic arrive au bon endroit. Jetez un œil à cette question pour savoir comment j'ai réussi à le faire.
seanlano
3
@ohnoplus Crée un groupe appelé "vpnroute"; ajoute une règle de pare-feu qui rejette toute connexion réseau sortante établie par les membres de ce groupe qui ne passe pas par le VPN (définie ici comme l'interface "tun0" mais certains systèmes peuvent être différents); démarre le processus de transmission en cours d'exécution en tant que membre du groupe "vpnroute".
TommyPeanuts
4

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/8est votre réseau interne, vous devez le modifier pour correspondre à votre réseau,tun0 votre interface OpenVPN, eth0votre connexion LAN.

Ajoutez sudoaux commandes, si vous n'êtes pas root:

iptables -F (Nous avons utilisé le commutateur -F pour vider toutes les règles existantes, nous commençons donc avec un état propre à partir duquel ajouter de nouvelles règles.)

iptables -L (liste de la 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
TheZeroth
la source
Celui-ci me donne les informations suivantes: $ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --sport 9091 -m owner --gid-owner debian-transmission -o eth0 -j ACCEPT iptables v1.4.12: owner : Mauvaise valeur pour l'option "--gid-owner": "debian-transmission" Suis-je en train de manquer quelque chose?
ohnoplus
Oui, @ohnoplus :) Vous devez d'abord créer le groupe (ou le propriétaire) debian-transmission. Et assurez-vous que vous exécutez l'application en tant que groupe ou utilisateur: groupe.
Joachim
C'était exactement ce dont j'avais besoin pour activer l'interface Web Transmission Remote, merci!
Zane Hooper
4

Voici un «COMMENT FAIRE» complet pour NOOBS (en utilisant Debian) pour vous assurer que le groupe d'utilisateurs de transmission Debian (c'est-à-dire la transmission) achemine uniquement les données via le VPN

N'UTILISEZ PAS le "How to" plus long 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 (pas comme beaucoup de méthodes de piratage plus complexes qui utilisent des scripts systemd, des scripts de montée et de descente, etc.) et c'est tellement simple!

Étape 1 - Configuration: (suppose que la transmission est installée et que l'utilisateur de la transmission Debian 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 !!.
  • Soyez également conscient de la bizarrerie 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 changez 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 aux 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 émettez

sudo iptables -L -v

il montrera combien de données vont à quelle interface et de quel côté INPUT ou OUTPUT afin que vous puissiez être 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. Cela fonctionne 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 voir (viaiptables -L -v) que vos données correspondent à ce qui est transmis par la transmission (en ajoutant des règles INPUT (tout) et Forward (tout) pour chaque interface eth0, vpn (tun0)). Vous savez donc exactement ce qui se passe !!! Les totaux de données ne correspondront pas exactement à la transmission - Malheureusement, je ne peux pas discriminer du côté INPUT vers l'utilisateur de la transmission debian, et il y aura à la fois des frais supplémentaires et peut-être d'autres processus utilisant le même VPN, mais vous verrez les données approximativement correspondre sur le côté INPUT et est environ la moitié sur la sortie pour le vpn confirmant son fonctionnement. Une autre chose à noter - cela prend un certain temps sur une déconnexion vpn (tout le trafic s'arrête avec la transmission) et se reconnecter pour que la transmission démarre sur le nouveau vpn alors ne vous inquiétez pas s'il faut environ 5 minutes pour recommencer le torrent. .

CONSEIL - google 'MAN iptables' et consultez cet article sur la surveillance de la bande passante si vous voulez savoir ligne par ligne comment ce script fonctionne ...

Musclehead
la source
La plage de 192.168.1.0/25 est 192.168.1.0-127.
Zachary822
3

Idéalement, vous devriez utiliser un client torrent qui a une fonctionnalité pour se lier à une interface spécifique (l'interface VPN).

Parmi les clients torrent, Deluge le fait. Vous pouvez donc installer Deluge et configurer l'interface dans les Préférences et c'est prêt!

user4124
la source
Merci pour votre réponse. En fait, je suis assez prêt à utiliser Transmission pour le moment, savez-vous s'il est possible de se lier à une interface spécifique ou à une plage IP (donc il n'utilise que le VPN) avec Transmission? Merci!
Evan
2
@ user4124 Savez-vous comment lier Deluged à une interface réseau spécifique via la ligne de commande ou le webui? Puisque personne ne semble savoir comment faire cela avec Transmission, j'ai essayé Deluge mais je n'ai pas eu de chance jusqu'à présent. Merci!
Evan
3
@Evan vous pouvez spécifier l'adresse IP à laquelle se lier dans Deluge avec listen_interfacedans deluge-console ou Interface dans les options réseau.
Cas
Bien que cela soit vrai, je pense que c'est toujours un mauvais conseil, même si votre seul but est de cacher vos téléchargements de torrent illégaux, vous devez adopter l'anonymat de votre VPN et rechercher des solutions à l'échelle du système et ne fonctionnant pas uniquement pour un seul programme.
redanimalwar