Go Back   Carder.life > [ru] Forum for Russians > Автоматический гарант-сервис



Reply
 
Thread Tools Display Modes
  #1  
Old 02-18-2025, 02:52 PM

blackedd blackedd is offline
Join Date: Mar 2024
Posts: 146
Default


В этой статье будет рассказано об одном из вариантов получения переносного решения с Tor, VPN и обфускацией, к которому можно подключить свои мобильные устройства, ПК или ноутбук.
Постановка задачи: получить одноплатный компьютер, который можно подключить к своему ноутбуку/ПК/мобильному устройству и который будет заворачивать трафик сначала в VPN, затем в Tor, обфусцировать с помощью obfs-proxy и отправлять на удаленный VPN-сервер.
Исходные данные:
1) Одноплатный компьютер. В моем случае это Raspberry Pi модель B+;
2) ОС Raspbian. Для данной статьи использовалась Raspbian Jessie, билд от 18-03-2016;
3) Карта памяти (Micro SD);
4) Картридер;
5) Беспроводной адаптер или переходник ethernet to usb;
6) Удаленный OpenVPN сервер.
Схемы подключения:
1) eth-eth

2) wlan-eth

3) wlan-wlan

4) eth-wlan

Обозначения:
1. SBC — одноплатный компьютер;
2. CR — устройство, через которое осуществляется доступ в Интернет. Устройство не обязательно может быть подключено напрямую в порт SBC;
3. PC — какой-либо компьютер (или мобильное устройство) подключаемое к SBC;
4. VPN-server — целевой VPN сервер;
5. Входной интерфейс — физический интерфейс, куда поступает клиентский трафик;
6. Выходной интерфейс — физический интерфейс, с которого трафик уходит в Интернет.
Допущения:
В статье рассматривается случай, когда параметры для линка в интернет приходят по DHCP или задаются статически. Для случаев с получением параметров для линка по L2TP, PPPoE или иных ситуаций настройка будет отличаться. Также будем считать, что для удобной работы VPN-сервер выступает как 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
или
Code:
 echo 1 > /proc/sys/net/ipv4/ip_forward

Для проверки можно использовать команду:
Code:
cat /proc/sys/net/ipv4/ip_forward

Она должна вернуть «1».
iptables
Для того, чтобы упростить маршрутизацию трафика, включим маскардинг для туннельного интерфейса с помощью iptables:
Code:
 iptables -t nat -A POSTROUTING -s 10.5.5.0/24 -o tun0 -j MASQUERADE

Вместо этого можно было бы прописать статические маршруты и статический адрес для клиента. Или использовать ccd.
Установка пакетов
Обновить репозитории и получить обновления:
Code:
sudo apt-get update
sudo apt-get upgrade

Установка из репозиториев:
Code:
 sudo apt-get install python2.7 python-pip python-dev build-essential tor openvpn obfs-proxy

Если вы хотите схему с точкой доступа, то помимо этого установим hostapd и DHCP-cервер:
Code:
 sudo apt-get install hostapd isc-dhcp-server

Вместо isc-dhcp-server вполне может быть использован любой другой. В репозиториях часто содержаться не самые последние версии, поэтому можно собрать пакеты из исходников, но если вам нужно получить быстрое решение, то подойдет и установка из репозитория.
Настройка сетевого подключения
Схема eth-eth
Данный вариант является самым простым. На физическом интерфейсе Raspberry Pi, к которому подключается ПК, достаточно настроить статический адрес. На ПК также задать параметры вручную. Также можно настроить isc-dhcp-server, чтобы он выдавал параметры. На клиентской машине на Linux для первоначальной настройки достаточно выполнить команды:
Code:
ip a add 10.5.5.2/24 dev <интерфейс>
ip route add default gw 10.5.5.1

А в файл /etc/resolv.conf добавить запись:
Code:
 nameserver 10.8.0.1

Схема wlan-eth
В данной схеме входным интерфейсом будет беспроводной интерфейс, работающий в режиме точки доступа. Вместо режима полноценной точки доступа можно настроить режим Ad-hoc.
Для организации wi-fi точки доступа с DHCP я использовал связку hostapd и isc-dhcp-server, но не обязательно использовать именно эту связку. На хабре есть несколько очень подробных статей по настройке различных вариантов в Linux. Ссылки я привел в источниках.
Привожу пример своих настроек:
/etc/hostapd/hostapd.conf
Code:
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
Code:
#Задание подсети для которой будет работать данный 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:
Code:
 nmcli d wifi connect <SSID точки> password <пароль> iface <интерфейс>

Схема eth-wlan
Настройка входного интерфейса происходит как в схеме eth-eth, выходного — как в wlan-wlan.
Tor + obfsproxy
Для маскировки Tor трафика будем использовать obfsproxy.
Привожу пример настройки Tor:
/etc/tor/torrc
Code:
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 можно https://bridges.torproject.org/bridges?transport=obfs3.
OpenVPN
Для организации VPN будем использовать OpenVPN через TCP и в режиме L3 (tap-интерфейс). Используется TCP, поскольку Tor работает только TCP-трафиком. В сам же VPN-туннель можно пускать любой трафик. Для того, чтобы направить VPN трафик в Tor, будем «проксировать» весь VPN-трафик через Tor. OpenVPN поддерживает такую возможность.
Привожу пример настройки клиентской части OpenVPN с подробными комментариями:
/etc/openvpn/client.conf
Code:
сlient #Имя клиента
dev tun #Использовать L3-интерфейс
proto tcp #Задать TCP транспортным протоколом
socks-proxy 127.0.0.1 9050 #Использовать Tor как Socks-proxy.
socks-proxy-retry #Пытаться подключаться многократно
# Внешний IP, на или за которым находится сервер OpenVPN и порт (на сервере или на сетевом устройстве, на котором настроен проброс портов до сервера)
remote 1.1.1.1 443 #Порт специально выбран таким образом, чтобы он совпадал с портом, используемым протоколом https.
resolv-retry infinite #Подключаться до тех пор, пока подключение не будет осуществлено.
ca /etc/openvpn/keys/ca.crt #Сертификат сервера
cert /etc/openvpn/keys/client.crt #Сертификат клиента
key /etc/openvpn/keys/client.key #Приватный ключ клиента
tls-client #Использовать протокол TLS
tls-auth /etc/openvpn/keys/ta.key 1 #Ключ для аутентификации в TLS
auth SHA1 #Задать SHA1 как алгоритм хеширования
cipher AES-128-CBC #Задать основным алгоритмом шифрования AES с длиной ключа в 128 бит в режиме сцепления блоков.

По настройке сервера есть достаточно много инструкцией в интернете. Ссылки я привел в «источниках» в конце статьи. Ключевым в настройке является совпадение параметров и наличие в конфиге сервера строчки «push «redirect-gateway def»». Она необходима, чтобы на клиенте установился маршрут по-умолчанию для проходящего трафика, который указывает на VPN сервер.
Тестирование
Для теста правильности работы пустим ping от подключенного ПК до tun-интерфейса VPN-сервера, будем снимать трафик с помощью tcpdump и анализировать в Wireshark для наглядности.
1) ICMP-запрос приходит на входной интерфейс Raspberry Pi.

Стоит обратить внимание на идентификаторы BE, LE и временную метку. Далее они нужны будут для того, чтобы опознать ICMP-запрос на стороне сервера.
2) ICMP-пакет прошёл процедуру обработки в OpenVPN и направился на порт 9050, который «слушается» Tor. Снимок трафика происходит на loopback интерфейсе Raspberry Pi.

3) Пакет выходит из Raspberry Pi и направляется на один из узлов сети Tor с серверной частью obfsproxy:

4) И снимок трафика уже на туннельном интерфейсе VPN-сервера. Тут же можно заметить, что сервер послал ответ.

Идентификаторы BE, LE и временная метка совпадают с теми, которые были в отправленном пакете.
5) На этом скриншоте представлен пакет, выходящий с VPN-сервера, в котором содержиться ICMP-reply.

Также я произвел тестирование пропускной способности этого решения с помощью iperf для TCP и UDP трафика до сервера. Тестирование проводилось с использованием Raspberry Pi model B+ и ОС Raspbian в домашней сети, так что цифры для других одноплатных компьютеров с другими ОС или другой сетевой средой могут отличаться.
Результаты:
— связка Tor + VPN+ obfsproxy
— только VPN
— чистый канал


Заключение
Потенциальные подводные камни:
1) Синхронизация времени. Поскольку tor выполняет криптооперации с проверкой временных меток, то время должно быть синхронизировано. К сожалению, время нужно будет синхронизировать каждый раз после выключения платы.
2) Размер mtu. DF-бит в отправляемых пакетах может привести к тому, что трафик будет «резаться», если где-то по пути запрещена фрагментация пакетов, а значение mtu меньше вашего.
3) Использование VPN throught Tor и obfsproxy не панацея от всего.


(с) copypaste

Reply

Tags
NULL


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On

Forum Jump




All times are GMT. The time now is 07:31 PM.