Як я можу забезпечити, щоб трафік передачі використовував VPN?


31

Я хотів би переконатися, що передача передає / приймає трафік лише тоді, коли сервер, на якому він працює, підключений до VPN.

Я знайшов подібне питання, але я не хочу примушувати весь трафік через VPN, і мені не вдалося знайти гарного керівництва щодо використання firestarter з командного рядка.

Натомість я думав використовувати ufw, але у мене майже немає досвіду роботи з брандмауерами, і я сподіваюся, що громада може мені допомогти.

Однією з ідей у ​​мене було б змусити передачу використовувати певний порт, скажімо, 33442, а потім дозволити трафік тільки до цього порту з IP-адреси сервера VPN. Я перевірив посібник з сервера Ubuntu і, думаю, міг би зробити щось подібне:

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

Ця логіка тримає свою сіль? Як би ти це зробив? Що я б використовував для VPNIP, загальнодоступного IP-сервера VPN, або я повинен вказати локальний діапазон підмережі, до якого VPN підключає мене?

Спасибі за вашу допомогу!

Відповіді:


25

Створити vpnrouteгрупу:

sudo groupadd vpnroute

Додайте iptablesправило, яке відхиляє будь-яке вихідне мережеве з'єднання, зроблене членами vpnrouteгрупи, що не проходить через tun0інтерфейс:

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

Почніть процес передачі як член vpnrouteгрупи:

sudo -g vpnroute transmission-gtk &

1
Це саме те, що я шукав. Спасибі!
Таерам

3
Попередження: це не працює з Deluge, AFAICT, оскільки Deluge породжує процеси суп. Я ретельно перевірив це, і моя настройка правильна - sudo -g vpnroute ping google.com покаже "Місце недоступного", поки я не включу VPN на tun0. Але інтерфейс Deluge завжди може завантажувати торенти, незалежно від того, підключений VPN чи ні. З допомогою pgrep -G vpnroute я виявив це тому, що лише початковий / usr / bin / python процес запускається під vpnroute GID, породжених потоків-gtk процесів, здається, не відбувається.
happyyskeptic

10
Чи може хтось пояснити, що саме робить кожен з цих кроків?
ohnoplus

2
Передача має можливість слухати конкретну адресу, але не конкретний інтерфейс. Запустившись з командного рядка, --bind-address-ipv4 $IP_ADDRпокаже передачі, до якої адреси потрібно прив’язатись. Тоді для цього потрібні правильні правила маршрутизації, щоб забезпечити потрапляння трафіку в потрібне місце. Погляньте на це питання, як мені вдалося це зробити.
seanlano

3
@ohnoplus Створює групу під назвою "vpnroute"; додає правило брандмауера, яке відхиляє будь-яке вихідне мережеве з'єднання, зроблене членами тієї групи, яка не проходить через VPN (тут визначається як інтерфейс "tun0", але деякі системи можуть бути різними); запускає процес передачі, що працює як член групи "vpnroute".
TommyPeanuts

4

Це працює для безголівкової передачі, я обмежую трафік залежно від користувача, який виконує послугу передачі, 10.0.0.0/8це ваша внутрішня мережа, ви повинні змінити її відповідно до вашої мережі, tun0це ваш інтерфейс OpenVPN, eth0це ваш LAN-з'єднання.

Додайте sudoдо команд, якщо ви не root:

iptables -F (Ми використовували перемикач -F для очищення всіх існуючих правил, тому ми починаємо з чистого стану, з якого потрібно додавати нові правила.)

iptables -L (список поточних налаштувань)

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

зробіть iptables стійкими після перезавантаження

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

Це дає мені наступне: $ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --спорт 9091 -m власник --gid-owner debian-передача -o eth0 -j ACCEPT iptables v1.4.12: власник : Неправильне значення для параметра "--gid-owner": "debian-передача" Я щось пропускаю?
ohnoplus

Так, @ohnoplus :) Спочатку потрібно створити групу (або власника) debian-передачі. І переконайтеся, що ви запускаєте програму як ця група чи користувач: group.
Йоахім

Це саме те, що мені потрібно було ввімкнути веб-інтерфейс Transmission Remote, дякую!
Зейн Хупер

4

Ось повний "ЯК ДО" для NOOBS (використовуючи debian), щоб переконатися, що група користувачів debian-передачі (тобто передача) лише маршрутизує дані через vpn

НЕ використовуйте більш тривалий "Як" для vpn на основі складних системних скриптів ...! iptables - НАЙКРАЩИЙ (і нерозумний) МЕТОД !!! - ВИКОРИСТАННЯ РОЗУМИХ ІНТЕРАКТИВНИХ ПРАВИЛ, заснованих на користувачі та групі передачі для управління vpn (не так, як у багатьох більш складних методах "хак", які використовують системні сценарії, сценарії вгору та вниз тощо ...), і це так просто!

Крок 1 - Налаштування: (передбачається, що передача встановлена, і користувач передачі debian таким чином існує!)

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

Крок 2 - Створіть файл передачі-ip-правила

sudo nano transmission-ip-rules

і додайте текст у блок коду нижче, починаючи з #!/bin/bash

ВАЖЛИВО

  • Якщо ваша локальна мережа не має форми 192.168.1.x Змініть змінну NET так, щоб вона відповідала вашому власному формату адресації локальної мережі !!.
  • Також пам’ятайте про химерність, що 192.168.1.0/25 насправді дає діапазон 192.168.1.0-255!
  • Іноді ваші інтерфейси eth0, tun0 (що є vpn) тощо. Можливо, інакше - перевірте "ifconfig" та змініть, якщо потрібно.
#!/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

Збережіть файл та запустіть

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

то переконайтеся, що ці правила зберігаються між перезавантаженнями:

sudo dpkg-reconfigure iptables-persistent

і торкніться так для обох підказок. Зроблено!

Що в цьому сценарії чудово, це те, що він буде відслідковувати всі дані через пристрій! Коли ви видаєте

sudo iptables -L -v

він покаже, скільки даних збирається в який інтерфейс і в яку сторону INPUT або OUTPUT, щоб ви могли бути впевнені, що сценарій vpn працює належним чином. Наприклад;

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

Цей скрипт вичерпно перевірений на з'єднаннях, відключеннях, перезавантаженнях з vpn. Це чудово працює. Для передачі можна ТОЛЬКО використовувати VPN. Великою перевагою цього сценарію перед іншими є те, що я переконався, як ви бачите (черезiptables -L -v), що ваші дані співпадають з тим, що перетягується через передачу (додаючи правила INPUT (усі) та Forward (усі) для кожного інтерфейсу eth0, vpn (tun0)). Так ви точно знаєте, що відбувається !!! Підсумки даних не співпадатимуть точно з передачею - на жаль, я не можу розрізнити на INPUT сторону вниз до користувача debian-передачі, і з'являться як додаткові накладні, так і, можливо, інші процеси, що використовують той же VPN, але ви побачите дані приблизно приблизно на стороні INPUT і знаходиться приблизно на половині на вихідному для vpn, що підтверджує його роботу. Ще одне, що слід зазначити - потрібно пройти деякий час, коли вимкнути vpn (весь трафік припиняється з передачею) та знову підключитись до передачі, щоб "дістати" новий vpn, тому не хвилюйтесь, якщо потрібно знову близько 5 хвилин, щоб знову почати торрент. .

Порада - google "MAN iptables" і перегляньте цю статтю про моніторинг пропускної здатності, якщо ви хочете дізнатися по черзі, як працює цей скрипт ...


Діапазон 192.168.1.0/25 становить 192.168.1.0-127.
Захарій822

3

В ідеалі вам слід використовувати клієнт-торент, який має функцію прив'язки до певного інтерфейсу (інтерфейс VPN).

Серед клієнтів-торентів Deluge робить це. Таким чином, ви можете встановити Deluge і налаштувати інтерфейс у налаштуваннях, і ви налаштовані!


Дякую за вашу відповідь. Насправді я дуже налаштований на використання передачі на даний момент, але чи знаєте ви, чи можливо прив’язати до конкретного інтерфейсу чи діапазону IP (щоб він використовував лише VPN) за допомогою передачі? Спасибі!
Еван

2
@ user4124 Чи знаєте ви, як прив’язати Deluged до певного мережевого інтерфейсу за допомогою командного рядка чи webui? Оскільки, схоже, ніхто не знає, як це зробити з Трансмісією, я пробував Deluge, але поки не мав удачі. Спасибі!
Еван

3
@Evan ви можете вказати ip-адресу, яку слід прив’язати до Deluge, listen_interfaceв консолі deluge або Interface у мережевих параметрах.
Cas

Хоча це правда, я думаю, що це все-таки погана порада, навіть якщо вашою єдиною метою є приховати незаконні завантаження торентів, ви повинні охопити анонімність VPN та шукати рішення, які є загальносистемними та працюють не лише для однієї програми.
redanimalwar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.