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. Или эти билды пригодятся в будущем...