Deploy TOR Exit Relay, TOR monitor and TOR SOCKS proxy.
A.Вступление.
Важными состовляющими сети TOR являются Relay(ретранстляторы), Bringe(мосты) и Exit Node(выходные точки). Так же можно ещё упомянуть об TOR Socks Proxy, Obfsproxy(прокси с поддержкой обфускации траффика) и Hidden Service(скрытые сервисы TOR, доступные только внутри самой сети), но о них чуть позже. Рассмотрим всё по порядку, т.е. что это всё из себя представляет, поехали ))
1) Relay - это публичные ретрансляторы в сети TOR. Получить список ретрансляторов можно здесь → Globe, Atlas. Главная задача ретрансляторов состоит в том, что бы перегонять через себя транзитный трафик, т.е. ретранслятор является посредником в цепочке нодов, но точно так же есть возможность настроить ретранслятор на работу в режиме выходной точки и одновременно TOR Socks Proxy .
2) Bridge - мост, является точкой входа в саму сеть TOR. Может являться публичным мостом или не публичным. В случае с развёртыванием не публичного моста(не публичные мосты стоит развёртывать, если вы хотите предоставлять сход в сеть TOR пользователям стран с сильной цензурой), он не будет доступен по ссылкам приведённым в описании Relay и что бы пользователь мог получить мосты для подключения к сети нужно настроить TOR клиент для работы через мост, либо (если в вашей стране закрыт доступ к мостам TOR) написать письмо в Tor Project с просьбой прислать вам несколько IP адресов с мостами (в основном вам пришлют 3 рандомных адреса). Так же bridge может работать в решиме проски сервера с поддержкой обфускации трафика, Obfsproxy(используется для того, что бы обойти DPI. Так же имеется возможность прикрутить авторизацию, для использования нашего моста.
3) Exit Node - собственно завершающее звено в сети. Точка из которой выходят запросы клиентов к внешним ресурсам. По сути дела мало чего можно рассказать про то, чем является Exit Node. Но стоит сказать то, что выходной нодой может являтся как relay, так и bridge(не рекомендуется делать мост одновременно и точкой выхода, особенно есть ваш мост не публичный !!).
4) TOR Socks Proxy - так же, для тех, кто не желает скачивать полноценный TOR клиент, есть возможность настроить на работу с сетью TOR, через Socks Proxy. Для этого вам, как клиенту, необходимо в настройках браузера указать подключение через Socks и прописать туда адрес вашего прокси и порт(в основном это порт 9050).
5) Hidden Service - одна из самых интересных «фишек». Это возможность создавать свои скрытые сервисы(например: Web, FTP, IRC и т.п. сервисы). Данные сервисы доступны только из сети TOR и их доменные имена заканчиваются на .onion (пример имени: http://wikitjerrta4qgz4.onion/ )
Более подробно Hidden Service описана в документации на оф. сайте Тыц и мануал по настройке Тыц2
Небольшие примечания: Если вы собрались стать участником TOR, то вам необходимо знать несколько формальностей.
a) Не все провайдеры и сервисы, которые дают вам возможность арендовать виртуальный сервер, равнодушно дышат в сторону данной сети. Так что перед тем как на радостях бежать покупать VPS или арендовать юнит в стойке ЦОДа. Убедитесь в том, что ваш провайдер одобрит то, что вы держите у себя ретранслятор или выходную ноду. Список провайдеров и их отношений к TOR: List Но, если вы используете домашнего провайдера, то им, по большей части(если это конечно крупный провайдер), по барабану на то, что вы у себя дома храните.
b) Крайне не рекомендуется держать Exit Node у себя дома. Но если вы Джедай/Ситх/Чак/Плюшевая Борода/волшебный единорог/пиченюха (нужное подчеркнуть), то знайте, что в случае sql/xss/exploit/bruteforce/dos атак именно ваш IP будет в логах жертв атакующих. Так же были прицеденты к владельцу Exit Node, которая размещалась в ЦОДе Пруф. Хотя если учесть то, как в нашей стране реагируют на подобные случаи то… всё не так уж плохо.
c) Чтобы избежать проблем с синхронизацией вашего ретранслятора с остальными участниками TOR, вам необходимо убедиться в том, что NTP на вашем сервере корректно настроен на ваш часовой пояс !
d) В целях повышенной безопасности, имеется возможность запустить TOR в SandBox если указать в конциге опцию Sandbox 1. Но это не рекомендуется делать, из-за того, что пока это только экспериментальная возможность, поэтому если вы хотите стабильно работающий relay/bridge, то лучше вам этого не делать. Так же имеется возможность запустить tor в chroot, но в данной статье не буду заострять на это внимание, так как не тестировал данный метод запуска tor. Возможно позже дополню эту статью данной заметкой.
e) У ретранслатора TOR есть свой жизненный цикл Так что у вас не получится работать как полноценный «узел», сразу после запуска. Сначала стоит выдержать проверку временем и трафиком
f) Безопасное использование TOR - security
g) Ну и конечно же есть во многих негативных моментах свой пряник . И конечно же это футболки.
B. Deploy
В качестве дистрибутива я выбрал уже привычный для себя Debian 7 x64 (netinstall). И собираюсь описать то, как поднять ретранслятор с выходной нодой и socks proxy. А теперь вперёд в бой ))
1) Добавляем строчку deb http://deb.torproject.org/torproject.org wheezy main в /etc/apt/source.list
P.S. Данный репозиторий должен находится первым в списке зеркал, иначе мы скачаем пакет tor из совершенного другого репозитория(который находится выше репы torproject при условии, что пакет tor, будет там находится), что не рекомендуется разработчиками TOR.
2) Теперь добавим ключ данного репозитория:
gpg –keyserver keys.gnupg.net –recv 886DDD89 && gpg –export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
И после этого вводим apt-get update && apt-get install tor tor-arm
3) После установки, должны установиться три пакета (tor, tor-arm и torsocks). В /etc/passwd появился пользователь deabin-tor а в /etc/group группа debian-tor. Основные файлы находятся в /etc/tor (основной конфиг), /var/lib/tor (секретные ключи а так же кэш), /usr/share/tor (дефолтный конфиг и базы GeoIP) ну и конечно же доки /usr/share/doc/tor и /usr/share/doc/tor-arm
C. Настройка.
1) Первым делом нам необходимо сгенерировать пароль для доступа к контрольной панели нашего TOR сервера.
tor –hash-password MySUpp3rT0Rp@sSw0rd
И зачищаем всю нашу историю. history -c && rm ~/.bash_history
P.S. Если используете snoopy кейлоггер, то так же уберите эту команду из файла /var/log/auth.log !
На выходе мы получим хэш, который вы должны либо временно переместить в буфер, либо куда-нибудь записать в файл. Этот хэш нам скоро понадобится.
2) Теперь добавьте вашего обычного пользователя, который не обладает какими-либо административными привилегиями в группу debian-tor. Так же переходим в каталог /etc/tor/ и вводим меняем права у файла torrc
chown root:debian-tor torrc && chmod 0640 torrc
3) Вскрываем наш основной конфиг /etc/tor/torrc
P.s. Держим на готове наш хэш
Вот основные параменты, которые нам нужны:
SocksPort 1.1.1.1:9050 ← устанавливаем сокет для прокси, в качестве адреса можно указать только порт и тогда socks proxy будет доступен только вам.
SocksPolicy accept * ← указывем от каких адресов/сетей мы можем принимать коннекты к прокси. Так же можно отдельно указать опцию SocksPolicy reject * Где вместо '*' можно прописать сеть или отдельный адрес. Например SocksPolicy reject 172.16.1.0/24
Log notice file /var/log/tor/log ← куда пишем логи. Доступные уровни логирования (err,warn,info,nocite,debug)
RunAsDaemon 1 ← устанавливаем параметр в 1, так как будем работать в «демоническом» режиме. Дефолтное значение 0
DataDirectory /var/lib/tor ← указываем директорию с ключами и кэшем, это домашняя директория пользователя debian-tor.
PidFile /var/run/tor/tor.pid ← можно и не указывать данную опцию, но почему-то из-за её отсутствия, на начале развёртывания у меня были ошибки в логах при перезупаске сервиса tor, которые ссылались на то, что не могут найти .pid файл демона.
ControlPort 9050 ← к данному порту мы будем подключаться для считывания статиски и управления нашим TOR сервером через tor-arm
HashedControlPassword <HASH> ← в данной опции нужно скопипастить наш хэш, который мы сгенерировали.
CookieAuthentication 0 ← выставляем данный параметр в 0, если используете аутентификацию по паролю. Иначе, даже при наличии пароля, будете подключаться через куки.
ORPort 443 NoListen
ORPort 1.1.1.1:9001 NoAdvertise ← эти два параметра отвечают за пересылку транзитного трафика и для общения с клиентами. Но, если вы планируете реализовывать веб-сервер, то тогда уберите строчку ORPort 443 NoListen . Но если же, данный сервер будет использоваться только как TOR, то лучше установить ORPort на 443, думаю, что понятно по каким причинам это лучше делать.
Address 1.1.1.1 ← вписываем наш адрес/dns. Эа опция вовсе не обязательна для указания, так как tor сервер сам определит адрес вашего ретранслятора.
Nickname MyExitRelay ← подключаем фантазию и придумываем имя нашему ретранслятору. Имя не обязательно должно быть уникальным, неоторые ретрансляторы/мосты имеют одинаковые имена.
ContactInfo shit@spam.com ← можно и не заполнять, если вы не хотите оставлять о себе контактную информацию.
DirPort 80 NoListen
DirPort 1.1.1.1:9030 NoAdvertise ← сокет, по которому клиенты будут получать списки TOR серверов. Поэтому, так же, если вы не планируете использовать web сервер, то установите опцию DirPort 80 NoListen .
ExitPolicy accept :20 ← данный параметр определяет, какие порты и от каких адресов мы будем разрешать использовать на выходе (если вы планируете использовать свой сервер Exit Node). Если вы не хотите быть Exit Node а только ретранслятором, то просто напишите ExitPolicy reject *:
ExitPolicy reject6 : ← «отрыгиваем» на выходе ipv6 трафик.
BridgeRelay 0 ← Так как мы деплоим relay, то устанавливаем параметр 0.
NumCPUs 1 ← указываем количество ядер, которые может отдать для TOR сервера.
ServerDNSResolvConfFile <пусть к файлу> ← Можно указать пусть к списку DNS серверов, которые будут использовать TOR клиенты. По дефолту используется /etc/resolv.conf
PublishServerDescriptor 1 ← данная опцию говорит о том, что мы являемся публичным, т.е. общедоступным релеем.
User debian-tor ← указываем с правами какого пользователя мы будем запускать TOR. (Запускать от рута, либо пользователя с административными привилегиями, крайне не рекомендуется.)
GeoIPFile /usr/share/tor/geoip ← указываем файл с GeoIP данными.
AllowSingleHopExits 0 ← лучше установить данный параметр в 0, если вы relay. Опция говорит о том, что мы можем пропускать трафик на прямую от клиента до источника, минуя все остальные цепочки ретрансляторов.
IPv6Exit 0 ← запрещаем прохождение ipv6 трафика.
ExitPolicyRejectPrivate 0 ← разрешаем соединение с нашим TOR сервером от клиентов локальных сетей.
MaxMemInQueues 6500 MB ← устанавливаем максимальный предел в использовании оперативной памяти для нашего сервера. По дефолту значение 0 и тогда пределом является вся ваша физическая память на сервере. Обьём памяти можно указывать в KB,MB и GB.
RelayBandwidthRate 50 KB/MB/GB ← устанавливаем скорость пропускного канала для транзитного трафика.
RelayBandwidthBurst 50 KB/MB/GB ← устанавливаем «всплеск» пропускного канала для транзитного трафика. Данные два параметры можно не указывать, если хотите выдетить всю вашу пропускную способность.
BandwidthRate 60 KB/MB/GB ← Та же опция, что и RelayBandwidthRate, только применяется для Exit Node
BandwidthBurst 75 KB/MB/GB ← Та же опция, что и RelayBandwidth, только применяется для Exit Node
ExcludeNodes Nickname или fingerprint ← Пожно указать список (через запятую) хостов, которые вы можете исключить из «цепочки» нодов.
MyFamily <fingerprint> ← можно указать ретрансляторы, максимум 40 хостов, которые будут более приоритетными в цепочке трафика.
DirPortFrontPage <путь к файлу *.html> ← Весьма интересный параметр, если вы пропишете путь к какому-либо html файлу в вашей системе, и совершите http запрос на ваш порт директорий, то отобразися содерживое данного html файла. Для примера можете открыть файл tor-exit-notice.html, который находится в директории, /usr/share/doc/tor/
Ниже приведены опции ответственные за запуск Tor DNS. Настраивать это только по лично желанию.
DNSPort 9053 ← дефолтный порт DNS Tor.
AutomapHostsOnResolve 1 ← Развешаем резолв через наш TOR DNS
AutomapHostsSuffixes .exit,.onion ← указываем список зон для резолвера. По дефолту резолвятся только .exit и .onion
Проверяем: dig @localhost -p 9053 ya.ru && dig @localhost -p 9053 xmh57jrzrnw6insl.onion
Примечание: TOR DNS не поддерживает MX и NS записи !
Ну вот мы и разобрали все основные опции в конфиге TOR, на самом деле их гораздо больше чем я описал. Для того, чтобы увидеть их всех, вам необходимо ввести команду:
tor –list-torrc-options
Либо ознакомиться с достаточно подробным мануалом, доступным при скачивании пакета tor:
man tor
3) Firewall.
В конфиге фаервола создаём таблицу nat с данными правилами перенаправления входящих пакетов. (Если вы не используете для TOR порты 80 и 443, то таблица nat вам не нужна)
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m state –state NEW -m tcp –dport 443 -j REDIRECT –to-ports 9001
-A PREROUTING -p tcp -m state –state NEW -m tcp –dport 80 -j REDIRECT –to-ports 9030
COMMIT
В таблице filter, в цепочках INPUT и OUTPUT пишем:
-A INPUT -i eth0 -p tcp -m state –state NEW -m tcp -m multiport –dports 9001,9030,9050 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp –dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state –state NEW -m owner –uid-owner 109 -j ACCEPT
4) Ребутаем tor.
/etc/init.d/tor restart
И проверяем, что tor запущен от пользователя debian-tor ( lsof -c tor && ps aux | grep tor ) и смотрим в лог файл. Если в логах появится запись:
Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor
Значит всё работает.
4.1) Тюнингуем ядрою
Записываем в файл /etc/sysctl.conf след. параметры:
net.ipv6.conf.all.disableipv6 = 1
net.ipv6.conf.default.disableipv6 = 1
net.ipv6.conf.lo.disableipv6 = 1
net.ipv4.tcpfintimeout = 13
net.ipv4.iplocalportrange = 11000 65000
net.ipv4.tcpfwmarkaccept = 0
net.ipv4.tcpkeepalivetime = 1800
net.ipv4.tcpkeepaliveprobes = 5
net.ipv4.tcpkeepaliveintvl = 45
И применяем изменения sysctl -p
5) Мониторинг
tor-arm.
Теперь нам бы хотелось мониторить состояние нашего ретранслятора, сделать это можно при помощи tor-arm. Тут нам необходимо вспомнить про наш пароль, который мы генерировали при помощи команды tor –hash-password . Вводим команду arm и свой пароль (не стоит запускать данную команду от root пользователя).
web сервисы мониторинга.
globe.torproject.org и atlas.torproject.org
Мне больше понравился globe, в отличии от atlas не такой «глючный». Но из миносов данных web сервисов, хотелось бы отметить не своевременное обновление информации.
Примечания:
a) Так же стоит иметь ввиду, что TOR, при старте своего сервиса, по дефолту, изначально читает конфиг из директории «/usr/share/tor/» и только после этого читает /etc/tor/torrc. В дефолтном конфиге уже прописаны такие параметры как DataDirectory. PidFile, RunAsDaemon, User, ControlSocket ControlSocketGroup, CookieAuthentication, CookieAuthFileGroupReadable, CookieAuthFile и Log notice file. Если вы не хотите, что бы демон tor читал дефолтный конфиг, то можно просто подредактировать init-скрипт /etc/init.d/tor изменив в нём значение переменной DEFAULT_ARGS на –defaults-torrc /etc/tor/torrc
b) При бэкапировании TOR сервера вам необходимо так же не забывать о сохранности важного приватного ключа secretidkey, который находятся в директории /var/lib/tor/keys/ Это ваш универнальный идентификационный ключ, если вы его потеряете, то при восстановлении, вы уже будете «другим» ретранслятором. Так же если данный ключ попадёт к злоумышленнику, то он может представиться вами и получать ваш трафик.
c) Для развёртывания TOR Relay не обязательно иметь статический адрес. В случае, если вы решили развернуть relay на вашем домашнем компьютере, который находится на NAT и у вас нет белого адреса. То вам нужно убрать из конфига строчку Address а на вашем роутере сделать проброс портов (ORPort и DirPort).
d) У меня при нагрузке в 2700 коннектов потреблялось 520 Mb моего DDR2.
e) Хорошим тоном было бы дать возможность сервису tor открывать большее количество файловых дескрипторов, чем по дефолту (примерно 1200). Это можно сделать отредактировав файл /etc/security/limits.conf Вписав туда строчку:
debian-tor hard nofile 8192
Ну вот и всё. Можете разворачивать и экспериментировать над своими TOR узлами, делиться опытом и советами. Ну и конечно же пополнить армию анонимусов инфраструктуру дополнительными нодами.