LINUX.ORG.RU

Проксификация всего трафика через Tor

 , , , ,


1

3

Есть желание проксировать весь TCP и UDP трафик через socks5 прокси Tor, желательно запрещая трафик в обход прокси. Как это сделать? Через proxychains-ng вроде можно проксировать только конкретные программы, а не полностью весь трафик.

★★

не совсем облом с udp. его можно завернуть в tcp, но нужно чтоб на другом конце кто-то опять его распаковывал в udp

flant ★★★
()
Последнее исправление: flant (всего исправлений: 1)

завернуть весь трафик на порт tor через iptables, не?

Extraterrestrial ★★★★★
()

Так ведь можно в роли «прокси» глобально задать порт для Tor?

Korchevatel ★★★★★
()

tun2socks и отдельный сетевой неймспейс, посередине socat и unix-сокет.

anonymous
()

А вообще, в torrc есть указание выдавать tun вроде, его тоже можно прокинуть в netns.

и UDP Не выйдет.

anonymous
()

Просто завернуть или добиться нормальной работы, т.е. анонимности со сменой цепочек и изоляцией потока? Вероятно второе.

Начать надо с блокирования всего стороннего. Вот правила для iptables, их надо сохранить в исполняемый файл .sh, сделать на него chmod +x и запустить от суперпользователя:

#!/bin/sh

### настройка переменных
# список адресов, работающих мимо Tor(пример: локальная сеть)
_non_tor="192.168.1.0/24 192.168.0.0/24 172.16.0.0/24"

#TransPort нашего Tor
_trans_port="9040"

#основной порт i2p
_i2p_port="10232"

### очистка правил iptables
iptables -F
iptables -t nat -F

### настройка iptables *nat
iptables -t nat -A OUTPUT -m owner --uid-owner tor -j RETURN
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 9053
iptables -t nat -A OUTPUT -p TCP --dport 53 -j DNAT --to-destination 127.0.0.1:9053

#прямой доступ для $_non_tor
for _clearnet in $_non_tor 127.0.0.0/9 127.128.0.0/10; do
   iptables -t nat -A OUTPUT -d $_clearnet -j RETURN
done

#перенаправление всего остального на TransPort
iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $_trans_port

### настройка iptables *filter
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p TCP --dport $_i2p_port -j ACCEPT
iptables -A INPUT -p udp --dport $_i2p_port -j ACCEPT
iptables -A INPUT -p icmp -j DROP

#прямой доступ для $_non_tor
for _clearnet in $_non_tor 127.0.0.0/8; do
   iptables -A OUTPUT -d $_clearnet -j ACCEPT
done

#разрешаем input для localhost
for _clearnet in 127.0.0.0/8; do
   iptables -A INPUT -d $_clearnet -j ACCEPT
done

#разрешаем только i2p и Tor input/output
iptables -A OUTPUT -m owner --uid-owner tor -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner i2p -j ACCEPT
iptables -A OUTPUT -j REJECT
iptables -A INPUT -j DROP

ОСТОРОЖНО! Только что был закрыт выход в сеть для всех, кроме пользователей tor и i2p.

Теперь доработаем torrc:

TransPort 9040 IsolateDestAddr IsolateDestPort
DNSPort 5353
SocksPort 9250 IsolateDestAddr IsolateDestPort IsolateSOCKSAuth KeepAliveIsolateSOCKSAuth # пригодится далее
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1
HTTPTunnelPort 127.0.0.1:9443 IsolateDestAddr IsolateDestPort # для всего, что не поддерживает SOCKS

Теперь ставим torsocks apt install torsocks или как в конкретном дистрибутиве. Далее прописываем в /etc/tor/torsocks.conf :

TorAddress 127.0.0.1
TorPort 9250
OnionAddrRange 10.192.0.0/10
IsolatePID 1

А в .bashrc для всех пользователей добавляем строку . torsocks on

Torsocks помогает изолировать любые программы в терминале. Осталось лишь прописать в настройках прокси где можно SOCKS(9250) и HTTP CONNECT(9443) порты.

Если по какой-то причине необходим HTTP-прокси, но не CONNECT, можно установить и использовать privoxy.

Ну и да, с этими настройками Tor Browser без дополнительных параметров попросту не запустится, надо донастраивать prefs.js. Могу сказать как именно, если интересует(использовать что-то кроме Tor Browser при таких настройках попросту не рекомендуется, могу назвать с десяток причин).

Это всё — для TCP, с UDP же посложнее, но нет ничего невозможного.

Whonix расписывает достаточно подробно: http://www.dds6qkxpwdeubwucdiaord2xgbbeyds25rbsgr73tbfpqpt4a6vjwsyd.onion/wik...

Но выше правильно сказали, что с другой стороны кто-то должен распаковывать UDP, иначе ничего работать не будет. Вариантов много, но нужна конкретика.

Если не секрет: для чего именно нужен UDP через Tor? Может быть я мог бы подсказать способ получше, будь у меня больше вводных.

SM5T001
()
Последнее исправление: SM5T001 (всего исправлений: 1)

Ну и да

Через proxychains-ng вроде можно проксировать

Крайне не рекомендую использовать его без очень серьёзного повода, ведь даже сам автор предупреждает, что оно не всегда стабильно работает. Если iptables блокирует обход Tor, то ещё более-менее, иначе это риск деанонимизации.

SM5T001
()
Ответ на: комментарий от SM5T001

Если не секрет: для чего именно нужен UDP через Tor?

Торренты 99%.

anonymous
()
Ответ на: комментарий от SM5T001

Спасибо за такой развёрнутый ответ.

Если не секрет: для чего именно нужен UDP через Tor?

DNS запросы через UDP идут, имелось ввиду их тоже проксировать.

Riniko ★★
() автор топика
Ответ на: комментарий от Riniko

Есть tor dns. У тебя на локалхосте тор демон DNS сервер поднимет.

anonymous
()
Ответ на: комментарий от ZenitharChampion

Если уж пользоваться виртуалками, то просто поднимаешь Whonix и всё.

beresk_let ★★★★★
()
Ответ на: комментарий от Riniko

DNS запросы через UDP

это legacy. По стандарту с TCP тоже уже должны работать.
man resolv.conf:

use-vc (начиная с glibc 2.14)
	Задаёт RES_USEVC в _res.options. Данный параметр включает принудительное использование TCP для запросов DNS.

Про DNSPort в конфиге tor уже упомянули.
Но, наверно, предпочтительней DNS-over-TLS клиент, который проксировать будет. Stubby, knot или systemd-resolved - https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Clients

boowai ★★★★
()
Последнее исправление: boowai (всего исправлений: 1)
Ответ на: комментарий от Riniko

DNS запросы через UDP идут, имелось ввиду их тоже проксировать.

Тогда вышеописанные действия помогут, только я там небольшую ошибку сделал — нужен DNSPort 9053, а не 5353.

Кстати, DNS-запросы можно отправлять через Tor даже при прямом подключении со своего ip. Есть инструмент аналогичный команде host, но использующий Tor для DNS: tor-resolve. Например tor-resolve linux.org.ru

И, разумеется, можно использовать этот DNS для всей системы при любых настройках прокси(в т.ч. без прокси).

SM5T001
()
Ответ на: комментарий от SM5T001

Крайне не рекомендую использовать его без очень серьёзного повода, ведь даже сам автор предупреждает, что оно не всегда стабильно работает.

Это относится и к redsocks тоже? Просто к примеру если использовать Proxifier, и настроено проксирование всего трафика. В случае если прокси не работает, то трафик не пойдёт в обход прокси, а просто не будет соединения.

Riniko ★★
() автор топика
Ответ на: комментарий от Riniko

Это относится и к redsocks тоже?

Не подскажу, никогда его не использовал. Если мне нужно перенаправить какое-то конкретное соединение/порт в Tor, я обычно использую socat. С его помощью, например, можно поднять на VPS обратный прокси, который бы по запросу на его адрес/домен прозрачно выдавал бы содержимое с onion-сервиса, eepsite и т.п. При отключённом кешировании на прокси придраться вообще не к чему — нет состава преступления.

Просто к примеру если использовать Proxifier, и настроено проксирование всего трафика. В случае если прокси не работает, то трафик не пойдёт в обход прокси, а просто не будет соединения.

Вышеприведённые настройки iptables работают именно так, разве что пользователи tor и i2p могут делать что угодно, но это им необходимо, особенно i2p.

SM5T001
()
Ответ на: комментарий от Riniko

Всегда пожалуйста, я здесь зарегистрировался именно за этим, скоро, как и было обещано, будет завершёно руководство по использованию Tor, а вы пока можете задавать вопросы и смело звать меня по смежным темам — это сильно поможет получить необходимую обратную связь, чтобы сделать руководство максимально релевантным для конечных пользователей.

SM5T001
()
1 июня 2021 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.