Como garantir que o tráfego de transmissão use uma VPN?

31

Eu gostaria de garantir que a transmissão só envie / receba tráfego quando o servidor em que ele estiver conectado estiver conectado a uma VPN.

Eu encontrei esta pergunta, que é semelhante , mas eu não quero forçar todo o tráfego através da VPN e eu não tenho sido capaz de encontrar um bom guia sobre como usar Firestarter a partir da linha de comando.

Em vez disso, eu estava pensando em usar o ufw, mas tenho pouca ou nenhuma experiência com firewalls e espero que a comunidade possa me ajudar.

Uma idéia que tive foi forçar a transmissão a usar uma porta específica, digamos 33442, e permitir apenas o tráfego de e para essa porta a partir do endereço IP do servidor VPN. Eu verifiquei o guia do servidor Ubuntu e acho que poderia fazer algo assim:

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

Essa lógica se sustenta? Como você faria? O que eu usaria para o VPNIP, o IP público do servidor VPN ou devo especificar o intervalo de sub-rede local ao qual a VPN me conecta?

Obrigado pela ajuda!

Evan
fonte

Respostas:

25

Criar vpnroutegrupo:

sudo groupadd vpnroute

Adicione uma iptablesregra que rejeite qualquer conexão de rede de saída feita por membros do vpnroutegrupo que não passa pela tun0interface:

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

Inicie o processo de transmissão como membro do vpnroutegrupo:

sudo -g vpnroute transmission-gtk &
Anne Onyme
fonte
11
Era exatamente isso que eu estava procurando. Obrigado!
Taeram
3
Aviso: isso não funciona com o Deluge, AFAICT porque o Deluge gera processos sup. Testei-o com cuidado e minha configuração está correta - sudo -g vpnroute ping google.com mostrará 'Destino inacessível' até eu ativar a VPN no tun0. Mas a interface do Deluge sempre pode baixar torrents, independentemente de a VPN estar conectada ou não. Com o pgrep -G vpnroute, descobri que só porque o processo inicial / usr / bin / python é executado no GID do vpnroute, os processos gerados pelo diluge-gtk parecem não ser.
happyskeptic
10
Alguém poderia explicar exatamente o que cada uma dessas etapas faz?
ohnoplus
2
A transmissão tem a capacidade de ouvir um endereço específico - mas não uma interface específica. Quando iniciado a partir da linha de comando, --bind-address-ipv4 $IP_ADDRdirá à Transmission qual endereço o qual vincular. Isso requer as regras de roteamento corretas para garantir que o tráfego chegue ao lugar certo. Dê uma olhada nesta pergunta sobre como eu consegui fazer isso.
Seanlano
3
@ohnoplus Cria um grupo chamado "vpnroute"; adiciona uma regra de firewall que rejeita qualquer conexão de rede de saída feita por membros desse grupo que não passa pela VPN (definida aqui como a interface "tun0", mas alguns sistemas podem ser diferentes); inicia o processo de transmissão em execução como um membro do grupo "vpnroute".
TommyPeanuts
4

Isso funciona para uma transmissão sem cabeça, estou restringindo o tráfego com base no usuário que está executando o serviço de transmissão, 10.0.0.0/8é sua rede interna, você deve alterá-lo para corresponder à sua rede, tun0é sua interface OpenVPN, eth0é sua conexão LAN.

Adicione sudoaos comandos, se você não for root:

iptables -F (Usamos a opção -F para liberar todas as regras existentes, começamos com um estado limpo a partir do qual adicionar novas regras.)

iptables -L (lista configuração atual)

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

torne as iptables persistentes após a reinicialização

apt-get install iptables-persistent
service iptables-persistent start
TheZeroth
fonte
Este me fornece o seguinte: $ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --sport 9091 -m owner --gid-owner debian-transmission -o eth0 -j ACEITAR iptables v1.4.12: owner : Valor ruim para a opção "--gid-owner": "debian-broadcast" Estou perdendo alguma coisa?
ohnoplus
Sim, @ohnoplus :) Você precisa criar o grupo (ou proprietário) primeiro a transmissão debian. E verifique se você está executando o aplicativo como este grupo ou usuário: grupo.
Joachim
Era exatamente isso que eu precisava para ativar a interface da web do Transmission Remote, obrigado!
Zane Hooper
4

Aqui está um 'HOW TO' completo para o NOOBS (usando debian), para garantir que o grupo de usuários da transmissão debian (ou seja, transmissão) apenas roteie dados através da VPN

NÃO use o 'How to' mais longo para vpn com base em scripts complexos do sistema ...! iptables é o melhor método (e infalível) !!! - USANDO ALGUMAS REGRAS IPTABLE baseadas no usuário e grupo de transmissão para controlar o vpn (não como muitos métodos mais complexos de 'hack' que usam scripts systemd, scripts up e down etc ...) e é muuuuito simples!

Etapa 1 - Configuração: (Supõe que a transmissão esteja instalada e que o usuário da transmissão debian exista!)

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

Etapa 2 - Crie o arquivo de transmissão-ip-regras

sudo nano transmission-ip-rules

e adicione o texto no bloco de código abaixo a partir de #!/bin/bash

IMPORTANTE

  • Se a sua rede local não tiver o formato 192.168.1.x Altere a variável NET para corresponder ao seu próprio formato de endereçamento de rede local !!.
  • Também esteja ciente da peculiaridade que 192.168.1.0/25 realmente fornece o intervalo 192.168.1.0-255!
  • Às vezes, suas interfaces eth0, tun0 (que é a VPN) etc. podem ser diferentes - verifique com 'ifconfig' e altere se necessário.
#!/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

Salve o arquivo e execute

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

verifique se essas regras persistem entre as reinicializações com:

sudo dpkg-reconfigure iptables-persistent

e toque sim nos dois prompts. FEITO!

O que é ótimo nesse script é que ele rastreia todos os dados através do dispositivo! Quando você emite

sudo iptables -L -v

Ele mostrará a quantidade de dados direcionados para qual interface e qual lado INPUT ou OUTPUT, para que você possa ter certeza de que o script vpn está funcionando corretamente. Por exemplo;

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 foi exaustivamente testado em conexões, desconexões e reinicializações a partir da VPN. Isso funciona muito bem. A transmissão SOMENTE pode usar a VPN. A grande vantagem desse script sobre os outros é que eu tenho certeza de que você pode ver (viaiptables -L -v) que seus dados coincidem com o que é extraído da transmissão (adicionando regras INPUT (all) e Forward (all)) para cada interface eth0, vpn (tun0)). Então você sabe exatamente o que está acontecendo !!! Os totais dos dados não corresponderão exatamente à transmissão - infelizmente não posso discriminar no lado INPUT para o usuário da transmissão debian, e haverá sobrecarga extra e talvez outros processos usando a mesma VPN, mas você verá os dados aproximadamente no lado INPUT e está na metade da OUTPUT para o vpn, confirmando seu funcionamento. Outra coisa a ser observada - leva um tempo em uma desconexão VPN (todo o tráfego para com a transmissão) e reconecta-se para que a transmissão 'avance' na nova VPN, portanto, não se preocupe se levar cerca de 5 minutos para iniciar o torrent novamente. .

DICA - google 'MAN iptables' e consulte este artigo sobre monitoramento de largura de banda, se você quiser saber linha por linha como esse script funciona ...

Musclehead
fonte
O intervalo de 192.168.1.0/25 é 192.168.1.0-127.
Zachary822
3

Idealmente, você deve usar um cliente de torrent que tenha um recurso para vincular a uma interface específica (a interface VPN).

Entre os clientes de torrent, a Deluge faz isso. Então você pode instalar o Deluge e configurar a interface nas Preferências e está pronto!

user4124
fonte
Obrigado pela sua resposta. No entanto, estou bastante decidido a usar a Transmission no momento, você sabe se é possível vincular a uma interface ou intervalo de IP específico (para que ele use apenas a VPN) com a Transmission? Obrigado!
Evan
2
@ user4124 Você sabe como vincular o Deluged a uma interface de rede específica por meio da linha de comando ou do webui? Como ninguém parece saber como fazer isso com a Transmission, tenho tentado o Dilúvio, mas ainda não tive sorte. Obrigado!
Evan
3
@Evan, você pode especificar o endereço IP a ser associado listen_interfaceno Deluge com no console do dilúvio ou na Interface nas opções de rede.
Cas
Embora isso seja verdade, acho que ainda é um péssimo conselho, mesmo que seu único objetivo seja ocultar seus downloads ilegais de torrent, você deve abraçar o anonimato da VPN e procurar soluções que abranjam todo o sistema e não funcionem apenas para um programa.
Redanimalwar