Index

Инструкция по настройке прозрачной маршрутизации трафика debian-based операционной системы через tor

Обычное использование tor, когда в настройках приложения указывается прокси 127.0.0.1:9050, сопряжено с определенными рисками. Например, при работе браузера IP-адрес может утекать через flash и WebRTC. Чтобы эти утечки не происходили, а также чтобы никакое приложение системы не пускало трафик через клирнет, можно настроить прозрачную маршрутизацию трафика через тор, после чего трафик любых приложений (будь то браузер, jabber-клиент, клиент электронной почты или программа RetroShare), даже при отсутствии указания прокси в настройках, будет идти через тор, и система будет надежно защищена (на самом деле нет*) от утечек IP-адреса. Итак, продемонстрируем возможность утечки адреса при обычном использовании tor в качестве прокси в браузере. Зайдем на сайт https://www.browserleaks.com/ и увидим, что через flash и WebRTC возможно определение нашего реального IP-адреса. Для предотвращения утечек айпи через браузер и другие приложения можно использовать прозрачную маршрутизацию трафика через тор. Делается это путем перенаправления трафика с помощью встроенного в ядро Linux сетевого экрана netfilter, инструментом настройки которого является утилита командной строки iptables. Рассмотрим процесс организации прозрачной маршрутизации трафика через tor от установки tor до получения конечного результата и рассмотрения возможностей использования полученной системы. Выполняемые далее команды выполняются от суперпользователя. Данная инструкция будет работать, по крайней мере, в системах Debian 8 и Ubuntu 14.04. 1. Установка tor. Можно установить устаревший пакет из репозиториев дистрибутива командой apt-get install tor, но лучше установить актуальную версию пакета из официальных репозиториев. Для этого следуйте инструкции на странице https://www.torproject.org/docs/debian. 2. Остановим службу tor командой service tor stop и отредактируем конфиг тора, расположенный по адресу /etc/tor/torrc, добавив в этот файл слудующие строки: VirtualAddrNetworkIPv4 10.192.0.0/10 AutomapHostsOnResolve 1 TransPort 9040 DNSPort 5353 После правки конфига снова запустим тор командой service tor start 3. Поправим файл /etc/resolv.conf. Выполним последовательно следующие команды: rm -f /etc/resolv.conf echo "nameserver 127.0.0.1" | tee /etc/resolv.conf chattr +i /etc/resolv.conf Это обеспечит удаленное разрешение доменных имен только через tor и предотвратит утечку IP-адреса через DNS. При этом первой командой удаляем старый файл resov.conf или ссылку на его месте, второй командой вписываем строку nameserver 127.0.0.1 в этот вновь созданный файл, третьей командой блокируем возможное изменение этого файла службой networkmanager. 4. Определяем PID тора. Выполняем команду grep tor /etc/passwd В выводе терминала получим строку вида debian-tor:x:135:145::/var/lib/tor:/bin/false где 135 - первое из двух найденных чисел - и есть искомый PID, который нужно подставить в предлагаемый далее скрипт. 5. Создаем скрипт для внесения изменений в правила iptables. Создаем текстовый файл с названием, например, script.sh, и впишем в него следующие строки, заменив XXX на PID тора и, при необходимости, заменив имя интерфейса eth0 на актуальное: #!/bin/sh ### set variables #your outgoing interface _out_if="eth0" #the UID that Tor runs as (varies from system to system) _tor_uid="109" #Tor's TransPort _trans_port="9040" #Tor's DNSPort _dns_port="5353" #Tor's VirtualAddrNetworkIPv4 _virt_addr="10.192.0.0/10" #LAN destinations that shouldn't be routed through Tor #Check reserved block. _non_tor="127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16" #Other IANA reserved blocks (These are not processed by tor and dropped by default) _resv_iana="0.0.0.0/8 100.64.0.0/10 169.254.0.0/16 192.0.0.0/24 192.0.2.0/24 192.88.99.0/24 198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 224.0.0.0/3" ### Don't lock yourself out after the flush #iptables -P INPUT ACCEPT #iptables -P OUTPUT ACCEPT ### flush iptables iptables -F iptables -t nat -F ### set iptables *nat #nat .onion addresses iptables -t nat -A OUTPUT -d $_virt_addr -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports $_trans_port #nat dns requests to Tor iptables -t nat -A OUTPUT -d 127.0.0.1/32 -p udp -m udp --dport 53 -j REDIRECT --to-ports $_dns_port #don't nat the Tor process, the loopback, or the local network iptables -t nat -A OUTPUT -m owner --uid-owner $_tor_uid -j RETURN iptables -t nat -A OUTPUT -o lo -j RETURN for _lan in $_non_tor; do iptables -t nat -A OUTPUT -d $_lan -j RETURN done for _iana in $_resv_iana; do iptables -t nat -A OUTPUT -d $_iana -j RETURN done #redirect whatever fell thru to Tor's TransPort iptables -t nat -A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports $_trans_port ### set iptables *filter #*filter INPUT iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT #Don't forget to grant yourself ssh access for remote machines before the DROP. #iptables -A INPUT -i $_out_if -p tcp --dport 22 -m state --state NEW -j ACCEPT iptables -A INPUT -j DROP #*filter FORWARD iptables -A FORWARD -j DROP #*filter OUTPUT #possible leak fix. See warning. iptables -A OUTPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT #allow Tor process output iptables -A OUTPUT -o $_out_if -m owner --uid-owner $_tor_uid -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ACCEPT #allow loopback output iptables -A OUTPUT -d 127.0.0.1/32 -o lo -j ACCEPT #tor transproxy magic iptables -A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport $_trans_port --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT #allow access to lan hosts in $_non_tor #these 3 lines can be ommited for _lan in $_non_tor; do iptables -A OUTPUT -d $_lan -j ACCEPT done #Log & Drop everything else. iptables -A OUTPUT -j LOG --log-prefix "Dropped OUTPUT packet: " --log-level 7 --log-uid iptables -A OUTPUT -j DROP #Set default policies to DROP iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP Скрипт взят из официального руководства - https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy 6. Запускаем скрипт командой script.sh или /script.sh или /home/user/script.sh - зависимости от того, где расположен скрипт. Запуск скрипта приведет к изменению правил iptables таким образом, что все TCP-запросы будут прозрачно маршрутизироваться через тор, посторонний же трафик будет отклонен. Проверьте правильность настройки iptables: запустите браузер, откройте адрес https://check.torproject.org/ . Должны увидеть надпись "Congratulations. This browser is configured to use Tor". Проверьте браузер на утечки айпи, воспользовавшись адресами https://www.browserleaks.com и https://2ip.ru/privacy/. Если настройка прошла гладко, то утечек айпи не будет. Теперь останавливаем TOR: service tor stop и повторно пробуем зайти на сайт, либо запускаем любую другую программу (например, IM-клиент), доступа к интернету быть не должно, т.к. выключен tor. 7. Теперь, чтобы настройки iptables восстанавливались после перезагрузок, нужно сохранить правила iptables командой iptables-save > /etc/iptables.rules - правила будут сохранены в файл /etc/iptables.rules Чтобы маршрутизация через тор происходила и после перезагрузки системы, нужно добавить в автозагрузку скрипт, обеспечивающий восстановление сохраненых в файл /etc/iptables.rules правил iptables. Для этого в папке /etc/network/if-pre-up.d/ создадим файл iptables, и добавим в него следующие строки: #!/bin/sh /sbin/iptables-restore < /etc/iptables.rules и, после сохранения, дадим полученному файлу права на запуск: chmod +x /etc/network/if-pre-up.d/iptables Если все прошло гладко, то при перезагрузке системы прозрачная маршрутизация через тор будет работать, и утечки айпи с этих пор можно не бояться. Область применения системы с прозрачной маршрутизацией через тор: - запуск браузера без риска утечки айпи через flash и WebRTC - запуск почтового клиента без риска раскрытия реального адреса в отправляемых письмах - запуск jabber-клиента без риска утечки адреса - запуск менеджеров загрузок без риска утечки - запуск IRC-клиента без риска - запуск программы RetroShare со скрытием реального айпи без необходимости создания скрытого сервиса, с возможностью соединяться как с узлами, находящимися в клирнете, так и со скрытыми узлами. Это недокументированный способ запуска RetroShare, позволяющий спользовать единый профиль без необходимости создания двух профилей - одного для клирнета, другого - с созданием скрытого сервиса. При этом друг, получивший ваш публичный ключ, увидит в качестве вашего айпи адрес выходной ноды тора. Мониторить сетевую активность в системе можно с помощью jnettop и убеждаться в отсутствии утечек. По умолчанию jnettop слушает интерфейс eth0, при запуске в гостевой системе достаточно выполнить от рута команду jnettop или jnettop -i wlan0 в зависимости от сетевого интерфейса. 8. Отключение перенаправления трафика Для того чтобы привести правила iptables к девственному виду и отключить перенаправление трафика в сеть tor можно создать скрипт со следующим содержанием: #!/bin/sh echo "Stopping firewall and allowing everyone..." iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT и запускать его в случае необходимости, не забывая веруть содержимое файла /etc/resolv.conf к виду nameserver 8.8.8.8 *Possible leak! Released March 28th, 2014 - Please incorporate the following iptables rules as they have not been incorporated into this article! - см. https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy Библиографический список: