Приватный узел TOR
 

 
Crossroads » Связь » Приватный узел TOR

Приватный узел TOR

  • Dislike
  • 0
  • Like
Приватный узел TORНа этом сайте уже есть несколько заметок, посвящённых сети TOR. Написаны они около семи лет назад, и многое изменилось. В этом материале мы сосредоточимся на «мостах». Судя по всему, это наиболее актуальная тема в русскоязычном сегменте Интернета на данный момент.

Нам понадобится следующее:
• Знание Linux на уровне чуть выше поверхностного.
• Английский язык (поднятие моста на хостинге в России не имеет смысла).
• Понимание основных принципов работы TOR.
• Около пяти долларов ежемесячно.
• Желание.

Если вы периодически пользуетесь TOR браузером и он у вас перестал соединяться с Сетью, то в поисках решения проблемы вы могли видеть посты в Рунете относительно версий браузера и прочих костылей, посты «ботов» в стиле «мне нечего скрывать» и тому подобное. Даунгрэйд версии браузера — плохая идея по многим причинам. Если это баг, то он будет исправлен. Троллей обсуждать мы не будем вовсе… TOR трафик, как и любой другой специфический трафик имеет ряд «маркеров», по которым его можно идентифицировать. Да, трафик шифрованный, но DPI и прочие игрушки вполне себе способны положить по определённому признаку весь TOR поток и (в случае с Роскомнадзором) всё, что на него похоже. Да и сам браузер находиться у вас на локальном компьютере, использует стандартные порты и передаёт трафик через вашего провайдера. Все узлы сети TOR публикуются в открытом доступе, включая мосты. Другими словами, сеть TOR спроектирована как инструмент обхода «заглушек» и анонимизации передаваемых данных. Она не способна стать невидимой по причине того, что она публична по умолчанию. Большинство людей без каких-либо регуляторов способно отличить хорошее от плохого и законное от противозаконного. К сожалению непринятие пользователем сетевого эксгибиционизма воспринимается регулятором как преступление. Усовершенствование кошки всегда ведёт к эволюции мышки.

Рассмотрим вариант «анонимного» моста. Слово взято в кавычки потому что вы арендуете сервер у легитимного провайдера, платите ему не криптой и в процессе оставляете столько следов, что умысел на что-либо злое и аморальное говорит больше о пользователе, нежели о самой технологии.

На этом сайте всегда рекомендовали Digital Ocean в качестве провайдера. Хочу добавить к нему Linode, как альтернативу. Цены и условия у обоих провайдеров практически идентичны (за исключением региональной политики взимания НДС). Linode более старый провайдер, вышедший на рынок в начале нулевых. Digital Ocean на рынке около десяти лет, но по технической части по некоторым показателям опережает Linode. Однако оптимизация в ряде датацентров выше у Linode. В любом случае, это два достойных игрока, качество услуг которых всегда на высоте, если опираться на мой личный опыт. Обе ссылки реферальные. Регистрируя аккаунт вы поддержите этот сайт и получите 100 долларов на счёт у провайдера, которые сможете потратить на его услуги. Через два месяца остаток сгорает, но двух месяцев более чем достаточно для оценки качества сервиса.

Для моста вполне достаточно конфигурации с одним гигабайтом памяти и одним ядром. Это минимальная конфигурация, доступная у обоих провайдеров за пять долларов в месяц. Обратите внимание, что регистрировать аккаунт лучше без использования каких-либо средств анонимизации (VPN, Proxy и т. п.). Вас обязательно попросят подтвердить личность, что может затянуться надолго, так как потребуется предоставить официальный документ на английском языке, подтверждающий личность (водительское удостоверение, паспорт и так далее). Если не использовать средства анонимизации и IP адрес совпадает со страной, к которой привязано выше платёжное средство, то обычно всё сводится к подтверждению электронной почты.

Из контрольной панели провайдера создайте виртуальный сервер. У Digital Ocean это «Droplets», у Linode «Linodes». При создании выберите ближайший к вам датацентр. Чем ближе к вам мост, тем быстрее будет отклик при его использовании. Не знаю, «особенность» ли это настроек, или «недоработка», но по умолчанию Tor Browser подбирает ближайшие к вам узлы без учёта прокси-серверов и мостов. «Ближайшими» считаются те, которые ближе к реальному местоположению точки входа. Не моста, а самого браузера. Если вы в Москве, а ваш мост а Калифорнии, то следующим узлом при построении цепи скорее всего будет Киев и так далее по цепи. Из-за такого «зигзага» пинг будет таким, что более старшее поколение вспомнит о 64К модемах. В качестве операционной системы выберите, то что вам ближе. У Linode более широкий выбор. Доступны даже Arch Linux и Gentoo. У Digital Ocean доступна FreeBSD. Если вам без разницы, то выберите Debian, так как в нижеприведённом примере используется именно она. Хорошей идеей будет использование SSH ключа, вместо пароля для доступа к серверу. После получения доступа нужно будет вручную запретить доступ по паролю в настройках SSH сервера. У обоих провайдеров создание виртуального сервера займёт не более минуты, после чего вы получите данные для доступа по SSH.

После подключения по SSH создайте пользователя и дайте ему sudo права. В Debian это следующие команды:
adduser username
/sbin/usermod -aG sudo userrname

В Arch Linux
useradd username
usermod -aG wheel userrname

Где «username» имя пользователя, а «sudo» или «wheel» - группа, в зависимости от дистрибутива.

Переключитесь на вашего пользователя и обновите систему, если есть что обновлять.
sudo apt update
sudo apt uprgade

Для Debian
sudo pacman -Syyu

Для Arch Linux. И так далее, в зависимости от вашего дистрибутива.

В качестве фаервола меня устраивает UFW, работающий поверх Iptables. У вас могут быть свои предпочтения. У Digital Ocean бесплатно доступен внешний фаервол, который вы можете настроить через панель управления. У Linode эта возможность является «новинкой» и доступна не во всех датацентрах. Перекройте весь входящий трафик, кроме 22-го порта, дабы не заблокировать доступ себе. Выделенный IP на стороне вашего провайдера поможет закрыть 22-й порт для всех, кроме себя. Если вы всё же заблокировали себя, то на стороне Digital Ocean ничего страшного, если используется внешний фаервол. У Linode есть Lish Console в панели управления, позволяющая обойти фаервол.

Подключаем репозитории TOR.
sudo apt install apt-transport-https

С помощью любимого текстового редактора создайте файл «tor.list» в /etc/apt/sources.list.d/ следующего содержания:

deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org DISTRIBUTION main
deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org DISTRIBUTION main


Где строки «[signed-by=/usr/share/keyrings/tor-archive-keyring.gpg]» актуальны для 11-й версии Debian и (скорее всего) более поздних, а «DISTRIBUTION» - кодовое имя вашей версии дистрибутива. Для Debian 11 это «bullseye».

Добавьте «arch=amd64» в строку, чтобы некоторые «apt-дистрибутивы» не ругались по поводу 32-х битной архитектуры. То есть строка будет выглядеть следующим образом в случае с Debian 11:
deb [arch=amd64 signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org bullseye main

Что указывает на то, что у нас архитектура x86-64 и на наличие или отсутствие в репозитории прочих нам начхать.

Подключите ключ (из под root)
wget -O- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null

Для более ранних версий можно использовать следующее:
sudo apt-key adv --fetch-keys 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc'

Сработает и в Bullseye, но система ругнётся, так как способ считается «устаревшим» и более не каноническим.

Обновляем список репозиториев и устанавливаем TOR.
sudo apt update
sudo apt install tor deb.torproject.org-keyring nyx obfs4proxy

Где «obfs4proxy» - прокси для TOR, к которому мы вернёмся чуть позже, а «nyx» - утилита для мониторинга узла (опционально). Для других дистрибутивов обратитесь к следующей странице на сайте проекта. Возможно для доступа к ней понадобится «средство обхода», поэтому я и рекомендую использовать тот же дистрибутив, что в этом примере. Если сайт проекта заблокирован и нет средств обойти блокировку, то придётся погуглить для поиска настроек репозиториев.

Для CentOS и Red Hat /etc/yum.repos.d/Tor.repo должен выглядеть так:
[tor]
name=Tor for Enterprise Linux $releasever - $basearch
baseurl=https://rpm.torproject.org/centos/$releasever/$basearch
enabled=1
gpgcheck=1
gpgkey=https://rpm.torproject.org/centos/public_gpg.key
cost=100

Для Fedora:
[tor]
name=Tor for Fedora $releasever - $basearch
baseurl=https://rpm.torproject.org/fedora/$releasever/$basearch
enabled=1
gpgcheck=1
gpgkey=https://rpm.torproject.org/fedora/public_gpg.key
cost=100

Для Arch Linux TOR есть в официальных репозиториях. У OpenSuse, похоже, тоже. Для Arch Linux «obfs4proxy» есть в AUR. В случае с OpenSuse скорее всего придётся собирать из исходников.

Так или иначе, после установки «tor» и «obfs4proxy» приступаем к настройке. Правим файл «torrc». В Debian он в /etc/tor/. В других дистрибутивах должен быть там же.
BridgeRelay 1
PublishServerDescriptor 0
SocksPort 9050 
SocksPort IP:PORT
#SocksPolicy accept 192.168.1.0/24
#SocksPolicy reject *
Log notice syslog
Log debug stderr
RunAsDaemon 1
DataDirectory /var/lib/tor
ControlPort 9051
HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
ORPort [IPv6]:PORT
ORPort IP:PORT
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 [::]:PORT
ServerTransportListenAddr obfs4 0.0.0.0:PORT
ExtORPort auto
#Address ip_or_domain
Nickname MyTORNetwork
RelayBandwidthRate 5000 KB
RelayBandwidthBurst 10000 KB
AccountingMax 400 GB
AccountingStart month 1 00:00
ContactInfo OWNER user@example.com
ExitPolicy reject *:* 

У Linode и Digital Ocean (по крайней мере в датацентрах юрисдикции Штатов) нет запрета на установку узлов TOR, но оба заставят вас его удалить после первого же инцидента. Поэтому не стоит даже пытаться разместить у них выходной узел. Но речь в этом материале о приватном мосте.

BridgeRelay 1
PublishServerDescriptor 0

Первая строчка конфигурации указывает на то, что наш узел — это мост. Вторая на то, что данные о нём нигде не должны публиковаться. По умолчанию проект TOR публикует адреса всех промежуточных и выходных узлов в публичном доступе. Адреса мостов так же собираются и предоставляются пользователю по запросу, когда в браузере вы запрашиваете адреса мостов. То есть вторая строка конфигурации указывает на то, что вы сами даёте эти данные (друзьям и т. д.), но автоматически TOR Browser никому их не предлагает (не факт, что при этом не собирает). То есть в этом и есть «скрытность». Если обычные мосты можно положить путём перебора адресов используя тот же браузер, или сам сайт проекта, то приватный мост будет скрыт, пока вы сами его не засветите в публичном месте.

SocksPort 9050
SocksPort IP:PORT

Первая строка указывает на локальный порт. Он используется для локальных SOCKS соединений в пределах localhost. Вторая используется для внешних. Порты должны быть разными и второй открыт на стороне фаервола для внешних соединений, если вы планируете подключаться к своему узлу через обычный браузер или что-либо ещё, помимо TOR браузера. IP — внешний IP-адрес вашего сервера.

#SocksPolicy accept 192.168.1.0/24
#SocksPolicy reject *

В данном примере строки закомментированы. Первая — политика принятия внешних соединений. То есть, если сам узел в локальной сети (что не проблема в странах, в которых TOR не блокируется или блокируется косоруко), то 192.168.1.0/24 указывал бы на то, что реле будет принимать все запросы на SOCKS порт из вашей локальной сети в диапазоне адресов с 192.168.1.1 до 192.168.1.255. Вторая строка указывает на то, что все остальные запросы отклоняются. В моём случае закомментировано, так как SOCKS порт всё равно заблокирован фаерволом за пределами локальной сети. Раскомментируйте обе строки и укажите своё значение. Если у вас выделенный IP-адрес, то укажите его. Если разрешить всем соединение на этом порте, то ваш узел захлебнётся и точно не будет «скрытым». По хорошему, порт должен быть заблокирован и единственным способом соединения должен оставаться TOR браузер на узлах подобного типа. Имейте ввиду, что у обоих рекомендованных провайдеров трафик ограничен. На минимальном тарифе — терабайт в большую сторону. Если вы напутаете в конфигурации и порт станет публичным, то терабайт уйдёт за пару дней при хорошем раскладе.

Log notice syslog
Log debug stderr

Эти строки отвечают за логирование. В моём случае это системные логи. Если хотите отдельные логи, то строки должны выглядеть следующим образом:
Log notice file /var/log/tor/notices.log
Log debug file /var/log/tor/debug.log


RunAsDaemon 1 указывает на то, что узел работает в качестве системного демона в фоновом режиме.
DataDirectory /var/lib/tor указывает на рабочую директорию узла. Там будут храниться ключи и прочее.
ControlPort 9051 — локальный порт, к которому будет подключаться утилита мониторинга (nyx), установленная ранее.
HashedControlPassword — хэшированный пароль для доступа к утилите мониторинга. Вы можете сгенерировать его командой «tor --hash-password pass», где «pass» - пароль. Придумайте свой. Можно использовать куки, заменив строку «HashedControlPassword» на «CookieAuthentication 1», но для доступа к мониторингу понадобится root, что излишне.

ORPort [IPv6]:PORT
ORPort IP:PORT

Первая строка относится к IPv6, вторая к IPv4. Это внешний IP вашего сервера. Порт должен быть доступен извне на стороне фаервола. Через этот порт ваш узел TOR будет связываться с другими.

ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 [::]:PORT
ServerTransportListenAddr obfs4 0.0.0.0:PORT
ExtORPort auto

Первая строка указывает на бинарник obfs4proxy. Вторая и третья на порт, который будет слушаться на предмет внешних SOCKS запросов. IPv6 и IPv4 соответственно. Не путать с SocksPort. В данной конфигурации TOR браузер будет соединяться именно с obfs4proxy, который в свою очередь «прячет» TOR трафик, маскируя его под обычный. То есть, при желании и технической возможности ваш провайдер увидит SOCKS прокси (хотя бы тому, что порт не связан со стандартными портами того или иного популярного ПО), но ничего не говорит ему о том, что это TOR. Если между клиентом и SocksPort идёт «чистый» трафик со всеми признаками TOR, то здесь всё выглядит как стандартная активность. Порт должен быть открыт для внешних соединений и не совпадать с ORPort. Четвёртая строка отвечает за локальное взаимодействие TOR и obfs4proxy. Всегда «auto». Не пытайтесь указать своё значение.
Address ip_or_domain, где «ip_or_domain» указывает на IP вашего сервера, или его доменное имя. Строка не имеет значения в данной конфигурации. Если убрать из публичной конфигурации, TOR подберёт значение. Отображается в публичных списках известных узлов.
Nickname — имя вашего узла. Используется в паре с «Address». Будет отображаться в логах TOR браузера.

RelayBandwidthRate 5000 KB
RelayBandwidthBurst 10000 KB
AccountingMax 400 GB
AccountingStart month 1 00:00

Первая строка указывает на ширину канала, который доступен для узла. Вторая указывает на максимально возможную ширину на пиках. Это не ширина вашего реального канала, это разрешённая скорость для TOR в килобайтах. Третья строка указывает на максимальный объём трафика за учётный период. Четвёртая строка указывает, что учётный период начинается в 12 ночи, первого числа каждого месяца. Стоит учесть, что «AccountingMax» указывает на трафик в каждую из сторон, а не на общий объём. То есть в данной конфигурации возможно 800 GB ежемесячно, со скоростью 39 мегабит в секунду, при скачках в 2 раза больше. Учитывая, что это скрытый мост, то значения вполне приемлемые. На публичном узле при таких скоростях весь лимит был бы выработан меньше чем за сутки.

ContactInfo — ваше имя или никнейм и адрес электронной почты. Используется для связи по техническим вопросам. Публикуется в открытом доступе в случае публичных узлов.

ExitPolicy reject *:* указывает на то, что узел не является точкой выхода. Мост не может быть точкой выхода, иначе теряется весь смысл.

Проверяем всё ещё раз и сохраняем изменения. Далее правим файл «torsocks.conf» в той же директории, что и «torrc».
TorAddress 127.0.0.1
TorPort PORT
OnionAddrRange 127.42.42.0/24

Первая строка — адрес узла. В нашем случае локальный, так как всё на одном сервере. Технически может быть и на разных. TorPort — тоже, что и локальный SocksPort в «torrc». Прокси будет обращаться к нему для выхода в TOR. OnionAddrRange относится к «скрытым сервисам». В нашем случае бесполезная строка, так как у нас нет подобных сервисов. Технически, это незадействованный диапазон локальных адресов для, например, .onion сайтов на вашем сервере.

Сохраняем. Перезагружаем TOR.
sudo systemctl restart tor@default

Для автозапуска при старте системы используйте следующее:
sudo systemctl enable tor@default

К сожалению в Debian я не могу победить глюк, который не даёт узлу запуститься автоматически. Видимо это глобально затрагивает большинство машин на Debian. Возможно и на Ubuntu тоже. То есть, после перезагрузки сервера придётся использовать «sudo systemctl start tor@default» для запуска TOR. Проблема, возможно, связана с ранним выполнением скрипта, до поднятия сетевых интерфейсов.

Далее нам нужно получить данные для TOR браузера. Пример хранится в /var/lib/tor/pt_state/obfs4_bridgeline.txt. Откройте файл и там будет строка подобного типа:
Bridge obfs4 <IP ADDRESS>:<PORT> <FINGERPRINT> cert=67X/L181CbNew1FyZ7gw/YJLJYT6fuB/tm8VtOlJ/r1gxNFq1NY5lJ+TlHOH2AuO+6myTg iat-mode=0

Где «cert» - сертификат для идентификации. IP и Port — это данные из настроек «torrc», указанные для «ServerTransportListenAddr». Соответственно, если на стороне браузера нет поддержки IPv6, то используйте IPv4. FINGERPRINT можно получить следующей командой:
sudo cat /var/lib/tor/fingerprint

То есть, скопируйте строку из /var/lib/tor/pt_state/obfs4_bridgeline.txt, замените IP:Port и FINGERPRINT на свои значения и вставьте её в соответствующее поле в настройках TOR браузера. Соединение будет поднято.

Таким образом мы настроили приватный мост TOR и с помощью obfs4proxy подключили к нему TOR браузер. Используйте команду «nyx» на запуска утилиты мониторинга.
Like Dislike

___
Blacksmith.



Tags: TOR, Linux


 
  • Creative Commons Licence
  • Norton Safeweb
  • Website Uptime Monitoring By ServiceUptime.com
  • Yandex.Metrika