LINUX.ORG.RU

torxy — прозрачный HTTP/HTTPS-прокси, позволяющий перенаправлять трафик на выбранные домены через TOR-сервер

 ,


3

4

Представляю вниманию первую публичную версию своей разработки - прозрачный HTTP/HTTPS-прокси, позволяющий перенаправлять трафик на выбранные домены через TOR-сервер.

Проект создавался для повышения комфорта доступа из домашней локальной сети к сайтам, который может быть ограничен по разным причинам. Например, магазин homedepot.com недоступен по географическому признаку.

Возможности:

  • Работа исключительно в прозрачном режиме, настройка требуется только на роутере;
  • Для HTTPS название домена извлекается из SNI, если таковой имеется;
  • Неопознанный (не HTTP и не HTTPS) входящий TCP-трафик обрабатывается «как есть»;
  • В правилах редиректа в TOR поддерживаются поддомены;
  • Список правил формируется пользователем самостоятельно;

>>> Страница проекта



Проверено: anonymous_incognito ()
Последнее исправление: unfo (всего исправлений: 4)

Лицензия GPL.

:)

Это не так работает. Стоит добавить файл лицензии. Проще, конечно, перейти на MIT.

anonymous
()

#!/usr/bin/python

Путь может быть другим. Стоит исправить на

#!/usr/bin/env python3
anonymous
()
Ответ на: комментарий от anonymous

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

Да, именно так. На странице проекта в github подробно написано, как именно это настраивается на роутере, включая пример правила в iptables.

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

Стоит добавить файл лицензии

Если ничего не путаю, вроде бы достаточно указать лицензию в самих исходниках. Но это не точно. Энивэй, мне особо нет дела до каких-то там условий.

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

Путь может быть другим

А что, есть дистры, в которых уже Python >= 3.7, но при этом он не установлен по-умолчанию как /usr/bin/python? О_о То есть, пофиксить-то можно, конечно, но выглядит это прям очень странно.

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

Публичные прокси забанены почище тора. Я даже на whoer.net капчу ловил. Про скорость и надежность и говорить нечего. Проще найти нормальный фришный VPN, чем прокси.

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

В TOR заворачивается только то, что реально нужно

Безопасность посещения onion сайтов в таком случае околонулевая, но для флибусты сойдет.

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

torsocks openvpn

Если в openvpn использовать белый список. Но если кто захочет весь трафик пустить, то не выйдет. Надо торовские входные айпишники исключать из tun маршрута. openvpn можно настроить на socks прокси в конфиг файле. Я запустил тор через мост, в openvpn конфиге прописал исключения для моста. Тогда все заработало, но: 1. мосты тормозные, 2. во время лагов тора, openvpn маршрут разрывался и трафик шел почему-то вообще напрямую! Не все так просто.

anonymous
()

Парсить HTTP траффик на педоне уже обосрали или я первый буду?

vertexua ★★★★★
()

Хорошая задумка, но...

Системные требования

Python >= 3.7;
dpkt
systemd

В прошивку маршрутизатора (где этому и место) такого не впихнёшь.

Хотя вполне можно заменить на tor+dnsmasq+ipset. Ну и плюс к этому ещё и dnscrypt-proxy не будет лишним.

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

Но ведь на клиентах нужно privoxy включать явно в виде soks прокси?

Можно и прозрачно, но с HTTPS работать не будет. :)

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

Есть. Debian 10 и Mageia 7.1.

Понятно. Значит, их владельцам выпадает привычная уже горькая доля - боль и унижения от древности софта.

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

Безопасность посещения onion сайтов в таком случае околонулевая, но для флибусты сойдет

Всё именно так. А для параноиков всегда есть Tails.

vimusov
() автор топика
Ответ на: Хорошая задумка, но... от qwe

В прошивку маршрутизатора (где этому и место) такого не впихнёшь

Да, не впихнёшь. К счастью, моему роутеру крутить этот прокси на гигабитном канале вполне по силам. А разработка аналогичного прокси на крестах займёт столько времени, что к моменту её завершения интернеты уже перейдут на HTTP/2, сделав проект бесполезным. Всегда приходится выбирать из двух стульев - быстро и прямо сейчас, но ресурсоёмко; или медленно и печально, но работает на калькуляторе.

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

Python >= 3.7, но при этом он не установлен по-умолчанию как /usr/bin/python? О_о

До самых недавних пор питон2 был жив. LTS дистрибутивы еще живут с питон2. Не все ж на арчлинуксе сидят. python3 работает везде, python - во многих случаях указывает на питон2

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

Это смотря с чем сравнивать. По сравнению, например, с Ubuntu 16.04, они свежачок. Но у меня даже в ней Python 3.8 и запросы python и python3 перенаправляются на него с помощью симлинков (хотя, есть еще update-alternatives). Древние системные питоны выпилил.

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

А что, есть дистры, в которых уже Python >= 3.7, но при этом он не установлен по-умолчанию как /usr/bin/python? О_о То есть, пофиксить-то можно, конечно, но выглядит это прям очень странно.

что странного? бывает что в системе вообще пакеты питоновские не установлены, а сам python поставлен через pyenv

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

бывает что в системе вообще пакеты питоновские не установлены, а сам python поставлен через pyenv

И чем в этом случае поможет замена /usr/bin/python -> /usr/bin/env python? Я серьёзно не знаю, никогда не юзал pyenv.

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

python3 работает везде, python - во многих случаях указывает на питон2

ОК, уговорили. Существенной разницы нет. Пофиксил.

vimusov
() автор топика

По описанию - хорошая и нужная вещь.

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

... разработка аналогичного прокси на крестах займёт столько времени...

... быстро и прямо сейчас, но ресурсоёмко; или медленно и печально...

Прочитал README.md проекта, почесал репу...

Насколько понял, работает так:

Любой HTTP/HTTPS трафик заворачивается на прокси, тот парсит SNI, принимает решение на редирект в tor.

Не вижу преимущества перед схемой:

Клиент обращается за IP адресом к dnsmasq, тот смотрит на адрес и, при необходимости, дополняет ipset редиректа в tor.

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

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

pyenv все равно ж модифицирует PATH, чтобы python выполнялся, но линки в /usr/bin/ не создает.

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

/usr/bin/python захардкоденный путь, а так /usr/bin/env будет искать.

Скрипты обычно используют /usr/bin/env, кроме тех, которые специально ставились под определенную версию python.

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

Тогда будет произведен поиск python в каталогах из переменной $PATH

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

Клиент обращается за IP адресом к dnsmasq, тот смотрит на адрес и, при необходимости, дополняет ipset редиректа в tor.

Прекрасный хитрый план! Интересно будет посмотреть на его реализацию для зоны .onion - учитывая то, что публичных DNS-серверов для неё нет, а DNS-сервер, встроенный в TOR-сервер, возвращает рандомные адреса из сети 127.0.0.0/8. И ещё более интересно узнать, каким образом простой DNAT по ipset-у в iptables сделает из протокола HTTP протокол SOCKS5 - потому что TOR-сервер умеет только в SOCKS5 и немножко в HTTPS, но не в HTTP.

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

Есть заброшенный форк sniproxy

Почему-то я совсем не удивлён, что он заброшен. И даже использование чудовищной (и тоже заброшенной) наркомании в виде libmill автору не сильно помогло.

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

... Интересно будет посмотреть на его реализацию для зоны .onion...

torrc:

...
DNSPort   0.0.0.0:9053
VirtualAddrNetworkIPv4 10.192.0.0/11
AutomapHostsOnResolve 1
...

dnsmasq.servers:

...
server=/onion/127.0.0.1#9053
...

... И ещё более интересно узнать, каким образом...

torrc:

...
TransPort 127.0.0.1:9040
TransPort 192.168.1.1:9040
...

ipset:

ipset create tor hash:ip

iptables:

iptables -t nat -I PREROUTING -i br0 -p tcp -m set --match-set tor dst -m multiport --dports 80,443 -j REDIRECT --to-ports 9040

dnsmasq.conf:

...
### .onion and "Flibusta" via TOR
ipset=/onion/tor
ipset=/flibusta.net/tor
ipset=/flibusta.is/tor
...

Как-то так.

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

Лахтаботы уже и сюда просочились? Сажание на бутылку - исконно российская (татарские менты - не русские) забава.

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

А что, весьма недурно! Мне нравится! Главное чтобы ipset-а хватило на все адреса. И вот эта сеть под DNS - 10.192.0.0/11 - какая-то особая или просто первое что в голову пришло?

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

... Главное чтобы ipset-а хватило на все адреса...

По умолчанию там максимально 65536 элементов, но думаю, можно и больше сделать. Или другой set.

Года три назад парсил proxy.pac с antizapret. Все доменные имена закидывал в ipset ip (точнее закидывал dnsmasq) все сети в другой ipset ip:net (это уже напрямую скриптом). Вроде как всё помещалось.

... какая-то особая или просто первое что в голову пришло?..

Не помню уже. Документацию к tor надо читать.

Всё это реально работало на дохленьком MIPS (MI Mini).

qwe ★★★
()

Это, наврное, чтобы какой-то специфичный софт заворачивать?
Всё браузероподобное уже более десятилетия понимает proxy.pac

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

... Всё браузероподобное уже более десятилетия понимает proxy.pac

Понимает, если настроить, причём на каждом устройстве отдельно. А тут «прозрачно» и изменение настроек действует мгновенно, а не после перечитывания proxy.pac и сразу для всех устройств.

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

Не всё так печально: сам proxy.pac и настройки программ синхронизированы между машинами.
Кому надо было, у тех уже давно настроено. Я в их числе.
proxy.pac интерпретируется заново для каждого запроса.

Я как бы понимаю, зачем сабж, но лично в моих юзкейсах оперировать на уровне доменных имён нужно только для браузерных поделок, и комбинация правил proxy.pac и squid уже закрывает потребности.

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

... настройки программ синхронизированы между машинами...

И мобилками?

... proxy.pac интерпретируется заново для каждого запроса...

Скачивается тоже для каждого запроса? :)

... комбинация правил proxy.pac и squid уже закрывает потребности.

И многие другие потребности.

Суть топика - перенаправить через tor запросы к доменам из списка. Не более. Типа proxy.pac со списком нужных доменов, которые нужно завернуть на socks5 proxy плюс DNS для .onion доменов

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

Ну чего ты, человек делал, старался. А на ЛОР-е недовольные, так всё желание уйдёт, что-то делать для сообщества. Большинство дистрибутивов на systemd.

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

Большинство дистрибутивов на systemd.

У меня не дистрибутив и не на systemd:

 % uname -srm
FreeBSD 12.1-RELEASE-p9 amd64

Привязка утилиты для проксирования к иниту — это маразм.

Причём заметь, я не возмущаюсь по поводу выбора языка.

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

Нечетные года хорошие для дебиана, а четные для убунты. В 2021 выйдет debian 11, а убунта будет только 20.04 и до следующего lts останется ждать год. А потом наоборот.

В 2019 вышел debian 10, убунта 18.04 была 2018 года (у нее номер совпадает с годом). В 2017 вышел debian 9, убунта была 16.04 (2016). Конечно, у бунты есть промежуточные релизы, но они поддерживаются совсем немного, сравнивать с ними некорректно и в расчет можно не брать.

Дебиан и Убунта LTS релизятся каждые два года, но в шахматном порядке. Поддерживаются 5 лет. Релизы Mageia совпадают с Debian, но поддерживаются минимум 1.5 года (обычно 2±0.5). Хронология такая:
2014 - Ubuntu 14.04
2015 - Debian 8, Mageia 5
2016 - Ubuntu 16.04
2017 - Debian 9, Mageia 6
2018 - Ubuntu 18.04
2019 - Debian 10, Mageia 7
2020 - Ubuntu 20.04
Поддержка Магеи 7 будет только 1,5 года, до конца 2020. Так что не советую ей пользоваться.

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

я не возмущаюсь по поводу выбора языка

А надо бы.

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

Поддержка Магеи 7 будет только 1,5 года, до конца 2020

Скорее всего продлят еще на годик. Про 6 они такую же чушь писали:
https://web.archive.org/web/20180926151752/https://www.mageia.org/en/support/
https://www.mageia.org/en/support/
Но это негарантированно. Гарантированы только 1,5 года.

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

Документацию к tor надо читать.

Судя по man-у, это может быть любая «серая» сеть, главное чтобы ни с какой другой уже настроенной не пересекалась.

В целом - вариант весьма интересный! Вот чего мне не хватало - знания о существовании опции TransPort - даже не думал, что TOR-сервер умеет в проксирование галимого TCP.

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

Привязка утилиты для проксирования к иниту

Она там для нормального логирования с разделением по уровням (debug/info/error) и для уведомления об успешном запуске. Но в целом да, реально косяк - про BSD я как-то забыл. Пофиксил. Теперь биндинги к systemd опциональны. Разделения логирования по уровням без них конечно не будет, зато совместимость возросла.

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

Нечетные года хорошие для дебиана, а четные для убунты

Няня, я у них поел.

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

... Она (systemd) там для нормального логирования с разделением по уровням (debug/info/error) и для уведомления об успешном запуске...

Я аж телефон выронил.

(man syslog)

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

Она там для нормального логирования с разделением по уровням (debug/info/error) и для уведомления об успешном запуске.

А что, например у какого-нибудь rsyslogd какие-то проблемы с логгированием по уровням? ☺

logger -t "torxy" -p "daemon.error" "message"

Разделения логирования по уровням без них конечно не будет

https://docs.python.org/3/library/syslog.html

зато совместимость возросла

Вот теперь я смогу потыкать, ибо сабж нужен. :3

mord0d ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.