Приватный узел 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 Linuxuseradd username
usermod -aG wheel userrnameГде «username» имя пользователя, а «sudo» или «wheel» – группа, в зависимости от дистрибутива. Переключитесь на вашего пользователя и обновите систему, если есть что обновлять. sudo apt update
sudo apt uprgadeДля Debiansudo 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 1PublishServerDescriptor 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 syslogLog debug stderrЭти строки отвечают за логирование. В моём случае это системные логи. Если хотите отдельные логи, то строки должны выглядеть следующим образом: Log notice file /var/log/tor/notices.logLog debug file /var/log/tor/debug.logRunAsDaemon 1 указывает на то, что узел работает в качестве системного демона в фоновом режиме.DataDirectory /var/lib/tor указывает на рабочую директорию узла. Там будут храниться ключи и прочее.ControlPort 9051 — локальный порт, к которому будет подключаться утилита мониторинга (nyx), установленная ранее. HashedControlPassword — хэшированный пароль для доступа к утилите мониторинга. Вы можете сгенерировать его командой «tor –hash-password pass», где «pass» – пароль. Придумайте свой. Можно использовать куки, заменив строку «HashedControlPassword» на «CookieAuthentication 1», но для доступа к мониторингу понадобится root, что излишне. ORPort [IPv6]:PORTORPort IP:PORTПервая строка относится к IPv6, вторая к IPv4. Это внешний IP вашего сервера. Порт должен быть доступен извне на стороне фаервола. Через этот порт ваш узел TOR будет связываться с другими. ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxyServerTransportListenAddr obfs4 [::]:PORTServerTransportListenAddr obfs4 0.0.0.0:PORTExtORPort 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 KBRelayBandwidthBurst 10000 KBAccountingMax 400 GBAccountingStart 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» на запуска утилиты мониторинга.

Go to Source
Author: