Считаю, что задача, которую автор поставил перед собой, а именно - собрать и структурировать информацию по поднятию и настройке программного обеспечения анонимной сети TOR, выполнена в полной степени. Часть статьи, посвященная анонимизации работы с различными клиентскими приложениями, переквалифицирует материал из «мануала по настройке TOR на FreeBSD» в «записки параноика». Автор попытался «объять необъятное», но в контексте использования анонимной сети TOR.
Думаю, статья окажется полезной как для новичков (в силу доступности изложения), начинающих беспокоиться о конфиденциальности своей работы, так и для опытных пользователей, которые обязательно найдут здесь для себя новые техники обеспечения анонимного серфинга и другую полезную, на мой взгляд, информацию.
c0n Difesa

Впервые, когда я столкнулся с анонимной сетью TOR (2007 год), то потратил не один день, чтобы настроить ее и добиться максимально возможной анонимности в Интернет. Существует огромное количество статей, обзоров, инструкций по настройке Tor'a, но все они разбросаны в разных уголках сети. Хранить все эти чужие обрывки мыслей в конце концов надоело и было принято решение написать статью, основанную на личном опыте использования анонимной сети и анализа ошибок, которые возникали в ходе экспериментов.
Я не претендую на новизну предоставленной информации, а всего лишь хочу собрать ее как можно больше и в одном месте. Окончательной версии этого материала не существует, и он, по мере возможности, будет дополняется различными советами и рекомендациями. Вся информация, изложенная ниже, была проверена на ОС FreeBSD 8.0, но так же может быть использована на любой другой ОС с незначительными изменениями. Все настройки, приведенные ниже, - это результат, который, в какой-то мере, меня устраивает. Поэтому если кому-то захочется использовать вместо Privoxy какой-то другой web-фильтр, фаервол, браузер etc — это только приветствуется, так как каждый человек те или иные задачи решает по-разному.
Установка и настройка
Для работы в анонимной сети нам понадобится непосредственно сам
Tor и
Privoxy - web-прокси с расширенными возможностями фильтрования запросов, обеспечивающий конфиденциальность, модифицирующий содержимое web-страниц, осуществляющий управление закладками cookie, контролирующий доступ к web-контенту через прокси и удаляющий рекламу, баннеры, всплывающие окна, etc.
Заходим как
root и выполняем команды:
#cd /ust/ports/security/tor
#make install clean
#cd ../../www/privoxy
#make install clean
#tor —version
…
Tor version 0.2.1.24
…
После завершения установки (в принципе проблем с ней возникнуть не должно), переходим к настройке.
Вообще по умолчанию конфиг Tor'a пригоден для работы, если конечно пользователь не находится за http(s)-прокси или не ограничен фаерволом. Для конкретного случая, естественно, придётся повозиться. Я добавил всего лишь один параметр, который принудительно заставляет tor работать в качестве клиента, так как в случае, когда он обнаруживает что стоит на машине с широким каналом, то оптимизирует своё поведение к организации middleman-сервера, поэтому Tor будет работать как клиент с чуть превышенными запросами. Как я понял, это уменьшает количество обращений к корневым серверам и экономит трафик.
Редактируем конфигурационный файл tor'a:
#cd /usr/local/etc/tor/
#mv torrc.sample torrc
#chmod +w torrc
#echo «ClientOnly 1»>>torrc
Так же есть возможность настройки выхода в сеть через http(s)-прокси, выстраивать цепочки входа/выхода в сеть через посредников (proxy, socks, vpn, другие анонимные сети), регулировать временной период для синхронизации с корневыми серверами, настраивать политики ограничения, скрытые сервисы, Tor-сервер и многое другое.
Для любителей GUI существуют графические оболочки
Tork и
Vidalia. Последняя устанавливается по умолчанию и находится в
/usr/local/bin/vidalia. Клиент Tor'а работает с правами пользователя _tor и чтобы запустить графический интерфейс для него с правами другого пользователя, необходимо отредактировать
/usr/local/etc/tor/torrc. Раскомментируйте строчки:
ControlPort 9051– на этом порту Tor будет принимать подключения для управления Tor-сервером, то еесть можно подключиться удаленно для конфигурации Tor'а. В первую очередь опция важна для тех, кто использует графические оболочки;
HashedControlPassword - хеш пароля для доступа и конфигурации Tor-сервера.
Для генерации хэш значения необходимо выполнить команду:
#tor —hash-password My_P4s5w0rD
Далее этот хэш надо вставить напротив последней раскомментированной строки, сохранить изменения и выполнить команду kill -HUP pid процесса (перечитать конфигурационный файл) либо перезагрузить систему. Если честно, я не вижу смысла в графической оболочке для Tor'a, так как тонко сконфигурировать его через неё всё равно не получится.
Теперь переходим к конфигурации web-фильтра:
#privoxy —version
Privoxy version 3.0.16
#cd /usr/local/etc/privoxy/
#chmod +w config
#vi config
Вообще этот дефолтовый конфиг с незначительными изменениями так же подходит, но всё же на некоторых моментах я заострю внимание.
Forward-socks4a / 127.0.0.1:9050 . - обязательный параметр, который необходимо прописать.
Эта строка определяет, что перенаправление необходимо применять ко всем адресам (об этом говорит символ '/'), при этом используя в качестве socks-прокси tor(127.0.0.1:9050). Версия 4а выбрана не случайно, так как версия именно этого протокола позволяет резолвить DNS имена через прокси. Точка в конце означает что запросы не будут перенаправляться к другому http-прокси. Необходимо проследить, что бы в конфиге privoxy строки, отвечающие за перенаправление (forward) были все закомментированы, кроме вышеописанной.
Listen-address 127.0.0.1:8118 (по умолчанию) — принимать клиентские запросы «адрес:порт».
Хочу лишь отметить, если опустить ip-адрес, то privoxy будет «слушать» на всех интерфейсах, что существенно снижает общую безопасность ОС.
Toggle 1 (по умолчанию) - если отключить (установить в ноль; смотрите enable-remote-toggle), то Privoxy будет работать как нейтральный прокси сервер, то есть блокировка рекламы, фильтрация web-страниц, etc работать не будут. При внесении каких-либо изменений в фильтры полезно последующие тестирование и сравнение результатов «до» и «после».
Enable-remote-toggle 0 (по умолчанию) — позволяет включать/отключать privoxy через web-браузер. В последних версиях эта возможность отключена. Я считаю ее лишней.
Enable-edit-actions 0 (по умолчанию) — позволяет редактировать файлы действий (о них позже) через web-браузер. Не знаю кому как, а мне удобней в vi редактировать с последующим перечитыванием конфигурационного файла (
kill -HUP pid процесса). Как и предыдущий параметр, он отключён по умолчанию.
Выше я привёл наиболее важные, на мой взгляд, опции. Конечно, не исключено, что кому-то понадобится настроить списки ACL, списки доверенных хостов, размер буфера для фильтрации содержимого, и т.п.
Теперь переходим к action-файлам. Они указывают privoxy как фильтровать поступающий web-контент: блокировать, отфильтровать, изменить. Нас, прежде всего, будут интересовать действия hide-*, с помощью которых можно подделать http-заголовок. Он передаёт на сервер информацию, которая снижает общую анонимность, что крайне нежелательно.
#vi /usr/local/etc/privoxy/match-all.action
hide-referrer{forge} — скрывает информацию о том, по какой ссылке пользователь перешёл на сайт. В качестве значения, указанного в фигурных скобках, можно написать любое, будь то
{http://www.google.com/} или
{my-security-referer}. Так же можно вообще вырезать этот заголовок (параметр {block}), но, на мой взгляд, это снижает анонимность, так как идентифицировать такого пользователя в пределах хотя бы одного сайта не так уж сложно. Значение forge представляет все таким образом, будто пользователь перешёл с главной страницы сервера, которому направлялся запрос. Разработчики рекомендуют последний параметр. Это связано с web-сервером, который может на некорректный referer «отдать» не полный контент (изображения, баннеры). На мой взягляд, это не так страшно, и даже в некоторых ситуациях повышает степень анонимности. Например, можно сёрфить по сайту и перейти на такую страницу, на которую с главной страницы сайта перейти невозможно, сразу станет ясно что пользователь подделал http-заголовок. Хотя если поставить какой-нибудь поисковик, то, например, с главной страницы гугла перейти на сайт www.exampl.com так же не реально, поэтому я решил «прислушаться» к мнению разработчиков.
hide-user-agent{Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1
} - заменяет значение заголовка User-Agent на заданное. В принципе можно написать все, что душе угодно, но опять же, лучше маскироваться под общий поток пользователей, которые в основном используют ОС Windows XP, SP2(3), Vista, Seven и браузер IE6(7,8), Opera, Firefox. Данное значение выбрано не случайно, почему это так, объясняется ниже в разделе «Тонкая настройка браузера».
hide-accept-language{ru-RU,ru;q=0.9,en;q=0.8} — заменяет значение заголовка HTTP-ACCEPT на заданное. В этом заголовке три поля: LANGUAGE, ENCODING, CHARSET. Этот параметр относится к первому. Последнее можно подделать средствами браузера (об этом позже).
hide-from-header{block} — блокирует передачу электронного почтового адреса web-серверу. Вместо block можно написать любое значение, но этого делать не стоит по понятным причинам.
change-x-forwarded-for{block} - удаляет любые существующие заголовки HTTP, вида "X-Forwarded-for:" из клиентских запросов и не позволяет добавлять новые. В ранних версиях программы он назывался hide-forwarded-for-headers и в качестве своего значения ничего не принимал.
Вообще Privoxy - очень функциональное приложение. Есть возможность создавать свои фильтры, применить их ко всем или определённым сайтам, контролировать поведение cookie, всплывающих окон, баннеров, создавать доверенные зоны и многое другое.
Важно отметить, не смотря на то, что эта программа работает с протоколом https, она не может фильтровать его пакеты, так как трафик уже поступает в зашифрованном виде. Это несет в себе угрозу снижения степени анонимности и сводит на нет все предыдущие усилия, поэтому необходимо быть аккуратными при посещении сайтов, обеспечивающих защищенное соединение.
Можно, конечно, воспользоваться другими web-фильтрами, которые умеют обрабатывать зашифрованный web-контент или воспользоваться встроенными средствами браузера (минусы этого способа в разделе «Тонкая настройка браузера»). В качестве альтернативы Privoxy можно воспользоваться Proxomitron'ом. Большой минус последней, заключается в том, что его разработка завершилась в 2003 году. Можно обойтись вообще без web-фильтра, если использовать для сёрфинга браузер Mozilla Firefox с его многочисленными плагинами, многие из которых, кстати, написаны специально для анонимного серфинга Интенет через Tor. Один из таких плагинов называется Torbutton и позволяет делать то, чего не умеет Privoxy. Также можно воспользоваться уже настроенным пакетом типа TorBrowser, в который входят Firefox с набором плагинов и polipo. Он не требует настройки и после распаковки можно сразу приступать к работе. Возможно, читатель проявит инициативу и сам соберет нужный ему софт. Я лишь привёл примеры альтернативных решений, которыми можно воспользоваться.
Ещё одна неприятная ситуация, на которую стоит обратить внимание, заключается в резолве DNS имён. TOR работает на транспортном уровне с TCP, а DNS в большенстве случаев работает с UDP, поэтому может случиться так, что трафик идёт через tor, а запросы DNS в обход. Это сильный удар по анонимности, которого стоит избегать. Не случайно разработчики выбрали протокол socks4a, который умеет транслировать запросы DNS через себя. Хотя socks5 тоже умеет это делать, он устроен таким образом, что трансляция этих запросов не обязательна, а в версии 4a она происходит принудительно. Не надо путать протоколы socks4 и socks4a: первый вообще не умеет транслировать запросы DNS, поэтому его в связке с tor использовать не рекомендуется.
Решений проблем с DNS несколько. Можно воспользоваться собственным DNS-сервером или же обращаться к ресурсам Интернет по их сетевому адресу. Последний вариант не удобен для повседневной деятельности пользователя, а первый сводится к установке и настройке собственного демона, что так же требует определённых знаний. Существует ещё один способ который не требует особых усилий. Он заключается в редактировании файла /etc/resolv.conf в котором обычно хранятся записи о серверах имён провайдера. Необходимо закомментировать все строки, которые там присутствуют, и добавить фиктивный DNS-сервер. В качестве такого сервера может выступать 127.0.0.1 (localhost) и резолв происходит где-то в сети Tor (на exit-nodе) без участия провайдера и утечек информации. На первый взгляд этот способ выглядит вполне работоспособным но (!) существует опасность «нарваться» на DNS-spoofing, поэтому необходимо быть предельно внимательным. В таких ситуациях я бы порекомендовал все ресурсы, которые имеют для пользователя определённую ценность внести в файл /etc/hosts. Это защитит от атак подобного рода, т.к. по умолчанию ОС обращается при резолве имени сначала в файл hosts, а уже потом к DNS-серверам. Возникает сразу вопрос: а как же безопасно преобразовать имя понятное человеку в ip-адрес? Очень просто. В состав tor'a входит утилита под названием tor-resolve которая в качестве параметра принимает имя ресурса, а возвращает сетевой адрес.
Итак, от одной беды защитились (хотя способ не претендует на изящность), а другая подкралась незаметно. Дело в том, что трафик, идущий от пользователя до самого последнего сервера (exit-node) в сети Tor идёт зашифрованный. На exit-node он расшифровывается и идёт уже непосредственно к серверу, к которому обращается пользователь. И тут пользователь может подвергнуться MitM-атаке. Это атака - бич анонимной сети tor и защититься от неё очень и очень сложно. Приходиться либо надеяться на порядочность владельца exit-node’a, либо использовать протокол ssl или другие протоколы, защищающие от подобных атак. При этом всё равно остаётся возможность анализа трафика, но уже с большими сложностями. Точнее перехватить трафик всё так же легко, а вот модифицировать или подменить информацию уже сложнее. Одна из таких атак осуществляется с помощью утилиты sslstrip. Суть этой атаки заключается в том, она позволяет перехватить SSL-соединений, основанную на том факте, что, как правило, перед началом взаимодействия по https и установкой SSL-соединения пользователи посещают некоторую обычную веб-страницу с помощью незащищенного http-соединения, где и нажимают заветную кнопку авторизации после заполнения необходимых полей. Защиты как таковой нет, т.к многие сайты практикуют редирект http=>https=>http, а если сервер поддерживает полностью защищенную версию сайта, то нужно заходить исключительно по https (с полным набором адреса https://адрес) и, конечно же, быть предельно внимательными и следить за сообщениями браузера при работе по защищенному протоколу. Есть возможность вычислить exit-node'ы, которые используют sslstrip с помощью утилиты torscanner которая входит в пакет tortunnel. В качестве параметра она принимает URL-адрес и соединяется со всеми выходящими узлами сети. Таким образом можно проследить, на каких узлах был переход с https на http. Далее внести эти узлы в качестве значения параметра ExcludeNodes и tor вовсе исключит их при построении цепочек нодов. Идея хорошая, но недостаток очевиден: атакующий может появиться внезапно, перехватить трафик и исчезнуть.
У внимательного читателя возникнет вопрос: а что делать с программами, которые работают по TCP, но опционально не поддерживают прокси? Опять же, решений этой проблемы несколько. Можно воспользоваться утилитой torify, которая поставляется вместе с пакетом tor. Работать с ней просто:
#cd /usr/local/etc/tor
#mv tor- tsocks.conf.sample tor-tsocks.conf
#torify <программа>[аргументы]
В качестве аналога torify хочу предложить читателям
proxychains. По умолчанию она уже настроена для работы с tor и не требует редактирования конфигурационного файла. Так же в последних версиях появилась проксификация DNS-запросов. Есть возможность выстраивать цепочки проски до входа в анонимную сеть. Пользоваться ею так же просто, как и вышеописанной утилитой. Процесс установки описывать не буду, в силу его простоты.
Примечание: в отличие от proxychains, torify не умеет резолвить адреса, поэтому её необходимо использовать в связке с tor-resolve.
Чтобы tor и Privoxy запускались во время загрузки ОС как демоны, необходимо отредактировать
/etc/rc.conf:
#vi /etc/rc.conf
tor_enable=YES
privoxy_enable=YES
Ещё необходимо проверить, что бы на rc-скриптах этих программ стоял бит выполнения:
#cd /usr/local/etc/rc.d/
#ls -la tor privoxy
Иначе выполняем
chmod u+x tor privoxy.
Теперь необходимо перезагрузиться и посмотреть, что всё нормально запускается и работает без ошибок. Далее надо убедиться, что не запущено ничего лишнего, выполнив команду
sockstat -46.
Настройка файрволла
В современной сети Интернет без средств защиты компьютера «обитать» стало опасно. Поэтому фаерволл уже стал постоянным атрибутом защиты компьютера, но его настройка в нашем случае явилась ещё и дополнительной надстройкой для Tor'а. Необходимо перестраховаться от нежелательных DNS-запросов в обход анонимной сети или программ, которые не настроены на работу с ней.
Итак, в качестве брандмауэра я выбрал
ipfw. Считаю,что фаервол должен быть ядерный, это даёт дополнительную ступеньку защиты ОС, поэтому я пересобрал ядро с включёнными опциями ipfw. Для тестов или временных манипуляций с анонимностью вполне подойдёт и модуль, который можно загрузить с помощью
kldload.
При работе клиента, необходимо получать информацию, которая даёт возможность для построения цепочек. По умолчанию сервера tor работают на портах 9001 и 9030, но разработчики рекомендуют использовать порты 80 и 443 (если не заняты) настраивать сервер на них. Это связано с политиками безопасности корпоративных сетей, в которых разрешён лишь необходимый трафик и необходимо для того, чтобы пользователи, которые ограничены ими, могли так же пользоваться средствами анонимности. Из этого следует вывод, что необходимо разрешить исходящий/входящий трафик на эти порты:
ipfw add allow tcp from ip-адрес to any 80,443,8080,9001,9030 via сетевой интерфес
add allow tcp from any 80,443,8080,9001,9030 to ip-адрес via сетевой интерфейс
В принципе этого достаточно, что бы клиент заработал, но(!) необходимо следить, чтобы приложения, работающие с этими портами(80,443), были настроены на работу с Tor. Дополнительная преграда уже выставлена ранее (фиктивный DNS сервер плюс запрет на исходящие/входящие на DNS), поэтому опасаться не надо, если вдруг пользователь ненастроенным браузером попытаться зайти на сайт.
Правила, разрешающие обращаться с 127.0.0.1 Tor и Privoxy не нужны, т.к по умолчанию будет выполняться /etc/rc.firewall в котором будут реализованы следующие правила:
ipfw add 100 pass all from any to any via lo0
ipfw add 200 deny all from any to 127.0.0.0/8
ipfw add 300 deny ip from 127.0.0.0/8 to any
Их назначение — пропускать весь локальный трафик на кольцевом интерфейсе и предотвращать попытки обращения к внутренним адресам машины из внешнего мира. Если этих правил не будет, перестанет работать множество внутренних сервисов — RPC, X11,etc.