UPD: Внимание!!! Данный протокол и/или версия протокола была скомпрометирована и более не является надежным и защищенным! Не рекомендуется его использование!
Привет мой дорогой друг. Ну вот и ты озадачился вопросом безопасности и/или анонимности в сети интернет в столь сложное высокотехнологичное время, где каждый очень хочет подглядеть за тобой или как то ограничить в доступе к ресурсам.
Также подобный вид маскировки трафика отлично подойдет для использования в сетях 4G/LTE или иных сетях, где есть ограничение по виду трафика в попытках ограничить доступ или скорость.
Обфускация трафика тема не новая, но и не особо популярная. По этому действительно рабочих и стоющих статей крайне мало.
И так, в качестве сервера будет взят VDS на ubuntu 22.04. В качестве клиента будем настраивать все ту же ubuntu и Windows 10. (Думаю что большинство предпочтут именно 2 вариант настроек клиента.) Для реализации самой обфускации трафика, на сервере и клиенте будет использоваться Shapeshifter Dispatcher Проект не плохой. Но они отказались от поддержки протокола obfs4 и скомпилить билд из свежих исходников невозможно. За старые исходники отдельное спасибо @fuccsoc Рабочие билды можно будет скачать по ссылке в конце поста.
Установка и настройка сервера
И так. Сперва обновляемся. И устанавливаем нужные пакеты.
apt update apt upgrade apt install openvpn apt install easy-rsa
Настраиваем обфускацию
Собранный билд под нашу ОС помещаем в папку /usr/local/bin И выставляем права на выполнение.
chmod +x /usr/local/bin/shapeshifter-dispatcher
После чего выполняем тестовый запуск:
shapeshifter-dispatcher -transparent -server -state /var/lib/state -orport 127.0.0.1:1515 -transport obfs4 -bindaddr obfs4-0.0.0.0:1516 -logLevel DEBUG -enableLogging
В ответ мы должны получить listening on 0.0.0.0:1516 -- адрес и порт на который будет идти наш шифрованный трафик. После чего, можно остановить выполнение данной программы. И идем в папку /var/lib/state, там создались 3 файла. dispatcher.log и 2 конфиг файла obfs4_bridgeline.txt + obfs4_state.json
В файле obfs4_bridgeline.txt копируем ключ после переменной cert= Он генерируется автоматически и нужен будет для наших клиентов.
Чтобы shapeshifter-dispatcher стартовал при запуске системы, создадим для него свой сервис с нужными аргументами для запуска. Для этого создаем файл сервиса:
nano /etc/systemd/system/shapeshifter-dispatcher.service
Со следующими строками:
[Unit] Description=shapeshifter-dispatcher service After=syslog.target network.target [Service] Type=simple ExecStart=/usr/local/bin/shapeshifter-dispatcher -transparent -server -state /var/lib/state -orport 127.0.0.1:1515 -transport obfs4 -bindaddr obfs4-0.0.0.0:1516 -logLevel DEBUG -enableLogging Restart=on-failure RestartSec=30s [Install] WantedBy=multi-user.target
Перезапускаем systemd
systemctl daemon-reload
Далее запускаем наш сервис, и делаем его активным на автозапуск
systemctl start shapeshifter-dispatcher.service systemctl enable shapeshifter-dispatcher.service
Настраиваем OpenVPN
Т.к протокол obfs4 имеет собственное шифрование, OpenVPN будет настраиваться на работу без шифрования. Это уменьшит нагрузку на наш сервер и клиентскую машину.
Но сертификат и ключи все равно придется создавать. У меня версия easy-rsa 3.0.8, в котором внесены незначительные изменения по синтаксису и алгоритмы работы. Будьте внимательны, есть отличия на более ранних версиях. Копируем нужные файлы и переходим к настройке:
mkdir /etc/openvpn/easy-rsa cp -r /usr/share/easy-rsa /etc/openvpn cd /etc/openvpn/easy-rsa cp -r ./vars.example ./vars nano vars
Образец vars. Синтаксис немного поменялся. Редактируем на свое усмотрение.
set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "California" set_var EASYRSA_REQ_CITY "San Francisco" set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" set_var EASYRSA_REQ_EMAIL "me@example.net" set_var EASYRSA_REQ_OU "My Organizational Unit"
Затем генерируем ключи и перемещаем в рабочую папку. (инициализация конфиг файла ./vars уже не требуется.)
./easyrsa init-pki ./easyrsa build-ca ./easyrsa gen-dh ./easyrsa gen-req vpn-server nopass ./easyrsa sign-req server vpn-server mkdir /etc/openvpn/keys cp -r pki/* /etc/openvpn/keys/
Теперь собственно конфиг для OpenVPN
nano /etc/openvpn/server.conf
Добавляем следующие строки:
mode server dev tun_obfs4 #протокол всегда должен быть tcp proto tcp port 1515 persist-tun persist-key ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/issued/vpn-server.crt key /etc/openvpn/keys/private/vpn-server.key dh /etc/openvpn/keys/dh.pem topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 1.0.0.1" push "redirect-gateway def1 bypass-dhcp" client-to-client keepalive 60 300 #отключаем шифрование #openvpn клиент и сервер будут ругаться что весь трафик не зашифрован #не рекомендуется указывать в случае использования openvpn без офускации data-ciphers none cipher none tun-mtu 1500 status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log verb 3 ########################################### #tls-server не указываем #файл ta.key не генерируем # #comp-lzo / compress lz4 / compress lz4-v2 не указываем #не хочет дружить с обфускацией ###########################################
Перезапускаем сервис
service openvpn restart
Теперь при вводе команды ifconfig мы должны увидеть наш интерфейс tun_obfs4. Отлично, сервер openvpn запустился.
Создаем клиента
./easyrsa build-client-full client nopass
Для подключения клиента к серверу копируем следующие файлы:
/etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/easy-rsa/pki/private/client.key
Настройка Iptables
В случае, если использование сервера предполагает только через obfs4, тогда открываем 1516 порт. Если предполагается использование мобилок и прочих устройств, где нет возможности реализовать подключение через obfs4, тогда открываем дополнительно прямой порт 1515 до OpenVPN. И разрешаем обмен трафика за nat.
iptables -I INPUT -p tcp -m tcp --dport 1516 -j ACCEPT iptables -t nat -A POSTROUTING -o ens3 -s 10.8.0.0/24 -j MASQUERADE
На этом, настройка сервера закончена.
Дебаг по серверу
shapeshifter-dispatcher в файле логов dispatcher.log всегда будет писать ошибку вида:
2023/01/13 06:34:13 [INFO]: initializing transparent proxy 2023/01/13 06:34:13 [INFO]: initializing TCP transparent proxy 2023/01/13 06:34:13 [NOTICE]: dispatcher-0.0.7-dev - launched 2023/01/13 06:34:13 [INFO]: initializing server transport listeners 2023/01/13 06:34:13 [INFO]: shapeshifter-dispatcher - initializing server transport listeners 2023/01/13 06:34:13 [ERROR]: Error resolving Extended OR address "missing port in address" 2023/01/13 06:34:13 [INFO]: shapeshifter-dispatcher - accepting connections 2023/01/13 06:34:13 [INFO]: obfs4 - registered listener: [scrubbed]:1516
С чем это связанно не известно. Но работает стабильно.
Настройка клиента для Windows
Качаем архив с билдами. Подходящий исполняемый файл shapeshifter-dispatcher-386.exe или shapeshifter-dispatcher-amd64.exe помещаем в папку C:\shapeshifter-dispatcher.
Создаем .bat файл с содержимым:
@echo off cd C:\Program Files\OpenVPN\bin openvpn-gui.exe --connect client.ovpn cd C:\shapeshifter-dispatcher\ shapeshifter-dispatcher-amd64.exe -transparent -client -state state -target 45.45.45.45:1516 -transports obfs4 -proxylistenaddr 127.0.0.1:1515 -optionsFile obfs4.json -logLevel DEBUG -enableLogging
-target 45.45.45.45:1516 -- меняем IP на свой.
В папке C:\shapeshifter-dispatcher\state создаем файл obfs4.json с содержимым:
{"cert": "uXsRLSgnHHI0JwGE+uPFRVCnGLIZesduokAAbMGy7cTxdErirK8aYWcrFol7Nr6k/c6pAw", "iat-mode": "0"}
В переменную "cert": "........" вставляем свой ключ, который сгенерировал сервер.
Осталось создать конфиг файл для клиента OpenVPN C:\Users\client\OpenVPN\config\client.ovpn и запихивает туда это:
client dev tun remote 127.0.0.1 1515 socket-flags TCP_NODELAY proto tcp persist-key persist-tun cipher none data-ciphers none tun-mtu 1500 ca C:\\Users\\client\\OpenVPN\\config\\keys\\ca.crt cert C:\\Users\\client\\OpenVPN\\config\\keys\\client.crt key C:\\Users\\client\\OpenVPN\\config\\keys\\client.key
И скормить ему файлы ключей которые мы качали ранее с сервера.
/etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/easy-rsa/pki/private/client.key
Файл .bat будет запускать OpenVPN клиент и следом обфускатор в один клик.
Наслаждаемся скрытым трафиком и весьма простой настройкой под винду.
Настройка клиента для linux ubuntu 22.04
Hidden text
В процессе...
Настройка клиента для macOS
В архиве есть готовый билд который позволит запустить OpenVPN с обфускацией. Но опыта работы с этой ОС у меня нет. Если будут желающие, статью можно будет дописать.
Настройка клиента для arm/mips/mipsle
Мне удалось скомпилировать билды для этих архитектур. Я пытался запустить их на бюджетном роутере TL-WR841N под управлением OpenWrt. Но увы не получилось. Возможно кому-то удастся запуститься на одноплатных системах типа raspberry pi. Или эти билды пригодятся в будущем...
