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!
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 &
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
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
#!/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 ...
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!