Раздельный запуск Torbrowser от нескольких пользователей с общим системным Tor-процессом и локальная прозрачная торификация
Цель варианта
- Использовать торбраузер с локальным системным тором вместо поставляемого в составе TBB.
- Осуществить одновременную работу нескольких пользователей системы через системный тор с построением различных цепочек для каждого пользователя посредством подключения к разным портам SocksPort и посредством прозрачной торификации на разные порты TransPort, DNSPort для других програм (опционально — для самого TBB использование прозрачной торификации устарело и не рекомендуется).
- Все пакеты, посланные из под конкретного пользователя торбраузером должны направляться файрволлом только на определённые порты локального хоста, связанные с работой системного тора. Это существенно исключает возможность утечки пакетов при уязвимостях в торбраузере, но существенно не защищает от преднамеренных целевых атак на данную конфигурацию.
Конфигурация тор
Остановите системный тор: /etc/init.d/tor stop. Если в текущей версии с этим есть проблемы, используйте kill.
Закомментируйте в конфиг-файле /etc/tor/torrc опцию SocksListenAddress 127.0.0.1. Она устарела, по умолчанию тор слушает только локальные соединения.
В случае проблем с запуском /etc/init.d/tor start, можно в ответ на соответствующие ошибки добавлять опции:
Для прозрачной торификации по умолчанию и для работы через SocksPort тора используются опции:
Следует добавить нужное количество дополнительных портов:
Поскольку порт 9051 занят, то добавим опции управляющего порта:
Управляющий порт м.б. использован для работы с программой tor-arm, показывающий статистику соединений с сетью tor и позволяющей менять цепочки для всех соединений.
Запуск тор /etc/init.d tor start не должен приводить к ошибкам и должен показывать, что все внесённые в конфиг порты работают нормально.
Настройка iptables
Во многих системах по-умолчанию используется сложный механизм инициализации, конфигурирования и хранения конфигов iptables. Подразумевается, что этот механизм отключен, а вместо него используется шелл-скрипт, который пользователь поддерживает самостоятельно. В Debian/Linux он может быть размещён, например, в /etc/network/if-pre-up.d. Здесь приведены только фрагменты такого скрипта, относящиеся к рассматриваемому варианту торификации.
Закроем снаружи все открытые тор-порты, даже если они принимают только локальные соединения:
# $IPTABLES -- переменная содержит путь к iptables, обычно:
IPTABLES="/sbin/iptables"
# $INET_IFACE -- внешний сетевой интерфейс, обычно:
INET_IFACE="eth0"
# blocked_myports -- пользовательская цепочка для заблокированных портов
iptables -N blocked_myports; iptables -F blocked_myports
for PROTOCOL in TCP UDP; do
for PORT in $(seq 53 58) $(seq 9040 9045) \
$(seq 9050 9055) 9059 9060; do
$IPTABLES -A blocked_myports -i $INET_IFACE -o !lo -p $PROTOCOL \
--dport $PORT -j DROP
done
done
$IPTABLES -A INPUT -p TCP -j blocked_myports
$IPTABLES -A INPUT -p UDP -j blocked_myports
Сделаем исключение из обработки для пакетов идущих на локальный хост.
$IPTABLES -t nat -A OUTPUT -o lo -j RETURN
$IPTABLES -t nat -A OUTPUT -d 127.0.0.1 -j RETURN
Правило для первого анонимного пользователя:
#Разрешим соединение с SOCKS-портом
$IPTABLES -t filter -A OUTPUT -d 127.0.0.1 -p tcp -m owner \
--uid-owner anonym_1 --dport 9051 -j ACCEPT
###Прозрачная торификация [начало]###
#
#Не требуется при работе TBB
#Может быть использована для одновременной работы других програм
#При отсутствии необходимости эти опции м.б. закоментированы
# Прозрачная торификация TCP на порт 9041
$IPTABLES -t nat -A OUTPUT -p tcp -m owner --uid-owner anonym_1 \
-m tcp -j REDIRECT --to-ports 9041
$IPTABLES -t filter -A OUTPUT -d 127.0.0.1 -p tcp -m owner --uid-owner anonym_1 \
-m tcp --dport 9041 -j ACCEPT
#Прозрачная торификация DNS на порт 54
$IPTABLES -t nat -A OUTPUT -p udp -m owner --uid-owner anonym_1 \
-m udp --dport 53 -j REDIRECT --to-ports 54
$IPTABLES -t filter -A OUTPUT -d 127.0.0.1 -p udp -m owner --uid-owner anonym_1 \
-m udp --dport 54 -j ACCEPT
#
###Прозрачная торификация [конец]###
#Больше этому пользователю ничего не разрешено:
$IPTABLES -A OUTPUT -m owner --uid-owner anonym_1 -j REJECT
По аналогии, правило для второго анонимного пользователя (с закоментированной прозрачной торификацией):
$IPTABLES -t filter -A OUTPUT -d 127.0.0.1 -p tcp -m owner \
--uid-owner anonym_2 --dport 9052 -j ACCEPT
#Прозрачная торификация закоментирована
# $IPTABLES -t nat -A OUTPUT -p tcp -m owner --uid-owner anonym_2 \
# -m tcp -j REDIRECT --to-ports 9042
#$IPTABLES -t filter -A OUTPUT -d 127.0.0.1 -p tcp -m owner --uid-owner anonym_2 \
# -m tcp --dport 9042 -j ACCEPT
#$IPTABLES -t nat -A OUTPUT -p udp -m owner --uid-owner anonym_2 \
# -m udp --dport 53 -j REDIRECT --to-ports 55
#$IPTABLES -t filter -A OUTPUT -d 127.0.0.1 -p udp -m owner --uid-owner anonym_2 \
# -m udp --dport 55 -j ACCEPT
$IPTABLES -A OUTPUT -m owner --uid-owner anonym_2 -j REJECT
Разрешим выход наружу самому системному тору:
TOR_UID="debian-tor"
$IPTABLES -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT
Использование tor-arm
Использование пакета Vidalia с системным Tor нецелесообразно из-за полного сворачивания её поддержки. Рекомендуется завести отдельно пользователя, включить его в группу tor-arm и запускать из под него утилиту tor-arm.
Следует избегать запуска tor-arm из под пользователя debian-tor, несмотря на то, что такая рекомендация имеется в пакете и долгое время оставалась неисправленной.
Настройка торбраузера
Начиная с четвёртой версии браузер позволяет автоапдейт. Но в ранних версиях четвёртой ветки стабильность и безопасность этого механизма не гарантировалась. Даже после его стабилизации безопаснее скачивать браузер вручную и проверять контрольные суммы, заверенные подписями GnuPG. Список рекомендуемых версий доступен по ссылке. Скачивание возможно с адреса
Скачанные файлы с подписями и суммами можно разместить в отдельном каталоге и проверить скриптом:
#! /bin/sh
echo > tbbchecklog.txt
sha256sum -c sha256sums-unsigned-build.txt 2>&1 | grep OK >> tbbchecklog.txt
echo >> tbbchecklog.txt
for a in sha256*.asc ; do
gpg --verify $a sha256sums-unsigned-build.txt >> tbbchecklog.txt 2>&1 ;
echo >> tbbchecklog.txt
done
echo >> tbbchecklog.txt
gpg --verify tor-browser-linux64*.asc >> tbbchecklog.txt 2>&1
echo >> tbbchecklog.txt
Перед ручным обновлением рекомендуется экспортировать старые закладки в файл, удалить старый распакованный каталог TBB. Впоследствии возможно импортировать закладки из файла обратно в новый распакованный браузер (вкладки: Bookmarks — Show all Bookmarks — Import and Backup).
Существует вероятность уязвимости в браузере, приводящая к утечке закладок. Поэтому следует рассмотреть целесообразность хранения определённых закладок торбраузера для конкретного анонимного профиля.
В распакованном каталоге TBB удалите расширение запуска Tor из связки:
Запустите TBB:
Зайдите в настройки: Edit → Preferences → Advanced → Network → Settings
И выберите опции:
Для другого пользователя следует выбирать другой порт, в соответствии с настройками файрволла. Следует также обращать внимание на возможность сброса этих настроек при перезапуске.
В адресной строке браузера нужно набрать about:config, для внесения некоторых опций, перечисленных в скрипте запуска start-tor-browser:
# extensions.torbutton.custom.socks_host 127.0.0.1
# extensions.torbutton.custom.socks_port <SocksPort>
# extensions.torbutton.inserted_button true
# extensions.torbutton.launch_warning false
# extensions.torbutton.loglevel 2
# extensions.torbutton.logmethod 0
# extensions.torbutton.settings_method custom
# extensions.torbutton.socks_port <SocksPort>
# extensions.torbutton.use_privoxy false
# app.update.auto false
В торбраузере, начиная с версии 4.5, организована корректная работа с SOCKS-портом, при этом для разных доменов выбираются разные исходящие узлы и существует возможность менять исходящий узел для каждой вкладки при помощи опции New Tor Circuit for this Site в Torbutton. При этом из-за удаления плагина tor-launcher, предназначенного для запуска локального (несистемного) Tor, часть опций tor-button будет недоступна. В связи с этим рекомендуется настраиваеть торбраузер на работу с системным тором именно через SOCKS-порт, а не через прозрачную торификацию. Прозрачная торификация может быть использована для этого же пользователя для работы с другими программами, но ей лучше не пользоваться при повышенных требования анонимности из-за опасениях утечки профилирующих и идентифицирующих данных, а также по другим возможным причинам.
После сохранения изменений следует перезапустить TBB. В разных вкладках на разных доменах TBB должен показывать разные IP-адреса, а при проверке через одинаковые домены — соответственно одинаковые в пределах жизни цепочки. Проверку наличия обновлений можно периодически осуществлять и вручную, например по основной ссылке рекомендуемых версий и скачивания новой версии.
Можно запустить два и более TBB из под разных пользователей одновременно. При одновременной проверке они должны показывать разный IP-адрес исходящих узлов при проверке на одном и том же домене.
При работе из-под одного пользователя для смены профиля рекомендуется перезапустить браузер и сменить все цепочки программной tor-arm или отправкой сигнала системному тор-процессу.
комментариев: 9796 документов: 488 редакций: 5664
Я подозревал, что будет нечто такое, но не знал, что заболевание зашло до такой стадии. :(
- Перечитываем конфиг Tor'а, если он уже запущен:
- Затираем Tor-логи в /var. В предположении, что /var зацеплен на отдельный LUKS-том это делается (в идеале) так:
- Грузимся из-под другой системы, где есть установленный rdiff-backup. Монтируем /var нужной нам ОС в, допустим, /mnt/var.
- Удаляем ненужные файлы в /mnt/var и обнуляем те, которые хотим оставить на диске, через cat > filename.
- Делаем полную копию /var на другой раздел/директорию через
- Убиваем слот на LUKS-томе, куда монтировался /mnt/var:
- Снова создаём LUKS-раздел (команды понятны) и монтируем его в /mnt/var.
- Восстанавливаем сохранённое дерево /var-файлов из бэкапа:
Директория в /tmp/tor создана по образу и подобию директории /var/log/tor, но это, в принципе, излишне: если не нужно, чтобы cron периодически архивировал логи, то доступ группе adm, наверно, не нужен вообще. Пункт 4 в плане затирания /var универсален и может использоваться для очистки и других логов в нём. Возможно, есть подводные камни в том, как rdiff-backup обходится с симлинками и специальными файлами, но, в принципе, он в этом отношении достаточно аккуратен и продуман (сам пока его на системных директориях, где это важно, не тестировал).В случае кощеевой смерти вторую ОС можно легко сделать клонированием существующей: достаточно создать новый логический LVM-том того же размера, что и основной системный; через dd записать туда побайтовую копию; а при загрузке в меню grub'а указать root=/dev/VolumeGroupName/NEW_ROOT_NAME (проверено, работает) — этого достаточно. Однако, если потом из-под клона попытаться получить доступ к основной ОС, начнутся конфликты с uuid'ами и именами LVM-томов (разруливаемые теоретически, но довольно сложно практически), поэтому лучше использовать какую-то независимую инсталляцию (её можно сделать в аналогичный логический LVM-том, как и клон), а LVM-том с бэкапом ОС использовать только как бэкап на самый пожарный случай. В принципе, бэкап можно делать и не побайтово, а через тот же rdiff-backup, но из-под живой системы клонировать корневую файловую систему считается плохим тоном, поэтому всё равно нужна какая-то служебная независимая ОС-инсталляция для таких целей.
Но даже при high-уровне about:config показывает, что JS включен. Лучше отключить по-старинке руками.
Для любителей видалии:
На тему certificate pinning:
Другое интересное:
P.S. Вроде всё не так плохо, но задизейбленный знак луковицы меня смущает. Можно попробовать ту инструкцию, если она ещё актуальна, или запустить TBB штатным образом, дав ему выйти в сеть, а потом поменять настройки сети на правильные. Есть идея, что «Tor network settings» не открывается, потому что порты 9150/9151 закрыты файерволлом.
комментариев: 9796 документов: 488 редакций: 5664
Для поокошечной изоляции цепочек придётся как-то открывать порты на системный тор и давать торбраузеру рулить системным тором (через пароль, куки или сокеты), чего делать не хотелось бы. Может поэтому и луковица перечёркнутая — теперь связь с процессом тора считается обязательным условием работы? Можно конечно более одного окошка в браузере не открывать, или открывать всё только на одну тему, но это будет создавать профилирование в ряде случаев.
комментариев: 9796 документов: 488 редакций: 5664
Зачем? Как я понимаю, для каждого окна TorBrowser формирует свою строку аутентификационных данных и передаёт её SOCKS-серверу. Локальный SOCKS-сервер или системный — уже не важно.
Вот непонятно, да.
Открыл, но это ничего не поменяло. В Tor-ланчере, который запускается по умолчанию, есть только опции настройки бриджей и локального прокси (через который должен ходить локальный Tor). Поменять настройки портов Tor'а там по-прежнему нельзя. В общем, без удаления Tor-ланчера никак.
Вместо того, чтобы лезть в официальные Network Settings, можно открыть about:config и вручную поменять опцию extensions.torbutton.socks_port, дав ей нужный порт системного Tor'а. Однако, TorBorowser после этого продолжает упорно ломиться на дефолтный Tor — он же тот, который прописан в network.proxy.socks_port. Тогда мы меняем и эту опцию на нужный порт тоже. После этого
и волки сытылуковица остаётся зелёной, и сеть работает. Впрочем, это логично. Сейчас проверил, как было в старых TBB: там, если в настройках torbutton'а меняешь порт Tor'а на кастомный, то и в стандартном месте в сетевых настройках TorBrowser'а тоже будет отображаться новый кастомный порт.Конечно, любители работать через системный Tor никакого непосредственного контроля над цепочками не получат. У меня такое впечатление, что работоспособность опции «Tor network settings» целиком завязана на Tor-ланчер, который мы вынужденны удалять, чтобы запустить TorBrowser, поэтому при клике на неё ничего и не происходит.
Вот тут вообще чудеса. Идём на гугл — он показывает google.ru (видимо, эксит из РФ попался). Идём в консоль, растертим цепочки, снова открываем вкладку с гуглом — опять получаем google.ru. И я такой финт раз 5 повторил. Как ему удаётся? Наверно, он держит соединение с сайтом, поэтому при рестарте цепочек реально оно не сбрасывается, так что теперь если гуглокапча блочит поиск*, без рестарта браузера и закрытия всех вкладок никак его не вылечить — рестарт цепочек в консоли не поможет.
У этой опции есть и другой негатив. Допустим, хотим сменить цепочку для одного и того же сайта. Для этого есть «New Tor Circuit for this Site».
При клике на неё страница перезагружается, но что происходит на самом деле — неясно.Таки смена происходит, как и должно. Это можно потестить на странице https://check.torproject.org. Однако, с гуглом этот фокус не прокатывает, потому что при открытии google.com реально он открывает какое-нибудьВпрочем, всё ещё тоньше. Такая штука возникает, если открывать google.com, а если какой-то национальный домен, то мусор к урлу не приписывается, так что для него смена цепочек, может быть, и будет работать правильно.
Спасибо, а то мы не знали. Поинтересуйтесь, кто и когда тут впервые написал про Whonix, потом поинтересуйтесь его обсуждением на этом сайте и не открывайте нам больше Америк. Whonix, как и Tails — больше для домохозяек. Кому нужно, он и сам соберёт подобное под себя и свои нужды.
* До бесконечности выдаёт разные капчи, сколько их ни приходи.
комментариев: 9796 документов: 488 редакций: 5664
В текущей доке у меня всё настроено вообще не через Socks (с ним исторически были проблемы), а через TransPort (порт прозрачной торификации). М.б. для этой фичи жизнеспособен какой-то вариант из трёх:
заодно и правила настроите, а то мне одному скучно выпячивать, будем выпячивать вдвоём.комментариев: 9796 документов: 488 редакций: 5664
Повспоминайте. Может быть, те проблемы уже неактуальны. В конце концов, можно совмещать. Например, каких-то юзеров пускать через прозрачку, а каких-то через SOCKS. Одно другому, насколько я знаю, не противоречит. Главное — надёжно всё прикрыть файерволлом.
и волки сытылуковица остаётся зелёной, и сеть работает.... до первого рестарта TorBrowser'а. ☺ После рестарта луковица опять становится перечёркнутой. Идём в настройки и видим, что extensions.torbutton.socks_port вернул дефолтный порт. Меняем его на правильный. Теперь он такой же, как и у network.proxy.socks_port, но луковица не зеленеет. Однако, «New Tor Circuit for this Site», судя по https://check.torproject.org, продолжает работать. Часть проблем, наверно, можно решить, если отказаться от смены дефолтного порта.
Фиксится просто: меняем extensions.torbutton.socks_port на какой-то порт X, потом network.proxy.socks_port на X — луковица зеленеет. Затем повторяем процедуру для правильно порта Y (порядок смены опций, полагаю, важен). Конечно, делать так после каждого рестарта браузера подзадолбает, так что лучше поставить системным портом тот, который в TBB.
комментариев: 9796 документов: 488 редакций: 5664
В рассылке и баг-репортах было, что в Socks что-то отваливалось по таймауту при каких-то условиях, а у пользователей TransPort всё работало. Вроде это пофиксили, но это дополнительно отбило желание переходить на Socks. При принудительном заворачивании также избегается проблема DNS-утечек.
Хотелось бы и для одного псевдопользователя: чтобы что-то шло явно на Socks, а остальное прозрачно торифицировалось.
Если параллельных псевдопользователей много то для них в системном торе открыты разные порты. Никакого единственно правильного порта не предусмотрено.
Зачем вам нужен локальный DNS? Я себе просто зарубил весь UDP-трафик в зародыше и сплю спокойно.
Можно, но фаерволлом такие ситуации уже корректно не разрулить/не прикрыть, он же только по --uid-owner фильтрует (что вы лучше меня знаете).
Если мы запускаем браузер только от одного пользователя, то ему можно такой порт выделить. Остальным юзерам, от которых запускаются другие вещи, можно назначить иные порты.
Если б были гостевые ОС на разных IP, но одном и том же порту, то разделение по цепочкам тоже было бы. Правда, не знаю, можно ли в гостевых ОС указать 127.0.0.1:9150, а потом файерволлом перенаправить весь трафик оттуда на определённый IP:порт хостовой ОС, будет ли это правильно понятно Tor'ом...
Да, думаю, можно. В PF rdr-правила именно такие штуки и делают (проброс портов и т.п. вещи). TorBrowser будет всё слать на 127.0.0.1:9150, а Tor будет получать трафик с виртуальной локалки, но не знаю, правда, с каким src IP. Дело в том, что rdr переписывает dst IP, но не трогает src IP, а раз так, то трафик на Tor будет приходить как бы с локалхоста. Файерволл такое может не переварить. Ну, и в Linux это всё делается ещё сложней (но делается). Можно, конечно, по-тупому сделать SSH port forwarding, но это будет всесторонне неправильный overkill для такой задачи.