¿Cómo puedo asegurarme de que el tráfico de transmisión use una VPN?

31

Me gustaría asegurarme de que la transmisión solo envíe / reciba tráfico cuando el servidor en el que se ejecuta esté conectado a una VPN.

Me encontré con esta pregunta que es similar pero no quiero forzar todo el tráfico a través de la VPN y no he sido capaz de encontrar una buena guía sobre cómo utilizar Firestarter desde la línea de comandos.

En cambio, estaba pensando en usar ufw, pero tengo poca o ninguna experiencia con firewalls, y espero que la comunidad pueda ayudarme.

Una idea que tenía sería forzar la transmisión para usar un puerto específico, digamos 33442, y luego solo permitir el tráfico hacia y desde ese puerto desde la dirección IP del servidor VPN. Revisé la guía del servidor Ubuntu y creo que podría hacer algo como esto:

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

¿Esta lógica tiene su sal? ¿Como lo harias? ¿Qué usaría para VPNIP, la IP pública del servidor VPN, o debería especificar el rango de subred local al que me conecta la VPN?

¡Gracias por tu ayuda!

Evan
fuente

Respuestas:

25

Crear vpnroutegrupo:

sudo groupadd vpnroute

Agregue una iptablesregla que rechace cualquier conexión de red saliente realizada por miembros del vpnroutegrupo que no pase por la tun0interfaz:

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

Inicie el proceso de transmisión como miembro del vpnroutegrupo:

sudo -g vpnroute transmission-gtk &
Anne Onyme
fuente
1
Esto es exactamente lo que estaba buscando. ¡Gracias!
Taeram
3
Advertencia: esto no funciona con Deluge, AFAICT porque Deluge genera procesos sup. Lo probé cuidadosamente y mi configuración es correcta: sudo -g vpnroute ping google.com mostrará 'Destino inalcanzable' hasta que habilite la VPN en tun0. Pero la interfaz de usuario de Deluge siempre puede descargar torrents, ya sea que la VPN esté conectada o no. Con pgrep -G vpnroute descubrí que es porque solo el proceso inicial / usr / bin / python se ejecuta bajo el vpnroute GID, los procesos generados de deluge-gtk parecen no serlo.
happyskeptic
10
¿Alguien podría explicar exactamente qué hace cada uno de estos pasos?
ohnoplus el
2
La transmisión tiene la capacidad de escuchar una dirección específica, pero no a una interfaz específica. Cuando se inicia desde la línea de comando, --bind-address-ipv4 $IP_ADDRle indicará a Transmisión a qué dirección se debe vincular. Esto requiere las reglas de enrutamiento correctas para garantizar que el tráfico llegue al lugar correcto. Eche un vistazo a esta pregunta sobre cómo lo logré.
seanlano
3
@ohnoplus Crea un grupo llamado "vpnroute"; agrega una regla de firewall que rechaza cualquier conexión de red saliente realizada por miembros de ese grupo que no atraviesa la VPN (definida aquí como la interfaz "tun0" pero algunos sistemas pueden ser diferentes); inicia el proceso de transmisión ejecutándose como miembro del grupo "vpnroute".
TommyPeanuts
4

Esto funciona para una transmisión sin cabeza, estoy restringiendo el tráfico en función del usuario que ejecuta el servicio de transmisión, 10.0.0.0/8es su red interna debe cambiarla para que coincida con su red, tun0es su interfaz OpenVPN, eth0es su conexión LAN.

Agregue sudoa los comandos, si no es root:

iptables -F (Utilizamos el modificador -F para eliminar todas las reglas existentes, por lo que comenzamos con un estado limpio desde el cual agregar nuevas reglas).

iptables -L (lista de configuración actual)

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

hacer persistentes las iptables después de reiniciar

apt-get install iptables-persistent
service iptables-persistent start
TheZeroth
fuente
Este me da lo siguiente: $ 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 : Valor incorrecto para la opción "--gid-owner": "debian-transmission" ¿Me estoy perdiendo algo?
ohnoplus
Sí, @ohnoplus :) Primero debe crear el grupo (o el propietario) debian-transmission. Y asegúrese de ejecutar la aplicación como este grupo o usuario: grupo.
Joachim
Esto fue exactamente lo que necesitaba para habilitar la interfaz web de transmisión remota, ¡gracias!
Zane Hooper
4

Aquí hay un 'CÓMO' completo para NOOBS (usando debian) para asegurarse de que el grupo de usuarios de transmisión debian (es decir, transmisión) solo enruta datos a través de vpn

¡NO use el 'Cómo hacer' más largo para vpn basado en scripts de sistema complejos ...! ¡iptables es EL MEJOR (e infalible) MÉTODO! - UTILIZAR UNAS POCAS REGLAS DE IPTABLE basadas en el usuario y el grupo de transmisión para controlar el vpn (no como muchos métodos más complejos de 'pirateo' que usan scripts systemd, scripts de subida y bajada, etc.) ¡ y es muuuy simple!

Paso 1 - Configuración: (¡Asume que la transmisión está instalada y que el usuario de transmisión de Debian existe!

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

Paso 2 - Crear el archivo de transmisión-reglas-ip

sudo nano transmission-ip-rules

y agregue el texto en el bloque de código a continuación a partir de #!/bin/bash

IMPORTANTE

  • Si su red local no tiene la forma 192.168.1.x ¡Cambie la variable NET para que corresponda con su propio formato de direccionamiento de red local!
  • ¡También tenga en cuenta la peculiaridad de que 192.168.1.0/25 realmente da el rango 192.168.1.0-255!
  • A veces, sus interfaces eth0, tun0 (que es la vpn), etc., pueden ser diferentes: verifique con 'ifconfig' y cambie si es necesario.
#!/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

Guarde el archivo y luego ejecute

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

luego asegúrese de que estas reglas persistan entre reinicios con:

sudo dpkg-reconfigure iptables-persistent

y toca sí a ambas indicaciones. ¡HECHO!

¡Lo mejor de este script es que rastreará todos los datos a través del dispositivo! Cuando emites

sudo iptables -L -v

mostrará cuántos datos van a qué interfaz y de qué lado de ENTRADA o SALIDA, de modo que puede estar seguro de que el script vpn funciona correctamente. P.ej;

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

Este script ha sido probado exhaustivamente en conexiones, desconexiones, reinicios desde vpn. Funciona muy bien La transmisión SOLO puede usar la VPN. La gran ventaja de este script sobre los demás es que me he asegurado como puedes ver (a través deiptables -L -v) que sus datos coinciden con lo que se extrae de la transmisión (al agregar las reglas INPUT (todas) y Reenviar (todas) para cada interfaz eth0, vpn (tun0)). ¡Entonces sabes exactamente lo que está pasando! Los totales de datos no coincidirán exactamente con la transmisión. Desafortunadamente, no puedo discriminar en el lado de ENTRADA hacia el usuario de la transmisión debian, y habrá una sobrecarga adicional y quizás otros procesos que usen la misma VPN, pero verá que los datos son aproximadamente recuentos en el lado de ENTRADA y es aproximadamente la mitad en la SALIDA para el VPN que confirma su funcionamiento. Otra cosa a tener en cuenta: se tarda un tiempo en una desconexión de VPN (todo el tráfico se detiene con la transmisión) y se vuelve a conectar para que la transmisión se ponga en marcha en la nueva VPN, así que no se preocupe si tarda unos 5 minutos en comenzar a torrenting nuevamente. .

SUGERENCIA: busque en Google 'MAN iptables' y vea este artículo sobre la supervisión del ancho de banda si desea conocer línea por línea cómo funciona este script ...

Musclehead
fuente
El rango de 192.168.1.0/25 es 192.168.1.0-127.
Zachary822
3

Idealmente, debe usar un cliente de torrent que tenga una función para vincularse a una interfaz específica (la interfaz VPN).

Entre los clientes de torrent, Deluge hace esto. ¡Entonces puede instalar Deluge y configurar la interfaz en las Preferencias y ya está!

usuario4124
fuente
Gracias por tu respuesta. Sin embargo, estoy bastante decidido a usar Transmission por el momento, ¿sabes si es posible enlazar a una interfaz específica o rango de IP (por lo que solo usa la VPN) con Transmission? ¡Gracias!
Evan
2
@ user4124 ¿Sabe cómo vincular Deluged a una interfaz de red específica a través de la línea de comando o el webui? Como nadie parece saber cómo hacer esto con Transmission, he estado probando Deluge pero no he tenido suerte hasta ahora. ¡Gracias!
Evan
3
@Evan puede especificar la dirección IP para vincular en Deluge con listen_interfaceen deluge-console o Interface en las opciones de red.
Cas
Si bien esto es cierto, creo que sigue siendo un mal consejo, incluso si su único propósito es ocultar sus descargas ilegales de torrents, debe reforzar su anonimato de VPN y buscar soluciones que abarquen todo el sistema y no solo funcionen para un programa.
redanimalwar