Направляем весь трафик через Tor в Linux.

Проснулся я с утра и решил. Направлю весь трафик на своем VDS сервере через сеть Tor.

Что такое Tor ?

Сеть Tor-это группа добровольцев-серверов, которая позволяет людям улучшить свою приватность и безопасность в Интернете. Пользователи Tor используют эта сеть путем подключения через серию виртуальных туннелей, а не создание прямого подключения, что позволяет обеим организациям и индивидами, обмениваться информацией через публичные сети, не раскрывая их конфиденциальности. По сути это большая сеть VPN туннелей. В основе лежит распределенная система узлов — так называемых нод, между которыми в зашифрованном виде передаются данные. Для соединения обычно используется три сервера, которые образуют временную цепочку. Каждый сервер выбирается случайным образом, при этом он знает только то, от какого звена
получил данные и кому они предназначаются. Мало этого — цепочки постоянно меняются. Даже в случае перехвата данных на одном из серверов отследить полный маршрут пакетов (в том числе и их отправителя) не представляется возможным. Перед отправлением пакет последовательно шифруется тремя ключами: сначала для третьей ноды, потом для второй и, в конце концов, для первой. Когда первая нода получает пакет, она расшифровывает «верхний» слой шифра и узнает, куда отправить пакет дальше. Второй и третий сервер поступают аналогичным образом.

Как серьезно бы ни защищались данные, как изощренно не выбирался и запутывался маршрут, где-то на выходе данные все равно нужно расшифровывать. Ведь только так их можно доставить до места назначения. Эта операция осуществляется на последней ноде в цепочке — так называемой выходной нодой (Exit Node). Если на таком узле установить снифер, то данным ничего больше не останется, как прямиком попасть в логи :). ВАЖНО, не забывайте Tor не панацея и  не обеспечивает вам 100% анонимность !

Установка и настройка Tor.

В Debian установить Tor очень просто, он уже есть с пакете .deb .

apt-get install tor

Для настройки используются два файла  torcc и torsocks.conf .

По умолчанию Tor используется как SOCKS прокси, но мы не пойдем этим путем. Не будем использовать программы типа Proxifier и т.п. В нашем случае у нас есть VDS сервер с установленным OpenVPN к которому мы подключаемся по VPN и вот на нем то мы весь трафик и направим в сеть Tor. Для начала в файле etc/tor/torcc добавим строчки :

VirtualAddrNetworkIPv4 10.192.0.0/10  #Когда Tor необходимо назначить виртуальный (неиспользуемый) адрес из-за MAPADDRESS команда от контроллера или функции AutomapHostsOnResolve,
Tor выбирает неназначенный адрес из этого диапазона. (По умолчанию: 127.192.0.0 /10)
AutomapHostsOnResolve 1    # Разрешаем резольвит через тор.
TransPort 9040                              #Транзитный порт для трафика.
TransListenAddress 10.0.1.1       # Адресу для прослушивания прозрачных прокси соединений. В моем случае адрес туннеля.
DNSPort 5353                                #DNS порт, суда будет направлять dns запросы в сеть тор.
DNSListenAddress 10.0.1.1 # Привязка к этому адресу для прослушивания DNS-подключений.

Так же можно использовать только определены страны  в качестве ExitNodes :

ExitNodes {US},{DE},{AT},{UA},{RU} 
StrictExitNodes 1

Или наоборот запретить определены страны :

StrictExitNodes {MD},{KZ}

В файле torsocks.conf может закомментировать строчки, что бы не открывать лишних портов и т.д:

# Default Tor address and port. By default, Tor will listen on localhost for
# any SOCKS connection and relay the traffic on the Tor network.
#TorAddress 127.0.0.1
#TorPort 9050

Перенаправление трафика.

Первым делом не забудьте разрешить форвардинг в ядре в файле /etc/sysctl.conf раскомментируем строчку:

net.ipv4.ip_forward=1

Чтобы не перезагружаться сообщаем ядру о включении форвардинга:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

Так же нам надо удалить правила в iptables  по MASQUERADE  или тому подобные правила POSTROUTING , если они у вас есть.

iptables -t nat -D POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE

Ну а теперь самое интересное, заворачиваем весь трафик из туннеля в Tor :

iptables -t nat -A PREROUTING -i tun0 -p tcp —syn -j REDIRECT —to-ports 9040
iptables -t nat -A PREROUTING -i tun0 -p udp —dport 53 -j REDIRECT —to-ports 5353

Вариант номер два:

iptables -t nat -A PREROUTING -i tun0 -p tcp -j DNAT —to-destination 10.0.1.1:9040
# …и DNS-трафика в отдельности
$ sudo iptables -t nat -A PREROUTING -i tun0 -p udp —dport 53 -j DNAT —to-destination 10.0.1.1:53

ПОВОРАЧИВАЕТ ТРАФИК НА ПК(OC LINUX).

VDS и т.д. это хорошо. Но что делать если мы хотим просто на компьютере завернуть трафик в Тор.

Для начала нам потребуются немного другие настройки :

VirtualAddrNetworkIPv4 10.192.0.0/10  #Когда Tor необходимо назначить виртуальный (неиспользуемый) адрес из-за MAPADDRESS команда от контроллера или функции AutomapHostsOnResolve,
Tor выбирает неназначенный адрес из этого диапазона. (По умолчанию: 127.192.0.0 /10)
AutomapHostsOnResolve 1    # Разрешаем резольвит через тор.
TransPort 9040                              #Транзитный порт для трафика.
DNSPort 5353                                #DNS порт, суда будет направлять dns запросы в сеть тор.

Сохраняем, перезапускаем Tor:

service tor restart

Настройте системный DNS-резольвер для использования DNSPort Tor в интерфейсе loopback /etc/resolv.cofig :

nameserver 127.0.0.1

Ну а теперь сделаем REDIRECT пакетов на порты Тора :

iptables -t nat -A OUTPUT -p udp -m udp —dport 53 -j REDIRECT —to-ports 5353
iptables -t nat -A OUTPUT -p tcp -m tcp —tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT —to-ports 9040

Хотел бы обратить внимание что с начало надо запустить Tor, а потом выставлять правила iptables. Иначе просто Tor не установит соединение.

Не плохая инструкция по транспорт-прокси :  https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy

Для ленивых :

TorIptables2 — cкрипт  Tor Iptables который настраивает iptables и tor для перенаправления всех служб и трафика, включая DNS, через сеть Tor.

Домашняя страница: https://github.com/ruped24/toriptables2

Автор: Rupert Edwards

использование:
toriptables2.py [-h] [-l] [-f]

опциональные аргументы:
-h, —help показать справку и выйти.
-l, —load Эта опция загрузит правила tor iptables.
-f, —flush Эта опция сбросит правила iptables за стандартные.

Утечка DNS и Windows 10.

К сожалению в Windos 10 сделали очень плохую  штуку, dns запросы отправляются на все доступные интерфейсы  в не зависимости от таблиц маршрутизации. От какова ответ приходит быстрей, тот dns сервер и используется. По этому в настройках сетевого соединения приходиться в ручную писать DNS сервер, например вашего туннеля  10.0.1.1 .  Можно бороться и другими методами, исполосовать свой dns  сервер который находятся где нибудь за бугришем ))).

Да здравствует Exit node!

Если вам вдруг захотелось присоединиться к данному проекту и стать  Exit node ,то дальше будут статья для вас. Сам я не пробовал и взял этот кусок полностью с сайта Xaker.ru без изменений :

Для Tor’а важно, чтобы часы были установлены точно. В противном случае —
синхронизируем с публичными серверами времени. Забегая вперед скажу, что для
запуска Tor лучше создать отдельного пользователя — делается это командой
adduser. Я создал себе пользователя toruser: uid=111(toruser) gid=10(wheel)
groups=0(wheel),10(wheel). Теперь нужно создать файл конфигурации. Tor
использует для хранения своих данных папку .tor в домашней директории
пользователя (/home/toruser). Создаем папку .tor, создаем в ней файл torrc и
открываем его в текстовом редакторе.

Нас интересует несколько параметров :

ControlPort – на этом порту Tor будет принимать подключения для
управления Tor-сервером (т.е. можно подключиться удаленно для конфигурации Tor’а,
опция важна для тех, кто использует графические оболочки типа Vidalia или Tork).
Устанавливаем его в 9051.

DirPort – на этом порту Tor будет принимать данные от сервера
директорий. Устанавливаем в 9030.

ControlPort 9051
DirPort 9030

ExitPolicy – определяет, какой трафик мы будем принимать и форвардить.
Имеет формат «ExitPolicy Accept | reject address:port». По умолчанию политика
следующая:

reject *:25
reject *:119
reject *:135-139
reject *:445
reject *:563
reject *:1214
reject *:4661-4666
reject *:6346-6429
reject *:6699
reject *:6881-6999
accept *:*

Означает, что мы будем резать трафик, направленный на вышеперечисленные
порты, а весь остальной будем пропускать. В принципе можно ее и не
переопределять и оставить дефолтной, ну это уж на твой выбор. Я использовал
следующую:

ExitPolicy accept *:80, accept *:443, accept *:110, accept *:143,
accept *:993, accept *:995, reject *:*

HashedControlPassword – хеш пароля для доступа и конфигурации
Tor-сервера (чтобы никакой злобный хакер не смог переконфигурировать наш
сервер), создается при помощи команды: tor —hash-password.

Nickname – имя нашего сервера.

ORPort – порт, ожидающий подключения от других нодов.

SocksListenAddress — адрес, по которому Tor будет ждать подключений от
приложений, работающих через SOCKS. Формат: SocksListenAddress IP[:PORT]
Установим IP в 127.0.0.1, а порт оставим дефолтным (9050). Это понадобится нам,
если мы захотим использовать Tor в связке с Privoxy или другими прокси.

HashedControlPassword
16:91495A0B7CBC41C76073E1EC00A5CF1510D41462884391CCB24BF489F1
Log notice stdout – выводить сообщения в консоль
Nickname HelloXakep
ORPort 9001
SocksListenAddress 127.0.0.1

Сохраняем изменения и закрываем файл. Можно приступать к запуску. Открываем
консоль, логинимся под toruser и запускаем Tor, передав в качестве параметра
путь до конфиг-файла:

$ tor -f /home/toruser/.tor/torrc

И смотрим выдаваемые сообщения. Как только сервер сможет подсоединиться к
сети, он попытается определить доступность своих портов снаружи. Это может
занять до 20 минут. В логах появятся сообщения вида «Self-testing indicates your
ORPort is reachable from the outside. Excellent». Если таковых нет, это значит,
что сервер недоступен из Сети — тогда следует перепроверить файрволл.

Как только сервер определит доступность, он загрузит на сервер директорий
(базу нод) свой дескриптор. Это позволит клиентам узнать адрес, порты, ключи и
другую информацию о нашем сервере. Можно зайти на

http://moria.seul.org:9032/tor/status/authority
 и найти там nickname своего
сервера, чтобы убедиться, что он будет использоваться клиентами. Правда,
обновляется он не моментально — иногда может потребоваться некоторая время,
чтобы эта информация в базе обновилась.

Вот и появился наш сервер в списке. Посмотрим на строчку ниже HelloHacker.
Что мы видим: s Exit Fast Running V2Dir Valid. Exit — означает, что мы являемся
Exit Node!

ВАЖНО :

Надо понимать, что работая в качестве Exite Node’ы, человек серьезно
подставляет себя. Ведь именно его IP светиться во время взломов и т.д. В
процессе написания статьи через мой сервер дважды пытались провести атаку
типа SQL-injection. Так что держи ухо востро, за такие вещи можно запросто
схлопотать от правоохранительных органов или от провайдера. Вот лишь
некоторые примеры:
В 2006 г. спецслужбы Германии осуществили захват шести компьютеров,
работавших нодами сети Tor на основании того, что они были незаконно
использованы для доступа к детской порнографии.
В 2007 г. Национальная полиция Швеции арестовала известного эксперта по компьютерной
безопасности Дена Эгерстада по обвинению в неправомерном доступе к
компьютерной информации. 22-летний сотрудник компании Deranged Security
опубликовал на своем рабочем сайте пароли к электронной почте посольств,
негосударственных организаций, коммерческих фирм и правительственным
агентств разных стран. По его словам, он в качестве эксперимента создал 5
выходных серверов Tor и перехватывал через них незашифрованный трафик.
В 2007 г. немецкая полиция арестовала в Дюссельдорфе Александра Янссена, организовавшего у себя на компьютере сервер Tor, через который неизвестный отправил ложное
сообщение о теракте. Несмотря на то, что вскоре г-н Янссен был отпущен,
он решил отказаться от дальнейшего использования своего компьютера в
качестве точки выхода Tor.