12 марта, 2024 года во Всемирный день борьбы с киберцензурой, команда по борьбе с цензурой Tor Project рада официально объявить о выпуске WebTunnel, нового типа моста Tor, предназначенного для помощи пользователям в регионах с жёсткой цензурой в подключении к сети Tor. WebTunnel, присоединился к нашей коллекции технологий обхода цензуры, разработанных и поддерживаемых The Tor Project.
Разработка различных типов мостов имеет решающее значение для того, чтобы сделать Tor более устойчивым к цензуре и опережать злоумышленников в очень динамичном и постоянно меняющемся ландшафте цензуры. Это особенно верно, поскольку мы переживаем глобальный мегацикл выборов 2024 года, роль технологий обхода цензуры становится решающей в защите свободы интернета.
Что такое WebTunnel и как он работает?
WebTunnel — это устойчивый к цензуре подключаемый транспорт, предназначенный для имитации зашифрованного веб-трафика (HTTPS), вдохновленный HTTPT. Он работает, оборачивая соединение полезной нагрузки в HTTPS-соединение, похожее на WebSocket, которое выглядит для сетевых наблюдателей как обычное соединение HTTPS (WebSocket). Таким образом, для стороннего наблюдателя, не знающего скрытого пути, это выглядит как обычное HTTP-соединение с сервером веб-страницы, создающее впечатление, что пользователь просто просматривает веб-страницы.
На самом деле, WebTunnel настолько похож на обычный веб-трафик, что может сосуществовать с веб-сайтом на одной конечной точке сети, то есть с тем же доменом, IP-адресом и портом. Такое сосуществование позволяет стандартному прокси-серверу обратного трафика перенаправлять как обычный веб-трафик, так и WebTunnel на соответствующие серверы приложений. В результате, когда кто-то пытается зайти на сайт по общему сетевому адресу, он просто воспринимает содержимое этого адреса веб-сайта и не замечает существования секретного моста (WebTunnel).
Сравнение WebTunnel с мостами obfs4.
WebTunnel можно использовать в качестве альтернативы obfs4 для большинства пользователей Tor. В то время как obfs4 и другой полностью зашифрованный трафик нацелены на то, чтобы быть полностью различимыми и неузнаваемыми, подход WebTunnel к имитации известного и типичного веб-трафика делает его более эффективным в сценариях, где существует список разрешенных протоколов и запрещенная по умолчанию сетевая среда.
Рассмотрим механизм цензуры сетевого трафика как машину для сортировки монет, где монеты представляют собой поток трафика. Традиционно такая машина проверяет, подходит ли монета к известной форме, и пропускает ее, если подходит, или отбрасывает, если нет. В случае полностью зашифрованного, неизвестного трафика, как показано в опубликованном исследовании «Как Великий китайский файрвол обнаруживает и блокирует полностью зашифрованный трафик, который не соответствует какой-либо конкретной форме, он будет подвергаться цензуре. В нашей аналогии с монетой, монета не только не должна соответствовать форме какого-либо известного заблокированного протокола, она также должна соответствовать признанной разрешенной форме, иначе она будет отброшена. Трафик obfs4, не совпадающий ни с одним известным разрешенным протоколом или текстовым протоколом, будет отклонен. В отличие от этого, трафик WebTunnel, напоминающий трафик HTTPS, разрешенный протокол, будет проходить.
Если система только что установлена и вы не устанавливали пакетов необходимо загрузить пакетную базу репозиториев.
sudo apt update
Устанавливаем Go для сборки транспóрта.
sudo apt install golang
Делаем текущим каталог шифрованного раздела.
cd ~/Persistent
Клинируем репозиторий с исходными текстами транспóрта
git clone https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/webtunnel
Создаём каталог для библиотек необходимых для сборки. Go не сможет загрузить их автоматически через прокси.
mkdir -p ~/go/pkg/mod/cache/download/gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib/\@v/
Делаем созданный каталог текущим.
cd ~/go/pkg/mod/cache/download/gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib/\@v/
Загружаем библиотеки для сборки.
wget https://proxy.golang.org/gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib/@v/v1.5.0.zip
и
wget https://proxy.golang.org/gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib/@v/v1.5.0.mod
Делаем текущим каталог репозитория для сборки клиента.
cd ~/Persistent/webtunnel/main/client
Собираем клиент.
go build
Задаём владельца собранного файла транспóрта.
sudo chown root:root client
Создаём каталог для транспорта и конфигурационных файлов.
sudo mkdir /home/amnesia/Persistent/webtunnel_start
Копируем в созданный каталог файл транспóрта.
sudo cp client /home/amnesia/Persistent/webtunnel_start/webtunnel-client
Копируем в созданный каталог конфигурационный файл tor.
sudo cp /etc/tor/torrc /home/amnesia/Persistent/webtunnel_start/torrc
Копируем в созданный каталог профиль AppArmor для tor.
sudo cp /etc/apparmor.d/system_tor
Создаём файл скрипта для подключения WebTunnel.
sudo nano /home/amnesia/Persistent/webtunnel_start/webtunnel_start.sh
Помещаем в файл текст
#!/bin/sh
cp /home/amnesia/Persistent/webtunnel_start/webtunnel-client /usr/bin/webtunnel-client
cp /home/amnesia/Persistent/webtunnel_start/torrc /etc/tor/torrc
cp /home/amnesia/Persistent/webtunnel_start/system_tor /etc/apparmor.d/system_tor
apparmor_parser -r /etc/apparmor.d/system_tor
systemctl restart tor
Сохраняем изменения нажимаем Ctrl+O
, нажимаем Enter
и выходим из текстового редактора Ctrl+X
.
Задаём права на выполнение для скрипта.
sudo chmod 700 /home/amnesia/Persistent/webtunnel_start/webtunnel_start.sh
Открываем профиль AppArmor для tor.
sudo nano /home/amnesia/Persistent/webtunnel_start/system_tor
Между имеющимися в файле фигурными скобками {
и }
добавляем строчку
/usr/bin/webtunnel-client ix,
Сохраняем изменения в файле и выходим из текстового редактора.
Открываем конфигурационный файл tor torrc.
sudo nano /home/amnesia/Persistent/webtunnel_start/torrc
Находим строчки начинающиеся на Bridge obfs4
и ClientTransportPlugin
и добавляем в начало этих строк знак #
.
Было:
Bridge obfs4…
ClientTransportPlugin…
Стало:
#Bridge obfs4…
#ClientTransportPlugin…
Добавляем строки:
Bridge мост_webtunnel
ClientTransportPlugin webtunnel exec /usr/bin/webtunnel-client
Вместо текста мост_webtunnel
вставьте мост webtunnel с сайта https://bridges.torproject.org/
Добавляем строчку
Log notice file /var/log/tor/tor.log
Для просмотра за ходом установки соединения.
Сохраняем изменения в файле и выходим из текстового редактора.
Закрываем окно Помощник подключения к TOR
, для поделючения к tor с помощью WebTunnel оно не понадобится. Но вы можете как и прежде подключаться по obfs4 с его помощью.
Запускаем скрипт.
sudo /home/amnesia/Persistent/webtunnel_start/webtunnel_start.sh
Просматриваем файл журнала tor
sudo cat /var/log/tor/tor.log
Ожидаем установки соединения с tor. После установки соединения луковица справа сверху бкдет не зачёркнута, в файле журнала tor будет написано Bootstrapped 100% (done): Done
.
Сообщение в терминале после повторного запуска скрипта cp: невозможно создать обычный файл '/usr/bin/webtunnel-client': Текстовый файл занят
не указывает на причину отсутствия подключения к tor сети.
Если вы не можете подключиться к Tor и собрать транспорт, так как рабочих мостов obsf4 больше нет…
Подключаетесь к Tor из другой операционной системы, где есть такая возможность. Например из Android c помощью InviZible Pro Эта программа поддерживает соединение с Tor через WebTunnel.
Скачиваете файлы
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/webtunnel/-/archive/main/webtunnel-main.zip
https://proxy.golang.org/gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib/@v/v1.5.0.zip
Скачиваете образ Debian LiveUSB и записываете на USB накопитель аналогично Tails. Загружаетесь в Debian, подключаетесь к интернету. Переносите в домашний каталог файлы webtunnel-main.zip и v1.5.0.zip
Открываете текстовый редактор. Вставляете в него текст
module gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib
go 1.11
Сохраняете в домашний каталог с именем v1.5.0.mod.
Открываете терминал. Распаковываете архив webtunnel-main.zip 7z x ~/webtunnel-main.zip
Создаёте каталог
mkdir -p ~/go/pkg/mod/cache/download/gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib/\@v/
Переносите в него файлы v1.5.0.zip и v1.5.0.mod. Устанавливаете golang sudo apt install golang
Переходите в каталог cd ~/webtunnel-main/main/client
собираете транспорт go build
Переносите файл ~/webtunnel-main/main/client/client в домашний каталог пользователя Tails. Копировать его можно с помощью графического интерфейса на отдельный USB накопитель. Меняете владельца файла
amnesia@amnesia:~$ sudo chown root:root ~/client
Далее делаете всё описанное с начала руководства, но вместо sudo cp client /home/amnesia/Persistent/webtunnel_start/webtunnel-client
копируйте файл client из домашнего каталога sudo cp ~/client /home/amnesia/Persistent/webtunnel_start/webtunnel-client
.