Jak mogę się upewnić, że ruch transmisyjny korzysta z VPN?

31

Chciałbym upewnić się, że transmisja wysyła / odbiera ruch tylko wtedy, gdy serwer, na którym działa, jest podłączony do sieci VPN.

I znaleźć na to pytanie, które jest podobne , ale nie chcę, aby zmusić cały ruch przez VPN i nie byłem w stanie znaleźć dobrego przewodnika na temat korzystania Firestarter z wiersza poleceń.

Zamiast tego myślałem o użyciu ufw, ale nie mam żadnego doświadczenia z zaporami ogniowymi i mam nadzieję, że społeczność może mi pomóc.

Jednym z moich pomysłów byłoby wymuszenie transmisji w celu użycia określonego portu, powiedzmy 33442, a następnie zezwolenie na ruch do i z tego portu tylko z adresu IP serwera VPN. Sprawdziłem przewodnik po serwerze Ubuntu i myślę, że mogę zrobić coś takiego:

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

Czy ta logika trzyma sól? Jak byś to zrobił? Czego powinienem użyć dla VPNIP, publicznego adresu IP serwera VPN, czy powinienem określić zakres lokalnej podsieci, z którą łączy mnie VPN?

Dzięki za pomoc!

Evan
źródło

Odpowiedzi:

25

Utwórz vpnroutegrupę:

sudo groupadd vpnroute

Dodaj iptablesregułę, która odrzuca każde wychodzące połączenie sieciowe utworzone przez członków vpnroutegrupy, które nie przechodzi przez tun0interfejs:

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

Rozpocznij proces transmisji jako członek vpnroutegrupy:

sudo -g vpnroute transmission-gtk &
Anne Onyme
źródło
1
Właśnie tego szukałem. Dzięki!
Taeram
3
Ostrzeżenie: to nie działa z Potopem, AFAICT, ponieważ Potop odradza procesy sup. Sprawdziłem to dokładnie i moja konfiguracja jest prawidłowa - sudo -g vpnroute ping google.com pokaże „Miejsce docelowe nieosiągalne”, dopóki nie włączę VPN na tun0. Ale interfejs użytkownika Potop zawsze może pobierać torrenty, niezależnie od tego, czy VPN jest podłączony czy nie. W przypadku pgrep -G vpnroute odkryłem, że jest to spowodowane tym, że tylko początkowy proces / usr / bin / python działa pod GID vpnroute, wydaje się, że proces spawnowania potopu-gtk nie jest.
happyskeptic
10
Czy ktoś mógłby wyjaśnić, co dokładnie robi każdy z tych kroków?
ohnoplus
2
Transmisja ma możliwość nasłuchiwania określonego adresu - ale nie określonego interfejsu. Po uruchomieniu z wiersza poleceń --bind-address-ipv4 $IP_ADDRpowie Transmission, z którym adresem ma się połączyć. Wymaga to wtedy odpowiednich reguł routingu, aby ruch trafił we właściwe miejsce. Zobacz, jak udało mi się to zrobić.
seanlano
3
@ohnoplus Tworzy grupę o nazwie „vpnroute”; dodaje regułę zapory sieciowej, która odrzuca wszelkie wychodzące połączenia sieciowe wykonane przez członków tej grupy, którzy nie przechodzą przez VPN (zdefiniowane tutaj jako interfejs „tun0”, ale niektóre systemy mogą być inne); rozpoczyna proces transmisji jako członek grupy „vpnroute”.
TommyPeanuts
4

Działa to w przypadku transmisji bezdźwięcznej, ograniczam ruch w oparciu o użytkownika, który uruchamia usługę transmisji, 10.0.0.0/8jest to twoja sieć wewnętrzna, którą powinieneś zmienić, aby pasowała do twojej sieci, tun0to twój interfejs OpenVPN, eth0to twoje połączenie LAN.

Dodaj sudodo poleceń, jeśli nie jesteś rootem:

iptables -F (Użyliśmy przełącznika -F, aby opróżnić wszystkie istniejące reguły, więc zaczynamy od czystego stanu, z którego można dodać nowe reguły).

iptables -L (wyświetl listę bieżących ustawień)

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

ustaw iptables jako trwałe po ponownym uruchomieniu

apt-get install iptables-persistent
service iptables-persistent start
TheZeroth
źródło
Ten daje mi następujące: $ sudo iptables -A WYJŚCIE -d 10.0.0.0/8 -p tcp --sport 9091 -m właściciel --gid-właściciel debian-transmisja -o eth0 -j AKCEPTUJ iptables v1.4.12: właściciel : Zła wartość opcji „--gid-owner”: „debian-transmisja” Czy coś mi brakuje?
ohnoplus
Tak, @ohnoplus :) Najpierw musisz utworzyć transmisję debian grupy (lub właściciela). I upewnij się, że korzystasz z aplikacji jako ta grupa lub użytkownik: grupa.
Joachim,
Właśnie tego potrzebowałem, aby włączyć interfejs internetowy Transmission Remote, dzięki!
Zane Hooper
4

Oto kompletne „W JAKI SPOSÓB” dla NOOBS (przy użyciu debiana), aby upewnić się, że grupa użytkowników debian-transmisja (tj. Transmisja) kieruje dane tylko przez VPN

NIE używaj dłuższego „Jak to zrobić” dla VPN opartego na złożonych skryptach systemowych ...! iptables jest NAJLEPSZĄ (i niezawodną) METODĄ !!! - UŻYWANIE KILKA ZASAD IPTABELI w oparciu o użytkownika i grupę transmisji do sterowania VPN (nie jak wiele bardziej złożonych metod „hackowania”, które wykorzystują skrypty systemowe, skrypty w górę i w dół itp.) I jest to takie proste!

Krok 1 - Konfiguracja: (Zakłada się, że transmisja jest zainstalowana i dlatego użytkownik debian-transmisja istnieje!)

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

Krok 2 - Utwórz plik zasad transmisji ip

sudo nano transmission-ip-rules

i dodaj tekst w bloku kodu poniżej, zaczynając od #!/bin/bash

WAŻNY

  • Jeśli twoja sieć lokalna nie ma postaci 192.168.1.x Zmień zmienną NET, aby odpowiadała twojemu własnemu formatowi adresowania sieci lokalnej !!
  • Pamiętaj również o dziwactwie, że 192.168.1.0/25 faktycznie daje zakres 192.168.1.0-255!
  • Czasami twój interfejs eth0, tun0 (który jest VPN) itp. Może być inny - sprawdź za pomocą „ifconfig” i zmień w razie potrzeby.
#!/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

Zapisz plik, a następnie uruchom

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

następnie upewnij się, że te reguły będą się utrzymywać między restartami za pomocą:

sudo dpkg-reconfigure iptables-persistent

i stuknij tak, aby wyświetlić oba monity. GOTOWY!

Wspaniałe w tym skrypcie jest to, że będzie śledzić wszystkie dane przez urządzenie! Kiedy wydajesz

sudo iptables -L -v

pokaże, ile danych idzie do którego interfejsu i po której stronie WEJŚCIE lub WYJŚCIE, dzięki czemu masz pewność, że skrypt VPN działa poprawnie. Na przykład;

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

Ten skrypt został gruntownie przetestowany na połączeniach, rozłączeniach, restartach z VPN. Działa świetnie. Transmisja może korzystać TYLKO z VPN. Ogromną zaletą tego skryptu w porównaniu z innymi jest to, że upewniłem się, jak widać (przeziptables -L -v), że dane są zgodne z tym, co jest przenoszone przez transmisję (przez dodanie reguł INPUT (wszystkie) i Forward (wszystkie) dla każdego interfejsu eth0, vpn (tun0)). Więc dokładnie wiesz, co się dzieje !!! Sumy danych nie zgadzają się dokładnie z transmisją - Niestety nie mogę dyskryminować użytkownika po stronie WEJŚCIA w stosunku do użytkownika transmisji debian, i będą istniały zarówno dodatkowe koszty ogólne, jak i być może inne procesy korzystające z tej samej sieci VPN, ale zobaczysz dane w przybliżeniu wysokie po stronie WEJŚCIA i około połowy na WYJŚCIU dla VPN potwierdzającej jego działanie. Kolejna rzecz do zapamiętania - odłożenie połączenia VPN zajmuje cały czas (cały ruch zatrzymuje się wraz z transmisją) i ponowne połączenie, aby „zacząć” nową VPN, więc nie martw się, jeśli ponowne uruchomienie torrenta zajmie około 5 minut. .

WSKAZÓWKA - google „MAN iptables” i zapoznaj się z tym artykułem na temat monitorowania przepustowości, jeśli chcesz wiedzieć, wiersz po wierszu, jak działa ten skrypt ...

Musclehead
źródło
Zakres 192.168.1.0/25 to 192.168.1.0-127.
Zachary822
3

Najlepiej jest użyć klienta torrent, który ma funkcję powiązania z określonym interfejsem (interfejsem VPN).

Wśród klientów torrentowych Deluge robi to. Możesz więc zainstalować Potop i skonfigurować interfejs w Preferencjach i gotowe!

użytkownik4124
źródło
Dzięki za odpowiedź. W tej chwili jestem dość nastawiony na używanie Transmission, czy wiesz, czy można powiązać z określonym interfejsem lub zasięgiem IP (więc używa tylko VPN) z Transmission? Dzięki!
Evan
2
@ user4124 Czy wiesz, jak powiązać Deluged z określonym interfejsem sieciowym za pomocą wiersza polecenia lub webui? Ponieważ wydaje się, że nikt nie wie, jak to zrobić za pomocą Transmisji, próbowałem Potopu, ale jak dotąd nie miałem szczęścia. Dzięki!
Evan
3
@Evan możesz podać adres IP, z którym chcesz się połączyć w Potopie listen_interfacew konsoli potopu lub Interfejsie w opcjach sieci.
Cas
Chociaż jest to prawda, myślę, że nadal jest to zła rada, nawet jeśli Twoim jedynym celem jest ukrycie nielegalnych pobrań torrentów, powinieneś włączyć swoją anonimowość VPN i szukać rozwiązań, które są ogólnosystemowe i nie działają tylko dla jednego programu.
redanimalwar