⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀В этой статье вы узнаете один из способов создания переносного Tor *** роутера. С помощью этого устройства вы сможете подключать любые Комьютеры/смартфоны, заворачивать трафик сначала в ***, затем в Tor, обфусцировать с помощью obfs-proxy и отправлять на удаленный ***-сервер. Что нам понадобиться? 1) Любой одноплатный компьютер. В моем случае это Raspberry Pi модель B+. 2) ОС Raspbian. 3) Micro SD. 4) Картридер. 5) Беспроводной адаптер или переходник ethernet to usb. 6) Удаленный Open*** сервер. Схемы подключения 1. eth-eth 2. wlan-eth 3. wlan-wlan 4. eth-wlan Обозначения 1. SBC — одноплатный компьютер; 2. CR — устройство, через которое осуществляется доступ в Интернет. Устройство не обязательно может быть подключено напрямую в порт SBC; 3. PC — какой-либо компьютер (или мобильное устройство) подключаемое к SBC; 4. ***-server — целевой *** сервер; 5. Входной интерфейс — физический интерфейс, куда поступает клиентский трафик; 6. Выходной интерфейс — физический интерфейс, с которого трафик уходит в Интернет. Допущения В статье рассматривается случай, когда параметры для линка в интернет приходят по DHCP или задаются статически. Для случаев с получением параметров для линка по L2TP, PPPoE или иных ситуаций настройка будет отличаться. Также будем считать, что для удобной работы ***-сервер выступает как DNS-relay. Установка системы и подключение На официальном сайте Rasbian присутствуют очень подробные инструкции для записи образа для Linux, Mac OS и Windows, поэтому я не буду засорять статью лишним. Использовать карту не менее 16гб. С подключением к плате после записи образа и включения может быть несколько вариантов: 1. Если у вас есть специальный экран/монитор/телевизор c поддержкой hdmi, то достаточно его подключить по hdmi; 2. Если экрана нет, но параметры на физический интерфейс приходят по DHCP, то можно просканировать сеть nmap-ом с другого компьютера и подключиться по ssh. Пользователь pi, пароль raspberry; 3. Если нет DHCP, то можно отредактировать файл /etc/network/interfaces и прописать туда адреса вручную. Форвардинг трафика Для того, чтобы трафик пересылался с одного интерфейса на другой, необходимо, чтобы был включен соответствующий параметр ядра Linux. Это можно сделать с помощью команды: sysctl -w net.ipv4.ip_forward=1 или echo 1 > /proc/sys/net/ipv4/ip_forward Для проверки можно использовать команду: cat /proc/sys/net/ipv4/ip_forward Она должна вернуть «1». iptables Для того, чтобы упростить маршрутизацию трафика, включим маскардинг для туннельного интерфейса с помощью iptables: iptables -t nat -A POSTROUTING -s 10.5.5.0/24 -o tun0 -j MASQUERADE Вместо этого можно было бы прописать статические маршруты и статический адрес для клиента. Или использовать ccd. Установка пакетов Обновить репозитории и получить обновления: sudo apt-get update sudo apt-get upgrade Установка из репозиториев: sudo apt-get install python2.7 python-pip python-dev build-essential tor open*** obfs-proxy Если вы хотите схему с точкой доступа, то помимо этого установим hostapd и DHCP-cервер: sudo apt-get install hostapd isc-dhcp-server Вместо isc-dhcp-server вполне может быть использован любой другой. В репозиториях часто содержаться не самые последние версии, поэтому можно собрать пакеты из исходников, но если вам нужно получить быстрое решение, то подойдет и установка из репозитория. Настройка сетевого подключения Схема eth-eth: Данный вариант является самым простым. На физическом интерфейсе Raspberry Pi, к которому подключается ПК, достаточно настроить статический адрес. На ПК также задать параметры вручную. Также можно настроить isc-dhcp-server, чтобы он выдавал параметры. На клиентской машине на Linux для первоначальной настройки достаточно выполнить команды: ip a add 10.5.5.2/24 dev <интерфейс> ip route add default gw 10.5.5.1 А в файл /etc/resolv.conf добавить запись: nameserver 10.8.0.1 Схема wlan-eth: В данной схеме входным интерфейсом будет беспроводной интерфейс, работающий в режиме точки доступа. Вместо режима полноценной точки доступа можно настроить режим Ad-hoc. Для организации wi-fi точки доступа с DHCP я использовал связку hostapd и isc-dhcp-server, но не обязательно использовать именно эту связку. На хабре есть несколько очень подробных статей по настройке различных вариантов в Linux. Ссылки я привел в источниках. Привожу пример своих настроек: /etc/hostapd/hostapd.conf interface=wlan0 #Интерфейс driver=rtl871xdrv #Используемый драйвер ssid=AP #Название точки доступа hw_mode=g #Стандарт работы точки доступа channel=6 #Частотный диапазон macaddr_acl=0 #Не использовать списки доступа auth_algs=1 #Использовать WPA wpa=2 #Версия протокола wpa_passphrase=raspberry #Пароль для подключения wpa_key_mgmt=WPA-PSK #Метод аутентификации wpa_pairwise=TKIP #Алгоритмы работы с ключами и шифрованием rsn_pairwise=CCMP /etc/dhcp/dhcpd.conf #Задание подсети для которой будет работать данный DHCP сервер subnet 10.5.5.0 netmask 255.255.255.0 { range 10.5.5.2 10.5.5.4; #Диапазон адресов option broadcast-address 10.5.5.255; #Широковещательный адрес option routers 10.5.5.1; #Шлюз по умолчанию default-lease-time 600; #Стандартное удержания адреса max-lease-time 7200; #Максимальное время удерживания адреса option domain-name "local"; #Доменное имя option domain-name-servers 10.8.0.1;} #Список DNS-серверов. Сразу стоит оговориться, что у некоторых могут возникнуть проблемы с драйверами и работой беспроводной карточки в режиме точки доступа. Лучше поинтересоваться такими вещами заранее. У меня была такая проблема для одной из моих карт при работе вместе с hostapd из репозитория. Проблема решилась патчем hostapd. Схема wlan-wlan: Часть с настройкой входного интерфейса ничем не отличается от предыдущей схемы. Выходной интерфейс необходимо подключить к точке доступа. Пример подключения с использованием утилиты nmcli: nmcli d wifi connect <SSID точки> password <пароль> iface <интерфейс> Схема eth-wlan: Настройка входного интерфейса происходит как в схеме eth-eth, выходного — как в wlan-wlan. Tor + obfsproxy Для маскировки Tor трафика будем использовать obfsproxy. Привожу пример настройки Tor: /etc/tor/torrc SocksPort 9050 RunAsDaemon 1 VirtualAddrNetwork 172.16.0.0/12 DNSPort 53 DNSListenAddress 127.0.0.1 AutomapHostsOnResolve 1 BridgeRelay 1 Exitpolicy reject *:* ServerTransportPlugin obfs3 exec /usr/bin/obfsproxy managed obfs3 <адрес1:порт1> <ключ1> obfs3 <адрес2:порт2> <ключ2> obfs3 <адрес3:порт3> <ключ3> Данные для подключения к серверам obfsproxy можно взять здесь. Open*** Для организации *** будем использовать Open*** через TCP и в режиме L3 (tap-интерфейс). Используется TCP, поскольку Tor работает только TCP-трафиком. В сам же ***-туннель можно пускать любой трафик. Для того, чтобы направить *** трафик в Tor, будем «проксировать» весь ***-трафик через Tor. Open*** поддерживает такую возможность. Привожу пример настройки клиентской части Open*** с подробными комментариями: /etc/open***/client.conf сlient #Имя клиента dev tun #Использовать L3-интерфейс proto tcp #Задать TCP транспортным протоколом socks-proxy 127.0.0.1 9050 #Использовать Tor как Socks-proxy. socks-proxy-retry #Пытаться подключаться многократно # Внешний IP, на или за которым находится сервер Open*** и порт (на сервере или на сетевом устройстве, на котором настроен проброс портов до сервера) remote 1.1.1.1 443 #Порт специально выбран таким образом, чтобы он совпадал с портом, используемым протоколом https. resolv-retry infinite #Подключаться до тех пор, пока подключение не будет осуществлено. ca /etc/open***/keys/ca.crt #Сертификат сервера cert /etc/open***/keys/client.crt #Сертификат клиента key /etc/open***/keys/client.key #Приватный ключ клиента tls-client #Использовать протокол TLS tls-auth /etc/open***/keys/ta.key 1 #Ключ для аутентификации в TLS auth SHA1 #Задать SHA1 как алгоритм хеширования cipher AES-128-CBC #Задать основным алгоритмом шифрования AES с длиной ключа в 128 бит в режиме сцепления блоков. По настройке сервера есть достаточно много инструкцией в интернете. Ссылки я привел в «источниках» в конце статьи. Ключевым в настройке является совпадение параметров и наличие в конфиге сервера строчки «push «redirect-gateway def»». Она необходима, чтобы на клиенте установился маршрут по-умолчанию для проходящего трафика, который указывает на *** сервер. Заключение Потенциальные подводные камни: 1. Синхронизация времени. Поскольку tor выполняет криптооперации с проверкой временных меток, то время должно быть синхронизировано. К сожалению, время нужно будет синхронизировать каждый раз после выключения платы. 2. Размер mtu. DF-бит в отправляемых пакетах может привести к тому, что трафик будет «резаться», если где-то по пути запрещена фрагментация пакетов, а значение mtu меньше вашего. 3. Использование *** throught Tor и obfsproxy не панацея от всего.
Малину под ТОР роутер? Бесполезно... Лучше Малину под умный дом пустить, написать на RPI.GPIO управление девайсами, бекенд на Django и радоваться жизни
Тема походу из разряда "Ломаем пентагон после крушения на необитаемом острове на компьютере, собранном из остатков самолета"