суббота, 24 июня 2017 г.

Использование Tor Expert Bundle на localhost

Использование Tor Expert Bundle не совсем тривиально, ввиду отсутствия внятной документации а также отсутствия в составе пакета некоторых необходимых компонентов. Однако для настоящего джедая нет ничего невозможного :)


Я хочу сразу оговориться, что речь идет о применении Tor не в оппозиционных и иных целях. Мне приходилось сталкиваться с ситуацией, когда в провайдерских сетях отсутствует внутрисетевой роутинг (по различным причинам), и в принципе необходимо попасть в соседнюю сеть (например, с целью администрирования собственных серверов), однако, ввиду повсеместного (и, зачастую, оправданного) резко отрицательного отношения к открытым прокси, это крайне затруднительно.

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

Итак, исходные данные. 

У нас имеется станция под управлением Windows и нам нужен сервис Tor, с точкой входа в виде SOCKS5 proxy на локальной машине для торификации некоторых программ с доступом в Интернет. Причем, по-возможности, не зависящий от произвола провайдеров и государственных служб (я предупреждал, господа).

Для решения данной задачи нам понадобится Tor Expert Bundle, а также Pluggable Transports, не входящие в состав пакета.

Вам, в ряде случаев, придется озаботиться тем, как попасть на https://torproject.org и получить оттуда два важных компонента: собственно Tor Expert Bundle и Tor Browser (он нужен, поскольку в его состав входят Pluggable Transports).

Сперва необходимо установить Тор браузер. По умолчанию он ставится в Desktop:


Обычно я просто собираю эту директорию в архив и сохраняю вместе с Tor Expert Bundle.

Здесь обычно задают вопрос - "А на кой мне возиться с Expert Bundle, если у меня уже есть работащий торифицированны браузер?" На той, что не только браузер может нуждаться в торифицированном соединении. А, например, SSH-клиент. Мессенджеры. И так далее. Да и, зачастую, удобнее иметь постоянно работающий сервис, нежели зависеть от браузера, который надо держать запущенным.

Сам Tor Expert Bundle нужно распаковать в Program Files, например в "C:\Program Files (x86)\tor" и туда же распаковать Pluggable Transports:



Самое сложное в использовании Expert Bundle - это конфигурирование. Сначала нужно создать сервис, это просто:


Обратите внимание на замечание. Сервис выполняется из-под локального системного аккаунта. Что означает, что конфигурационные файлы и данные находятся здесь (обратите внимание, torrc отсутствует и сервис запущен с умолчаниями):

Это не то, что нам нужно, к тому же, нас не удовлетворяет запуск сервиса от системного аккаунта (это достаточно небезопасно, к тому же, значительно сложнее сделать правильную конфигурацию). Поэтому запустим управление компьютером и поменяем аккаунт сервиса на пользовательский:

Окей, теперь у нас рабочая директория находится у пользователя. Если по указанному пути ее нет, создадим ее:

Теперь в нее можно положить torrc, который надо написать. Взяв за основу torrc браузера, напишем свой конфигурационный файл:

 ###
# cd C:\Users\Yuri\AppData\Roaming
# mkdir tor
SocksPort 9250 IPv6Traffic PreferIPv6 KeepAliveIsolateSOCKSAuth

ClientTransportPlugin obfs4 exec C:\Program Files (x86)\Tor\PluggableTransports\obfs4proxy

Bridge obfs4 34.203.129.81:9443 A1A389B1CC9439F74DADD4FE654FDEC906A1EEAD cert=BKPZqe81YuRhFGGhjTE3riTXakuCQNcr1Vnp1KefOJSbt8BqZHxqxihr6CwhiLS7iD3KRA iat-mode=0
Bridge obfs4 45.32.64.32:9443 D02DF9BDDA7210D14042765B939E85601F534D06 cert=2GFPU86gKtqISIcAyqibuxumVasqLzfTH0e6dzMdspHi6x3hx2G0oRCTzczCNCOgS0YCXw iat-mode=0
Bridge obfs4 192.36.31.112:56380 44728738F0C59DEA92C6691F04C338805E2E67F4 cert=uN7r/693BvkmkqT5zUKf3MpHwLf0mqi+0JDtLZi2as+h7bq8U4X2qycpnJ2EtLbghwJjRA iat-mode=0

Bridge obfs4 192.36.31.76:47366 74ECD3332D75FA2FACF596A53355A38FFF658677 cert=THFrmd3GaCvoKFzBkGDaSMlsFlDFrQvL41opqiRcsbsw6kFYtaEMXuopoUhjMZj/JFY2Cg iat-mode=0
Bridge obfs4 151.62.144.154:42787 A4A220F9A708EBC69D45F362D748DF8F38BD8D20 cert=j0alolvuKN5zB7MlgLxjs+QOMUIIaJPTh+YBftlGWcqFzHRPDfKph1SVojNpBkHmDSaFBA iat-mode=0
Bridge obfs4 104.153.209.217:7862 D28E0345809AE4BAC903EF7FC78CAAF111A63C58 cert=DtNNYXeRG4ds+iTM7sdbJHJgH7RmxDb1lt8JR17BiT7eHnORyn+4y+RcoqAI65XGvhXKJg iat-mode=0

Bridge obfs4 72.10.128.105:40687 BF41456A5C061DB63E4654F4858139311860CB81 cert=sL0vJhsVKuHO0k7xhOpg/UUHZuftbAQPm0qKUrc3sGWyLWfSNeKI0RzhL+a9TpLMaIoURg iat-mode=0
Bridge obfs4 94.64.188.160:3341 B39C2AC27EE4C59225A178A5CBEE76704D4BC004 cert=7GAYNIpr58LRb8RhsLaKJdO+MYyN5o3zTYcETGWsF5uSLe4JxFL+CPlgDsujxDyBxFcQRQ iat-mode=0
Bridge obfs4 94.242.249.2:44939 E53EEA7DE6E170328F0A2C4338EE4E4DC2398218 cert=VpistQqdnS5zgkARR3he8rt03OrKhk2oobUUhLmFWAWK27pYMvjrBi6zAn1ebIcPH2xbcQ iat-mode=0

GeoIPFile C:\Program Files (x86)\Tor\Data\Tor\geoip
GeoIPv6File C:\Program Files (x86)\Tor\Data\Tor\geoip6
HiddenServiceStatistics 0
UseBridges 1
StrictNodes 1

AutomapHostsOnResolve 1
DNSPort 5300
#FascistFirewall 1

ExcludeExitNodes {ru},{ua},{by},{kz},{??}

Log notice file C:\Program Files (x86)\Tor\notice.log


Бриджи предварительно получим на https://bridges.torproject.org. Я обычно добавляю обычные бриджи для облегчения бутстрапа, но это может вызвать некоторые проблемы - обычные бриджи иногдачасто банятся. Поэтому стоит добавить обфусцированные, запустив соответствующий транспортный плагин (внизу в конфигурации). Обратите внимание на полные пути (в кавычки не берем!). Чтобы не терять соединения в случае активного бана бриджей (а также ввиду того, что иногда они меняются или перестают работать) советую за несколько последующих дней собрать десяток-два бриджей в каждой группе. Обязательно укажите SOCKS-порт, как показано - он будет точкой входа, и, кстати, IPv6 будет полезен даже если в вашей стране IPv6 не применяется - изредка это облегчает бутстраппинг и последующую работу Тор. 

Если применению Тор активно противодействуют, откажитесь от использования необфусцированных бриджей.

Я не использую FTE, так как плагин достаточно капризный и в последней версии Tor Bundle не работает из-за ошибки (исправят - начну использовать снова). В принципе, OBFS3/4 вполне достаточно.

Убедитесь, что конфигурация работает, запустив Тор интерактивно (предварительно остановив сервис, разумеется) - что бутстраппинг проходит до конца и клиентское соединение устанавливается.

Убедившись, что все в порядке и Тор в состоянии соединиться с сетью, запустите сервис.

Обратите внимание вот на что. В Тор есть небольшой баг, касающийся остановки Pluggble Transport при остановке его самого. Ввиду этого может понадобиться руками убить выполнение obfs4proxy в диспетчере задач (и, в общем, это может понадобиться делать не раз при перезапусках):

(стоит написать скрипт или добавить последовательность команд в меню Far:
 net stop tor  
 taskkill /F /IM obfs4proxy.exe  
 net start tor  
)

Теперь, когда сервис работает, можно настроить, например, Телеграм на его использование:


Аналогично можно настроить, например, Mail.ru Agent (хотя я считаю глупостью небезопасный по определению мессенджер прятать в туннель), или SSH client:


Проверяем:

Порядок, соединяемся через Tor. Консоль даже не слишком тормозит.

Резюмируем. Вы имеете туннельный сервис с SOCKS5 на входе. Любой браузер, большинство мессенджеров - словом, все программы, могущие использовать SOCKS в соединениях - могут быть выпущены через туннель.

Пользуйтесь на здоровье. И не забывайте время от времени обновлять/пополнять бриджи в конфигурации, убирая умершие и накапливая рабочие. Опыт показывает, что, чем больше вы имеете бриджей в конфигурации - тем более бесперебойно работает сервис.

FAQ

Отвечу на часто задаваемые вопросы.
  • Тор медленно работает!
  • С разморозкой! Вылазьте из криокамеры. Так было 10 лет назад. Сейчас сеть значительно больше и не тормозит, если не будете своп от винды передавать.
  • Бриджей же мало!
  • Кто вам такое сказал? Брижди не афишируются по понятным причинам, но их минимум на порядок-два больше, чем выходных нод. И они постоянно меняются, причем бриджом может быть любая машина в сети. Кроме того, бриджи могут быть приватными и вы сами можете построить цепочку приватных и никому не известных бриджей до страны Свободы. :)
  • А если заблокируют выходные ноды? Я слышал, это очень легко.
  • Да, легко. Но при чем тут выходные ноды? Главное - добраться до любой точки входа в сеть Tor. В последних версиях Тор умеет подтягивать новые бриджи динамически через любую доступную точку входа в сеть Тор.
  • А если заблокируют бриджи?
  • "Ну, попробуй!"  (с) Онакен Скайуокер. Великий Китай - не смог. Если заблокируют bridges.torproject.org - заранее - Заранее, Карл! - запаситесь Tor Browser. Он всяко понадобится как вспомогательный инструмент. Кроме того, бриджи можно получить по e-mail.
  • Насколько легко заблокировать обфусцированный бридж (obfs3/4)?
  • У нас, с полным контролем над инфраструктурой и работающим DPI - не получилось. Хотя мы очень старались. :) 
  • А я хочу ютубчик смотреть через Тор!
  • Вы там определитесь - вам полный доступ ко всему Интернету и забесплатно, и чтоб без ограничений скорости - или надежный локальный VPN. :)