Come posso assicurarmi che il traffico di trasmissione utilizzi una VPN?


31

Vorrei assicurarmi che la trasmissione invii / riceva traffico solo quando il server su cui è in esecuzione è connesso a una VPN.

Ho trovato questa domanda che è simile ma non voglio forzare tutto il traffico attraverso la VPN e non sono stato in grado di trovare una buona guida su come utilizzare Firestarter dalla riga di comando.

Invece stavo pensando di usare ufw, ma ho poca o nessuna esperienza con i firewall e spero che la community possa aiutarmi.

Un'idea che avrei avuto sarebbe stata quella di forzare la trasmissione a utilizzare una porta specifica, diciamo 33442, e quindi consentire il traffico da e verso quella porta solo dall'indirizzo IP del server VPN. Ho controllato la guida del server Ubuntu e penso che potrei fare qualcosa del genere:

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

Questa logica mantiene il suo sale? Come lo faresti? Cosa dovrei usare per VPNIP, l'IP pubblico del server VPN o dovrei specificare l'intervallo di sottorete locale a cui mi connette la VPN?

Grazie per l'aiuto!

Risposte:


25

Crea vpnroutegruppo:

sudo groupadd vpnroute

Aggiungi una iptablesregola che rifiuta qualsiasi connessione di rete in uscita stabilita dai membri del vpnroutegruppo che non passa attraverso l' tun0interfaccia:

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

Inizia il processo di trasmissione come membro del vpnroutegruppo:

sudo -g vpnroute transmission-gtk &

1
Questo e 'esattamente quello che stavo cercando. Grazie!
Taeram,

3
Attenzione: questo non funziona con Deluge, AFAICT perché Deluge genera processi sup. L'ho provato con attenzione e la mia configurazione è corretta - sudo -g vpnroute ping google.com mostrerà 'Destinazione non raggiungibile' fino a quando abilito la VPN su tun0. Ma l'interfaccia utente di Diluvio può sempre scaricare torrent, indipendentemente dal fatto che la VPN sia connessa o meno. Con pgrep -G vpnroute ho scoperto che solo perché il processo iniziale / usr / bin / python viene eseguito sotto il GID vpnroute, i processi deluge-gtk generati sembrano non esserlo.
happyskeptic,

10
Qualcuno potrebbe spiegare cosa fa esattamente ciascuno di questi passaggi?
ohnoplus,

2
La trasmissione ha la capacità di ascoltare un indirizzo specifico, ma non un'interfaccia specifica. Quando avviato dalla riga di comando, --bind-address-ipv4 $IP_ADDRdirà a Trasmissione a quale indirizzo associare. Ciò richiede quindi le giuste regole di routing per garantire che il traffico arrivi nel posto giusto. Dai un'occhiata a questa domanda per come sono riuscito a farlo.
seanlano,

3
@ohnoplus Crea un gruppo chiamato "vpnroute"; aggiunge una regola firewall che rifiuta qualsiasi connessione di rete in uscita stabilita dai membri di quel gruppo che non passa attraverso la VPN (definita qui come interfaccia "tun0" ma alcuni sistemi potrebbero essere diversi); avvia il processo di trasmissione in esecuzione come membro del gruppo "vpnroute".
TommyPeanuts,

4

Questo funziona per una trasmissione senza testa, sto limitando il traffico in base all'utente che esegue il servizio di trasmissione, 10.0.0.0/8è la tua rete interna che dovresti cambiarla per adattarla alla tua rete, tun0è la tua interfaccia OpenVPN, eth0è la tua connessione LAN.

Aggiungi sudoai comandi, se non sei root:

iptables -F (Abbiamo usato l'opzione -F per svuotare tutte le regole esistenti, quindi iniziamo con uno stato pulito da cui aggiungere nuove regole.)

iptables -L (elenca le impostazioni correnti)

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

rendere persistenti gli iptables dopo il riavvio

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

Questo mi dà quanto segue: $ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --sport 9091 -m proprietario --gid-proprietario debian-trasmissione -o eth0 -j ACCEPT iptables v1.4.12: proprietario : Valore errato per l'opzione "--gid-owner": "debian-transmission" Mi manca qualcosa?
ohnoplus,

Sì, @ohnoplus :) Devi prima creare il gruppo (o il proprietario) debian-transmission. E assicurati di eseguire l'applicazione come questo gruppo o utente: gruppo.
Gioacchino

Questo era esattamente ciò di cui avevo bisogno per abilitare l'interfaccia web di Remote Remote, grazie!
Zane Hooper,

4

Ecco un 'HOW TO' completo per NOOBS (usando debian) per assicurarsi che il gruppo di utenti debian-transmission (cioè trasmissione) instrada i dati solo attraverso la VPN

NON usare il "How to" più lungo per vpn basato su script di sistema complessi ...! iptables è IL METODO MIGLIORE (e infallibile) !!! - UTILIZZARE ALCUNE REGOLE IPTABILI basate sull'utente e sul gruppo di trasmissione per controllare la VPN (non come molti metodi di 'hack' più complessi che usano script di sistema, script su e giù ecc ...) ed è davvero semplice!

Step 1 - Setup: (Suppone che la trasmissione sia installata e quindi l'utente debian-transmission esiste!)

sudo apt-get install iptables
sudo apt-get install iptables-persistent

Passaggio 2: creare il file di trasmissione-ip-rules

sudo nano transmission-ip-rules

e aggiungi il testo nel blocco di codice in basso a partire da #!/bin/bash

IMPORTANTE

  • Se la rete locale non è nel formato 192.168.1.x Modificare la variabile NET in modo che corrisponda al proprio formato di indirizzamento della rete locale !!.
  • Siate anche consapevoli della stranezza che 192.168.1.0/25 fornisce effettivamente l'intervallo 192.168.1.0-255!
  • A volte le tue interfacce eth0, tun0 (che è il vpn) ecc. Possono essere diverse - controlla con 'ifconfig' e cambia se necessario.
#!/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

Salvare il file ed eseguirlo

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

quindi assicurati che queste regole persistano tra i riavvii con:

sudo dpkg-reconfigure iptables-persistent

e toccare Sì per entrambi i prompt. FATTO!

La cosa fantastica di questo script è che terrà traccia di tutti i dati attraverso il dispositivo! Quando emetti

sudo iptables -L -v

mostrerà quanti dati stanno andando su quale interfaccia e su quale lato INPUT o OUTPUT in modo da poter essere certi che lo script vpn funzioni correttamente. Per esempio;

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

Questo script è stato ampiamente testato su connessioni, disconnessioni, riavvii da VPN. Funziona benissimo. La trasmissione può utilizzare SOLO la VPN. Il grande vantaggio di questo script rispetto agli altri è che mi sono assicurato come puoi vedere (viaiptables -L -v) che i tuoi dati corrispondono a ciò che viene trasferito sulla trasmissione (aggiungendo le regole INPUT (tutto) e Avanti (tutto) per ciascuna interfaccia eth0, vpn (tun0)). Quindi sai esattamente cosa sta succedendo !!! I totali dei dati non coincideranno esattamente con la trasmissione - Sfortunatamente non posso discriminare dal lato INPUT verso l'utente di trasmissione debian, e ci saranno sia overhead extra che forse altri processi usando la stessa VPN, ma vedrai i dati approssimativamente sul lato INPUT ed è circa la metà su OUTPUT per la VPN che conferma il suo funzionamento. Un'altra cosa da notare: ci vuole un po 'di tempo su una disconnessione vpn (tutto il traffico si interrompe con la trasmissione) e riconnettersi affinché la trasmissione si "avvii" sul nuovo vpn, quindi non preoccuparti se ci vogliono circa 5 minuti per ricominciare il torrent .. .

SUGGERIMENTO - google "MAN iptables" e leggi questo articolo sul monitoraggio della larghezza di banda se vuoi sapere riga per riga come funziona questo script ...


L'intervallo 192.168.1.0/25 è 192.168.1.0-127.
Zaccaria 822

3

Idealmente, dovresti usare un client torrent che ha una funzione da associare a un'interfaccia specifica (l'interfaccia VPN).

Tra i client torrent, Deluge fa questo. Quindi puoi installare Deluge e configurare l'interfaccia nelle Preferenze e sei pronto!


Grazie per la tua risposta. In realtà, per il momento, sono piuttosto pronto a utilizzare la trasmissione, sai se è possibile associare un'interfaccia specifica o un intervallo IP (quindi utilizza solo la VPN) con la trasmissione? Grazie!
Evan,

2
@ user4124 Sai come associare Deluged a una specifica interfaccia di rete tramite la riga di comando o il webui? Dal momento che nessuno sembra saperlo fare con Transmission, ho provato Deluge ma finora non ho avuto fortuna. Grazie!
Evan,

3
@Evan è possibile specificare l'indirizzo IP a cui collegarsi in Diluvio con listen_interfacein Diluvio -console o Interfaccia in Opzioni di rete.
Cas

Anche se questo è vero, penso che sia ancora un cattivo consiglio anche se il tuo unico scopo è quello di nascondere i download illegali di torrent, dovresti abbracciare l'anonimato della VPN e cercare soluzioni che siano a livello di sistema e non funzionino solo per un programma.
redanimalwar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.