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
Библиографический список: