Привет, Хабр!
Надеюсь, ты уже слегка отошёл от новогодних праздников и возвращаешься в привычную колею. Лично я эти длинные выходные терпеть ненавижу и, посмотрев, по традиции, "Хоббита" с "Властелином Колец" дня за 3-4, начинаю от скуки лезть на стену и остервенело искать, чем бы себя занять. Не стал исключением и прошедший год - в этот раз сердце успокоилось с помощью бриджей Тора, ораклового облака и вполне реальной возможности заполучить ценный лут.
Но давайте обо всём по порядку.
Вряд ли кто-то за прошедший месяц успел забыть, что в РФ, на минуточку, блокируется Тор. Меня, как пользователя сети интернет, этот факт категорически не устраивает - причём в данном случае дело даже не столько в самом факте блокировок, а в том, как организационно и технически реализован (а точнее - НЕ реализован) данный процесс.
Напомню, что РКН, ответственный за "регулирование" интернета подобными методами, доселе в основном занимался веб-сайтами - и демонстрировал при этом хоть какое-то подобие обратной связи, давая возможность зайти на соответствующий ресурс и увидеть, что вообще происходит. Ну, такие мелочи, как, скажем, основание блокировки, номер постановления и само состояние "заблокирован/ не заблокирован". Хоть какая-то информация.
В случае же Тора всё совершенно по-другому. Использование печально известных ТСПУ, ответственных за периодические "штормления" рунета, даёт возможности творить с проходящим трафиком что угодно - и не перед кем за это не отчитываться. Ну, скажем, сломать ненадолго известные популярные DNS-серверы. Или вот начать блокировать Тор. Каким образом технически реализована эта блокировка, на основании чего, какие IP-адреса затронуты - всё это тайны, покрытые мраком. Сочувствую саппортам интернет-провайдеров, к которым наверняка образовался тогда шквал звонков.
Началось всё с банального - блокировки всех или большей части входных узлов Тора. Дело это нехитрое, так как списки этих нод, так же, кстати, как и выходных - секретом не являются и доступны публично. Но Тор не позиционировался бы как инструмент обхода цензуры, если бы его так легко можно было поломать. Для таких вот случаев, когда государство или какой-то особенно упоротый провайдер начинает с ним борьбу, у Тора есть некоторое количество встроенных методов обхода - с помощью так называемых бриджей. Именно на них практически сразу и нацелились наши "регуляторы".
К сожалению, какого-то гарантированно рабочего технического способа противостоять блокировкам у Тора нет - поэтому приходится полагаться на меры организационного характера, максимально затрудняя составление полного списка бриджей. Это, например, выдача настроек с сайта или прямо из Тор Браузера после разгадывания капчи; получение бриджа по почте в ответ на входящее письмо. Как вы понимаете, при наличии достаточного админресурса все эти методы успешно компенсируются, как выразились в одном из комментариев, "ротой курсантов ФСБ, мануально перебирающих бриджи". Именно поэтому важно постоянно пополнять список бриджей, добавляя новые.
Этим, завершая слегка затянувшуюся художественную ремарку, я и решил заняться на новогодних праздниках.
Сами разработчики Тора, похоже, были совершенно со мной согласны в этом плане и до блокировок в России. Именно поэтому они ещё в середине прошлого ноября организовали кампанию "Help Censored Users, Run a Tor Bridge", направленную именно на увеличение числа бриджей. Целью было анонсировано 200 штук - и, глядя на статистику, можно сказать, что эта цель была достигнута с лихвой: за последние два месяца количество бриджей увеличилось примерно вдвое, с 1200 до 2300:
В качестве поощрения "мостоводам" они предлагают различного вида мерч - наклейки, футболки и даже худи. Этот тот самый ценный лут, о котором я говорил в первом абзаце. Но получение лута, даже от таких крутых ребят, как The Tor Project, само по себе на статью не тянет. В самом деле - кто угодно ведь может арендовать десяток виртуалок на каком-нибудь Digital Ocean или Scaleway, особого подвига в этом нет. Мне показалось интересным усложнить себе задачу, попытавшись проделать то же самое, но без каких-либо финансовых вложений.
На этом этапе я припомнил, что в середине прошлого года Oracle анонсировал расширение линейки инстансов, доступных по программе Always Free, виртуалками на базе ARM-процессоров Ampere (на Хабре про это даже писали). Интересность новых инстансов заключается в том, что они, в отличие от предлагаемых ранее, обладают не всего одним гигабайтом памяти, а целыми шестью. Кроме того - вместо двух экземпляров x86-виртуалок, "армовских" можно запустить целых четыре (или две двойных, или одну мега-квадро-виртуалку с 4 ядрами и 24 ГБ ОЗУ).
Процесс регистрации, ограничения и неочевидные моменты программы Always Free Tier неплохо расписаны в статье по линку в прошлом параграфе, дублировать информацию я не буду. Заполнив все необходимые поля, подтвердив почтовый адрес и привязав банковскую карту (для людей с повышенной тревожностью - её в любой момент можно отвязать, ничего не потеряв), вы оказываетесь в панели управления облаком, где нас в первую очередь интересует раздел Compute > Instances. Он, разумеется, девственно чист - но это ненадолго. Без сомнений кликайте кнопку "Create instance" - и поехали!
По умолчанию нам предлагают совсем не ту "форму" виртуалки, как это называется у Оракла, которую хотелось бы. Меняем в настройках вид процессора на Ampere, shape - на VM.Standard.A1.Flex, а ОС - на ту, которая вам ближе. Я, поскольку вожу давнюю дружбу с Дебианом (но его в списке нет), выбрал банальную Убунту, имейте этот факт в виду при дальнейшем чтении. Не забудьте при создании скачать SSH-ключ для доступа или закинуть собственный публичный.
Кажется, что уже можно ломиться в консоль новорожденного сервера и творить непотребства - но перед этим придётся задержаться в браузере ещё на минуту, чтобы заранее открыть нужные для функционирования бриджа порты (а также, по желанию, ограничить SSH-доступ доверенными адресами). Делается это в разделе Networking > Virtual Cloud Networks, после чего необходимо зайти в единственную доступную сеть, и далее в Security Lists, где нужно добавить ingress-правило, открыв два любых незанятых TCP-порта на 0.0.0.0/0. В моём случае это 8443 и 443.
Вот теперь ничто не мешает нам залогиниться на виртуалку, где нужно проделать буквально несколько манипуляций из-под рута:
Установить нужные для Докера зависимости и добавить его репозиторий в ОС.
apt update
apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Установить зависимости для docker-compose и установить его самого с помощью pip.
apt update
apt install -y curl python3-pip libffi-dev python-openssl libssl-dev zlib1g-dev gcc g++ make docker-ce iptables-persistent
pip3 install docker-compose
Внимательные читатели наверняка заметили, что мы зачем-то установили кажущийся лишним пакет iptables-persistent. Это не просто так, нюанс в том, что в Oracle Cloud по умолчанию фаерволл работает не только на уровне всей сети, но и на самих виртуальных машинах (при этом хостер добавляет пачку своих правил - в такой ситуации просто обнулять iptables я не решился), поэтому нам нужно будет открыть наши порты ещё и внутри. Делается это элементарно - достаточно добавить два соответствующих правила в начало цепочки INPUT, например, скопировав их в /etc/iptables/rules.v4:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8443 -j ACCEPT
После данной манипуляции нужно не забыть обновить настройки фаерволла и рестартовать сервис контейнеризации:
iptables-restore /etc/iptables/rules.v4
service docker restart
На данном этапе мы получили полностью готовое к разворачиванию бриджа окружение, осталось только установить и запустить сам контейнер. Для этого нам понадобятся всего два файла, которые можно скачать прямо из репозитория проекта:
wget https://gitlab.torproject.org/tpo/anti-censorship/docker-obfs4-bridge/-/raw/main/docker-compose.yml
wget https://gitlab.torproject.org/tpo/anti-censorship/docker-obfs4-bridge/-/raw/main/.env
Первый представляет собой шаблон для Докера, описывающий загрузку и конфигурацию контейнера. Второй - файл с настройками, который нужно будет заполнить вручную, введя номера портов и почту для связи с владельцем ноды. При желании бридж можно как-то назвать. Кроме того, в разделе с параметрами, пробрасываемыми Тору, нужно будет отключить IPv6 и явным образом указать внешний адрес виртуалки (по идее, он должен определяться автоматически, но у меня почему-то не заработало, а разобраться руки не дошли). В результате наш .env должен принять примерно такой вид:
# Set required variables
OR_PORT=8443
PT_PORT=443
EMAIL=changeme@gmail.com
# If you want, you could change the nickname of your bridge
NICKNAME=helloandgtforkn1
# If needed, activate additional variables processing
OBFS4_ENABLE_ADDITIONAL_VARIABLES=1
OBFS4V_AddressDisableIPv6=1
OBFS4V_Address=81.177.103.94
Проделав всё это, вполне можно попробовать запустить ваш бридж:
docker-compose up -d
Если всё в порядке, спустя несколько секунд, проверив с помощью docker-compose logs логи, вы должны увидеть радостную надпись "Self-testing indicates your ORPort 81.177.103.94:8443 is reachable from the outside. Excellent. Publishing server descriptor".
В принципе, на этом можно было бы и закончить, поскольку бридж в таком состоянии уже полностью работоспособен.
Но если вы, так же, как и я, возжелаете халявного мерча от The Tor Project, то придётся выполнить ещё пару шагов. Во-первых, нужно получить данные бриджа - делается это командой docker exec %container-id% get-bridge-line (идентификатор контейнера можно посмотреть в первой колонке вывода docker ps). Полученную строку (или строки, если вы решили запустить несколько бриджей) в соответствии с правилами эвента необходимо отправить с той почты, которую вы указали в настройках, на frontdesk@torproject.org. Кроме того, зачем-то нужно отписаться на форуме в соответствующей теме , скопировав туда хэшированный (не перепутайте, это важно!) ключ вашей ноды. Сделать это можно, погрепав лог контейнера по фразе "Your Tor bridge's hashed identity key".
Если что-то пошло не так
Если get-bridge-line у вас, как и у меня, почему-то не заработал (подозреваю, что это вот этот баг, но скорее рано, чем поздно, его починят), можно получить те же данные руками:
Скопировать из лога контейнера фингерпринт сервера, погрепав его по фразе "Your Tor server's identity key fingerprint" - это строка из 40 символов вида 50065F50AB29D4F5FCA70314A8D8EBE6B9C9F87B.
Скопировать последнюю строку вывода команды docker exec %container-id% cat /var/lib/tor/pt_state/obfs4_bridgeline.txt, отчекрыжить слово Bridge и заменить поля "<IP ADDRESS>", "<PORT>" и "<FINGERPRINT>" на внешний адрес вашей виртуалки, порт obfs4-бриджа (в моём конфиге это 443, переменная PT_PORT) и нагрепанный из лога фингерпринт.
Получиться должно вот такое:
obfs4 81.177.103.94:443 50065F50AB29D4F5FCA70314A8D8EBE6B9C9F87B cert=MEbrh3SdwDIPnVqnw+A6BMylU6IjGIG2mitDeZrNtnhN6CyQXOOHj2VvZpV3TRU6fHLzJw iat-mode=0
На этом наши манипуляции завершены - мы получили работающий obfs4-бридж, который хоть немного, возможно ненадолго, но поможет пользователям Тора в РФ и других странах, где "регулируют интернет".
Если награды от разработчиков вас не прельщают, просто запустите несколько инстансов, никуда ничего не отправляя - бридж самостоятельно зарегистрируется в сети и через некоторое время можно будет посмотреть на него по ссылке вида https://bridges.torproject.org/status?id=%hashed-server-id%. А вы после такого непременно получите жирный плюс в карму.
Благодарю за внимание, хорошей вам связности и стабильного резолва.
Комментарии (16)
uyrij
13.01.2022 17:59+1Летом пробовал настроить obfs4 на убунту focal fossa x64 репосорсы все были на Яндекс и другие российские зеркала столкнулся с тем, что банально очень трудно вытянуть нужные зависимости.то ip не тот, то ключ невалид, скачал вразнобой по зеркалам, настроечный конфиг файл - немалая простыня, сделал вроде по туториалу, но не разу не взлетело, хоть выводило фингерпринты в консоль, так что без obfs4 Тор работает и демоном как прокси и как хочешь, а запускаешь obfs4, все глухо, может это с нашими провайдерами связано в пользу этого факт что cloudflare-warp тоже глухо ничего нет, а уж с установкой/настройкой CLOUDFLARE проблем не было потому что официальным скриптом. Так что, хорошо что а оракле так легко все встает. Всем хорошего Н.Г ! ????????????
ky0 Автор
13.01.2022 18:43Ставить бриджи внутри нашей юрисдикции довольно бессмысленно — у нас же всё, нужное для их работы блокируется. Корневые серверы, входные ноды, ну и частично сами ресурсы, на которые можно хотеть зайти. Смысл именно в том, чтобы коннектиться к Тору через неизвестный «регулировщикам интернета» адрес, на котором ограничений по связности нет.
crims0n_ru
14.01.2022 00:20Внутри облака Oracle тоже нет особого смысла, заблокировать, как мы знаем, могут всё. Во времена блокировки телеги мне заблокировали платный сервер в Чехии из-за размещения на нём общедоступного прокси. Более того, размещение именно там чревато блокировкой адресов оракла и потерей российскими пользователями возможности иметь бесплатный сервер для личных нужд.
ky0 Автор
14.01.2022 00:22Публичный прокси, всё-таки, довольно сильно отличается от релея с бриджем — айпи последнего не фигурирует ни в каких блэклистах, так как не является выходной нодой. Судя по официальной информации — проблем с Ораклом пока не было.
crims0n_ru
14.01.2022 08:28Немного неверно написал. Не просто публичный прокси, а публичный MTProxy, который работает только с телегой и, по идее, его сложнее обнаружить. Но всё равно как-то вычислили за несколько месяцев. Всё зависит от того, насколько серьёзно РКН возьмётся за Tor, так как трафик к его бриджам вычисляется проще.
ZeroMatrix
13.01.2022 18:38+1We will wrap up the campaign on January 7, 2022.
Увы, залутать уже ничего не получится)
А так - спасибо, статья очень интересная
ky0 Автор
13.01.2022 18:40Да, спасибо, что напомнили!
Я тоже смотрел-смотрел на это дело… и решил почему-то, что этот «wrap up» в плане подведения итогов — получилось ли добавить 200 бриджей или нет. Надеюсь, что всё-таки они мерч будут и дальше рассылать, особенно учитывая тот факт, что для получения нужно довольно долго держать эти бриджи в работоспособном состоянии — полгода, год…
bouncycastle
14.01.2022 00:06Уже полгода тут продвигают "халявные" ampere-инсьансы Амазона, что вызвало их банальный дефицит (out of capacity).
И под видом сервера Майнкрафт, и под видом VPN ...
В итоге получается ни себе ни людям, после создания виртуалки (если удалось найти окно) через неделю инстанс отключается и больше не может быть включен - out of capacity
crims0n_ru
14.01.2022 08:34+1Очень странная ситуация. У меня используется виртуалка на Ampere в качестве основной, работает 24/7 с момента создания. Возможно, это зависит от региона размещения. У меня тоже была проблема аналогичная этой, когда было возможно создать инстанс только с одним OCPU, но я просто увеличил ресурсы виртуалки сразу после её создания.
VladimirKalachikhin
14.01.2022 00:11Однако, "Out of capacity for shape VM.Standard.A1.Flex in availability domain". Так что дают или не дают такие инстансы -- наперёд неизвестно.
ky0 Автор
14.01.2022 00:19+1Армовские инстансы можно же запускать в любом AD региона:
In regions with multiple availability domains:
* You can create Ampere A1 Compute instances in any availability domain.
* Instances using the VM.Standard.E2.1.Micro shape can only be created in one availability domain.
Имхо, дефицит преувеличен — особенно если не брать наиболее популярные регионы вроде Амстердама.
Tuxozaur
14.01.2022 09:48Насколько я помню, в Oracle Cloud существует месячный лимит трафика для бесплатных инстансов. Мне кажется, это такая себе идея, выставлять в паблик инстанс, через который пойдёт нелимитированный трафик. Можно ведь и на оплату попасть по итогу.
ky0 Автор
14.01.2022 16:04Через бриджи, судя по моему мониторингу, идёт совсем немного по сравнению с обычной нодой Тора. 1-2 мегабита, не больше. Тем более, если сомневаетесь — можно в настройках контейнера указать лимиты. Ну и карту отвязать, если сильно сомневаетесь :)
forthuser
Интересно, что с заходом через obfs4 есть проблемы, но к примеру указание obfs3 при использовании даже Тор браузера версии 7.0.9 под Linux LiveCD Puppy вполне нормально коннектится и далее, если не снять в настройках автообновление браузера то тоже сеть работает, а если пройти обновления до 8.0 и далее на современную версию, то работоспособность сразу «браузера» нарушается.
P.S. Интересно насколько такое решение работоспособно и безопасно т.к. obf3 не видно в настойках последних версий Тор браузера.
Безопасность подключения к i-net, отчасти гарантируется и использованием, в моём случае, подобия тонкого клиента при загрузке неизменяемого образа LiveCD Linux Puppy с внешнего SSD и возможностью и его отключения после загрузки (помимо отключенных физически внутренних HD дисков компьютера) ????
polar_yogi
По поводу проблемы после обновления до последней версии tor browser, после 10.5 в библиотеках появляются зависимости от wayland, если на компе поддержка wayland отсутствует, то tor browser запускаться не будет. Легко проверить запустив start-tor-browser --verbose.
https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/40693 - описание и
workaroundкостыль.