Это старая редакция страницы Черновики / Руководства / V P S Open V P N Torbridgeobfs 4 S O C K S 5 за 13/09/2017 15:13.
VPS (OpenVPN + Tor bridge + obfs4 + SOCKS 5)
Часть 1. Сервер VPS
Все действия по запуску и настройке сервера будем производить с локального компьютера с ОС Windows
Создание ключей OpenSSH и копирование публичного ключа
Сервер VPS создаем на хостинге DigitalOcean https://m.do.co/c/25950fd7d1a5
В консоли управления серверами в своем профиле входим в раздел Settings
затем в раздел Security
и в подразделе SSH keys
нажимаем на кнопку Add SSH key
Открывается окно New SSH Key
На локальной машине запускаем утилиту puttygen.exe из пакета PuTTY
В меню Key
устанавливаем тип ключа SSH-2 RSA key
В поле ввода Number of bits in a generated key
вводим размер ключа 4096 бит
и нажимаем кнопку Generate
Когда генерация завершится, копируем в буфер обмена содержимое поля
Public key for pasting into OpenSSH authorized_keys file
Затем на хостинге в ранее открытом окне New SSH Key
вставляем его в поле SSH key content
Выглядит оно примерно так
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAuRLE
MZxuCjiogxmWuSk79aZh4kMsRVjjOQLbRO8hk9lR
C3u9nq1PKPxG0PXoXDt3VDGsf3w3gavP4xvxpyTX
MKG6wXVlqrNhl5xcpxJwcBxsblro1D9tNrSaTHz9
irKrZQCrYSpZ9LbyQ4QQw== rsa-key-20170830
В поле Name
задаем название ключа Main PuTTY key 4096
и сохраняем открытый ключ кнопкой Add SSH Key
Теперь этот ключ будет использоваться при создании VPS, при этом доступа к VPS по паролю уже изначально не будет. Важно, что закрытый ключ был создан не на VPS, а на локальной машине и никогда не передавался по интернету.
В окне PuTTY Key Generator
нажимаем на кнопку Save private key
и сохраняем секретный ключ в файле id_rsa.ppk
Создание VPS
В своем профиле в разделе Droplets
нажимаем на кнопку Create
и выбираем Droplets
В окне Create Droplets
выбираем
Choose an image
Distributions
Ubuntu 16.04.3 x64
Choose a size
Standard
$5/mo
Choose a datacenter region
Frankfurt 1
(смотрим страницу с пингами серверов,
также можно Amsterdam 2 или Amsterdam 3)
Add your SSH keys
Main PuTTY key 4096
(выбираем ранее сохраненный открытый ключ)
Finalize and create
Choose a hostname
ubuntu-512mb-fra1-01
(изменяем сгенерированное имя на server)
Через 55 секунд VPS будет создан,
но письмо с паролем root отправлено на почту не будет,
так как этот сервер изначально был создан для доступа только по ключам
Настройка PuTTY
Запускаем на локальной машине утилиту putty.exe
из пакета PuTTY
Слева в окне Category
последовательно выбираем следующие пункты
Пункт Session
Host Name (or IP address)
копируем сюда публичный IP адрес VPS
из раздела Droplets в консоли управления
Port
оставляем 22
Saved Sessions
указываем название server
Пункт Connection
подпункт Data
Auto-login username
указываем суперпользователя root
(после отключения root-доступа
это поле будет изменено на user)
Пункт Connection
подпункт SSH
подпункт Auth
указываем путь к приватному ключу
x:\id_rsa.ppk
Пункт Session
Нажимаем кнопку Save
и сохраняем сессию с именем server
Теперь нажимаем кнопку Open
и входим на server
от имени суперпользователя root
по закрытому ключу x:\id_rsa.ppk
Первым делом обновляем систему и для удобства файловых операций устанавливаем Midnight Commander
apt update
apt autoremove
apt upgrade
apt install mc
Затем настраиваем фаервол
Поставляемый в Ubuntu простой фаервол UFW по умолчанию не активирован
ufw status verbose
Status: inactive
Если не используется интернет протокол шестой версии, то нужно отключить его поддержку
nano /etc/default/ufw
заменив строку
IPV6=yes
строкой
IPV6=no
После этого задаем разрешающие правила
Разрешаем входящие подключения
к порту 22, сервер SSH
к порту 80 (HTTP), будет вторым портом для доступа к серверу SSH из-под рестриктивных фаерволов
к порту 443 (HTTPS), для подключения к Tor мосту
к порту 993 (IMAPS), для подключения к OpenVPN серверу
Порты указываем по именам служб как в файле /etc/services
ufw allow ssh
ufw allow http
ufw allow https
ufw allow imaps
Активируем фаервол и смотрим на созданные правила
ufw enable
ufw status numbered
В части 3 добавим еще одно разрешающее правило для подключения к obfs4proxy, номер порта которого еще не известен, он будет сгенерирован автоматически. Можно задать его принудительно директивой ServerTransportListenAddr в файле конфигурации torrc, но разработчики это не рекомендуют, так как снижается защищенность.
Защита SSH сервера от брутфорса
Хотя сервер защищен от брутфорса, так как не используется аутентификация пользователей по паролю, но соединения от атакующих серверов все равно продолжают устанавливаться и нагружать VPS, поэтому желательно их вообще не устанавливать. Служба fail2ban реагирует на незаконные попытки доступа, автоматически изменяя конфигурацию фаервола iptables на основе предопределенного количества неудачных попыток входа в систему.
Устанавливаем fail2ban
sudo apt update && sudo apt install fail2ban
Делаем копию файла конфигурации для внесения в нее собственных директив, попутно закомментировав в ней все строки
awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local
Пользовательские настройки из файла .local парсятся после системных настроек из файла .conf и переопределяют их, но файлы .local защищены от автоматического обновления из репозитория.
Открываем файл jail.local
nano /etc/fail2ban/jail.local
Вставляем в начало файла следующие директивы
(не копируем кириллические комментарии в конфиг)
[DEFAULT]
bantime = 86400 # банить на одни сутки того,
#findtime = 600 # кто в течение 10 минут
maxretry = 3 # три раза сфейлил с аутентификацией
[sshd]
enabled = true # активировать правило для ssh сервера
port = ssh,http # добавить порт 80 для ssh сервера
logpath = %(sshd_log)s
[sshd-ddos]
enabled = true
port = ssh,http
logpath = %(sshd_log)s
Применяем сделанные изменения и смотрим на результат запуска службы
systemctl stop fail2ban.service
systemctl start fail2ban.service
systemctl status fail2ban.service
Ищем строку зеленого цвета
Active: active (running)
Если выдаст active (exited) – это нормально
Проверяем, создал ли fail2ban новые правила в iptables
Создал
-N f2b-sshd
-N f2b-sshd-ddos
-A INPUT -p tcp -m multiport --dports 22,80 -j f2b-sshd
-A INPUT -p tcp -m multiport --dports 22,80 -j f2b-sshd-ddos
-A f2b-sshd -j RETURN
-A f2b-sshd-ddos -j RETURN
Тестирование защиты SSH
Создаем новый временный сервер VPS и входим на него. Выполняем несколько команд подключения к тестируемому серверу от имени несуществующего пользователя (fake) по IP адресу тестируемого сервера (111.222.333.444)
ssh fake@111.222.333.444
В первые три попытки получаем ответ
Permission denied (publickey).
А начиная с четвертой уже
ssh: connect to host 111.222.333.444 port 22: Connection refused
Защита включилась
После этого входим на тестируемый сервер через PuTTY с правильными учетными данными и выполняем команду
Убеждаемся, что fail2ban создал в iptables новое запрещающее правило для атакующего сервера
-A f2b-sshd -s 165.227.156.169/32 -j REJECT --reject-with icmp-port-unreachable
А вот и второе правило (sshd-ddos) сработало, но вызвал его уже не наш тестовый сервер
-A f2b-sshd-ddos -s 46.133.187.178/32 -j REJECT --reject-with icmp-port-unreachable
Создание и настройка регулярного пользователя
Для усиления безопасности сервера создаем регулярного пользователя
adduser user
Назначаем ему криптографически стойкий пароль
На остальные вопросы просто нажимаем клавишу Enter
Добавляем пользователя в группу sudo
Нужно разрешить ему входить на сервер по SSH, для этого копируем папку /root/.ssh/ в профиль user
Затем изменяем владельца и права доступа на скопированную папку и файл в ней
chown user:user /home/user/.ssh
chown user:user /home/user/.ssh/authorized_keys
chmod 0700 /home/user/.ssh
chmod 0600 /home/user/.ssh/authorized_keys
После этого разрешаем вход пользователей по ключу, а также подключение по SSH к порту 80, отредактировав файл sshd_config
nano /etc/ssh/sshd_config
Для этого ниже директивы Port 22 дописываем директиву Port 80, а затем удаляем символ комментария # из начала этой строки
AuthorizedKeysFile %h/.ssh/authorized_keys
Теперь останавливаем и снова запускаем службу ssh для применения изменений (текущее соединение при этом разорвано не будет)
systemctl stop ssh.service
systemctl status ssh.service
systemctl start ssh.service
systemctl status ssh.service
После чего выходим из сессии
exit
Далее будем работать от имени регулярного пользователя user
Вход от имени регулярного пользователя
Запускаем утилиту putty.exe
Справа в поле сохраненных сессий выбираем server
и нажимаем на кнопку Load
В левом окне Category выбираем следующие пункты
Пункт Connection
подпункт Data
Auto-login username
имя root
изменяем на user
Пункт Session
Нажимаем кнопку Save
и сохраняем новые настройки сессии server
Затем нажимаем кнопку Open
и входим на server
от имени пользователя user
по закрытому ключу x:\id_rsa.ppk
(теперь все команды с повышением привилегий будем выполнять через команду sudo после введения пароля пользователя user)
Для усиления безопасности запрещаем вход суперпользователя root по SSH
sudo nano /etc/ssh/sshd_config
Изменяем строку
PermitRootLogin yes
На строку
PermitRootLogin no
Для применения изменений останавливаем и снова запускаем службу ssh
sudo systemctl stop ssh.service
sudo systemctl status ssh.service
sudo systemctl start ssh.service
sudo systemctl status ssh.service
Общие замечания
Закрытый ключ доступа к серверу желательно хранить на зашифрованной флешке/разделе.
Также желательно иметь доверенное лицо, имеющее доступ к профилю на хостинге, которое сможет уничтожить ваш сервер если вы внезапно заболеете, или уедете, или будете как то иначе ограничены в свободе действий. В противном случае счета будут продолжать выставляться. Если вдобавок к этому вы не создадите криптографически стойкий пароль к своему профилю и не включите двухфакторную аутентификацию, и по этой причине его смогут взломать, то за время вашего вынужденного отсутствия успеют создать целый кластер мощных серверов и ваши счета могут увеличиться до десятков тысяч долларов https://geektimes.ru/post/247794/
Если провайдерский или корпоративный фаервол блокирует выход в интернет со всех портов, кроме 80 и 443, то придется использовать либо один из них для OpenVPN сервера, а второй для Tor моста, либо поднимать для каждого сервиса свой отдельный VPS и на каждом использовать порт 443, но это удвоит затраты на обеспечение доступа к интернету.
Если 22 порт тоже заблокирован, то можно назначить 80 для доступа по SSH. Но тогда если сразу создать VPS с доступом только по сертификату, то придется дополнительно запросить сброс пароля root, чтобы по нему войти на сервер из консоли управления на хостинге и изменить порт SSH с 22 на 80. Либо нужно создавать VPS с доступом по паролю root, а потом из консоли управления на хостинге производить смену порта и настройку доступа по сертификату.
Добавляя порт 80 для подключения по SSH, можно не отключать порт 22, а указать его вторым портом, добавив директиву Port 80 ниже директивы Port 22 в файле sshd_config и впоследствии иметь доступ из разных мест.
Часть 2. Сервер OpenVPN
Теперь установим и настроим первый сервис для приватного доступа к интернету
Установка сервера OpenVPN
Сначала устанавливаем пакет OpenVPN и пакет easy-rsa
sudo apt update && sudo apt upgrade
sudo apt install openvpn easy-rsa
Затем создаем в профиле пользователя user директорию центра сертификации и перемещаемся в нее
make-cadir /openvpn-ca && cd /openvpn-ca
Далее настраиваем переменные центра сертификации
nano vars
Для этого отредактируем некоторые строки файла vars следующим образом (можно использовать иные значения переменных, но не следует оставлять их пустыми)
export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York City"
export KEY_ORG="DigitalOcean"
export KEY_EMAIL="admin@example.com"
export KEY_OU="Community"
. . .
export KEY_NAME="server"
После этого создаем центр сертификации
На все вопросы отвечаем нажатием клавиши Enter
cd /openvpn-ca && source vars
./clean-all
./build-ca
Далее создаем сертификат, файлы шифрования и ключ для сервера. На все вопросы также отвечаем нажатием клавиши Enter, challenge password задавать не будем, а на вопросы о подписании и подтверждении создания сертификата вводим y и нажимаем клавишу Enter
Теперь все готово и можно создавать сертификат и пару ключей для первого клиента
cd /openvpn-ca && source vars
./build-key client1
Настройка сервиса OpenVPN
Выполняем копирование созданных в профиле файлов ключей и сертификатов в директорию /etc/openvpn
cd /openvpn-ca/keys && sudo cp ca.crt ca.key dh2048.pem server.crt server.key ta.key /etc/openvpn
Затем извлекаем в ту же директорию файл с примером конфигурации сервера
На основании файла примера нужно создать собственную конфигурацию сервера
sudo nano /etc/openvpn/server.conf
Для этого нужно отредактировать следующие директивы
(не копируем кириллические комментарии в конфиг)
port 993 # изменяем порт по умолчанию
push "redirect-gateway def1 bypass-dhcp" # раскомментируем строку
push "dhcp-option DNS 208.67.222.222" # раскомментируем строку
push "dhcp-option DNS 208.67.220.220" # раскомментируем строку
tls-auth ta.key 0 # This file is secret # раскомментируем строку
key-direction 0 # добавляем строку
cipher AES-128-CBC # раскомментируем строку
auth SHA256 # добавляем строку
user nobody # раскомментируем строку
group nogroup # раскомментируем строку
OpenVPN по умолчанию работает на порту 1194 по протоколу UDP. Если есть опасение о возможном его блокировании провайдером или корпоративным фаерволом, то можно выбрать другой порт. Желательно использовать распространенные порты, изначально предназначенные для зашифрованного соединения
HTTPS 443
POP3S 995
SMTPS 465
IMAPS 993
IMAP4 585
Менее предпочтительны распространенные порты, не предназначенные для зашифрованного соединения
HTTP 80 (дополнительный 8080)
POP3 110
SMTP 25
IMAP 143
IMAP3 220
Порты, используемые Apple Podcast Capture
HTTPS 8170
HTTP 8171
Поискать подходящие порты можно по этим ссылкам
https://ru.adminsub.net/tcp-udp-port-finder/imap
https://www.iana.org/assignmen.....s-port-numbers.xhtml
При необходимости можно изменить протокол на TCP (директива proto tcp), но он добавит в трафик избыточность и несколько замедлит скорость соединения. При выборе TCP также нужно изменить директиву dev tun на dev tap, но этот вариант я не тестировал, поэтому ищите информацию отдельно. Если обеспечение высокой скорости соединения не является критически важным, то можно последовать рекомендациям сообщества OpenVPN и изменить в директиве cipher AES-128-CBC значение на 256 и протестировать приемлемость скорости соединения.
Далее настраиваем сетевую конфигурацию сервера
sudo nano /etc/sysctl.conf
Для этого раскомментируем одну строку
net.ipv4.ip_forward=1
Чтобы применить настройки к текущей сессии выполняем команду
Настройка правил фаервола
Для маскарадинга соединений клиентов нужно настроить правила фаервола
sudo nano /etc/ufw/before.rules
Добавляем в начало файла нижеприведенные строки, начиная со строки # START OPENVPN RULES по строку # END OPENVPN RULES.
Теперь разрешаем перенаправляемый трафик по умолчанию и применяем изменения
sudo ufw default allow forward
sudo ufw disable
sudo ufw enable
Затем запускаем сервер OpenVPN, указав имя файла конфигурации (/etc/openvpn/server.conf) в качестве переменной (@server) в конце имени юнита systemd, и проверяем результат
sudo systemctl start openvpn@server
sudo systemctl status openvpn
В выдаче должна присутствовать строка зеленого цвета
Active: active (running)
Если выдаст active (exited) – это нормально
Далее проверяем доступность интерфейса OpenVPN
ip addr show tun0
Выдача должна содержать подобные строки
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
Теперь задаем автоматическую активацию сервиса при загрузке сервера
sudo systemctl enable openvpn@server
Настройка клиентов
Создаем инфраструктуру настройки клиентов
В базовой конфигурации отредактируем следующие директивы
(не копируем кириллические комментарии в конфиг)
remote ххх.ххх.ххх.ххх 993 # Указываем IP адрес VPS и порт 993
user nobody # раскомментируем строку
group nogroup # раскомментируем строку
;ca ca.crt # закомментируем строку
;cert client.crt # закомментируем строку
;key client.key # закомментируем строку
cipher AES-128-CBC # добавляем строку как в файле /etc/openvpn/server.conf
auth SHA256 # добавляем строку как в файле /etc/openvpn/server.conf
key-direction 1 # добавляем строку
;script-security 2 # добавляем закомментированную строку (для клиентов на Linux)
;up /etc/openvpn/update-resolv-conf # добавляем закомментированную строку
;down /etc/openvpn/update-resolv-conf # добавляем закомментированную строку
Далее создаем скрипт для генерации файлов конфигурации
nano /client-configs/make_config.sh
Вставляем в созданный файл скрипта следующие строки
(nano подсветит его синтаксис)
Теперь делаем файл скрипта исполняемым файлом
chmod 700 /client-configs/make_config.sh
Сгенерируем конфигурацию для своего первого клиента
(можно последовательно генерировать для нескольких клиентов, задавая им новые имена)
cd /client-configs
./make_config.sh client1
ls /client-configs/files
Доставку конфигурации с сервера клиенту осуществляем, используя утилиту pscp.exe из пакета PuTTY
Запускаем на локальной машине командный интерпретатор cmd
И устанавливаем временную переменную пути к исполняемым файлам PuTTY
set PATH=x:\PuTTY;%PATH%
Затем получаем файл конфигурации с сервера командой
pscp server:/home/user/client-configs/files/client1.ovpn x:\client1.ovpn
pscp – команда трансфера файлов
server – имя сессии, сохраненной в PuTTY
/home/user/client-configs/files/client1.ovpn – файл источник на сервере
x:\client1.ovpn – целевой файл на локальной машине
Установка файла конфигурации клиента
Устанавливаем клиентский профиль OpenVPN на Windows
Название соединения OpenVPN соответствует названию .ovpn файла: client1
Клиент для работы с OpenVPN для Windows загружаем со страницы загрузок OpenVPN
Выбираем необходимую нам версию установщика
Установка OpenVPN требует администраторской учетной записи
После установки OpenVPN копируем .ovpn файл в эту директорию
C:\Program Files\OpenVPN\config
При запуске OpenVPN клиент должен автоматически увидеть наш профиль
Клиент OpenVPN требует запуска с правами администратора
Установление VPN соединения
Запуск клиента OpenVPN просто помещает приложение в системный трей, при этом само соединение не устанавливается автоматически
Для установки соединения делаем щелчок правой кнопкой мыши на иконке OpenVPN в системном трее
В открывшемся контекстном меню выбираем client1 (это наш профиль client1.ovpn) и нажимаем Connect
Открывается окно статуса, которое будет отображать лог соединения
При завершении соединения отображается соответствующее сообщение
Закрыть VPN соединение можно так же: сделать щелчок правой кнопкой мыши на иконке OpenVPN в системном трее, выбрать профиль клиента и нажать Disconnect
Тестирование VPN соединения
Без установки соединения с VPN открываем браузер и заходим на сайт https://www.dnsleaktest.com/
Этот сайт возвращает IP адрес, назначенный нашим интернет провайдером
Для того чтобы проверить, какие DNS серверы используются, нажимаем на Extended Test
Теперь устанавливаем соединение, используя VPN клиент, и обновляем страницу в браузере
Теперь возвращаемый IP адрес соответствует нашему VPS
Нажимаем Extended Test ещё раз и видим, что мы используем DNS серверы нашего VPN
Отзыв клиентских сертификатов
Для предотвращения доступа клиента к серверу VPN необходимо отозвать клиентский сертификат
Для этого заходим в директорию центра сертификации на сервере и выполняем команды
cd /openvpn-ca
source vars
Далее используем команду revoke-full с именем клиента, сертификат которого хотим отозвать
./revoke-full client3
Вывод результатов работы этой команды будет оканчиваться ошибкой 23. Это нормально. В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией
Перемешаем этот файл в директорию /etc/openvpn
sudo cp /openvpn-ca/keys/crl.pem /etc/openvpn
Затем открываем файл конфигурации сервера OpenVPN
sudo nano /etc/openvpn/server.conf
И добавляем в конец файла строку
crl-verify crl.pem
Теперь сервер OpenVPN будет проверять список отозванных сертификатов каждый раз, когда кто-то устанавливает соединение с сервером
Перезапускаем OpenVPN для завершения процесса отзыва сертификата
sudo systemctl restart openvpn@server
Теперь клиент не сможет устанавливать соединение с сервером OpenVPN, используя старый сертификат
Для отзыва дополнительных сертификатов выполняем следующее
Генерируем новый список отозванных сертификатов, используя команду source vars в директории /openvpn-ca и выполняя команду revoke-full с именем клиента
Копируем новый список отозванных сертификатов в директорию /etc/openvpn, перезаписывая им старый список
Перезапускаем сервис OpenVPN
Эта процедура может быть использована для отзыва любых созданных ранее сертификатов
Часть 3. Tor мост с обфускацией трафика
Организуем еще один канал для приватного доступа к интернету
Установка пакетов Tor и obfs4proxy
Сначала нужно добавить открытый ключ Torproject с сервера ключей
Затем добавляем репозитории Torproject
sudo nano /etc/apt/sources.list
Для этого вставляем в конец файла такие строки
После чего обновляем список пакетов, а затем систему
sudo apt update && sudo apt upgrade
Далее устанавливаем последнюю стабильную версию Tor и obfs4proxy
sudo apt install tor deb.torproject.org-keyring obfs4proxy
Теперь служба Tor установлена и уже работает
Проверяем состояние службы
sudo systemctl status tor.service
В выдаче должна присутствовать одна строка зеленого цвета
Active: active (running)
Если выдаст active (exited) – это нормально
А также такие строки
enabled; vendor preset: enabled
и
status=0/SUCCESS
Этой командой можно дополнительно удостовериться, будет ли служба запущена после перезагрузки системы
sudo systemctl is-enabled tor.service
Она должна выдавать строку
enabled
Активировать же запуск при загрузке деактивированной службы можно командой
systemctl enable tor.service
Настройка параметров службы Tor
Далее необходимо настроить файл конфигурации для работы службы в качестве моста с обфускацией трафика
sudo nano /etc/tor/torrc
Вставляем в начало поставляемого в пакете файла следующие директивы
(не копируем кириллические комментарии в конфиг)
BridgeRelay 1
Nickname eki0tl4w6nr1yxa38p2 # рандомная строка до 19 символов
ContactInfo RandomPerson
ExitPolicy reject *:*
PublishServerDescriptor 0
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
SocksPort 0
ORPort 443
ExtORPort auto
Log notice file /var/log/tor/log
TruncateLogFile 1
AvoidDiskWrites 1
HeartbeatPeriod 24 hours
Для ORPort также как и для OpenVPN сервера будем использовать распространенные порты, изначально предназначенные для зашифрованного соединения
PublishServerDescriptor 0 означает не публиковаться нигде, это наш личный мост
Для фиксации одного бага нужно настроить AppArmor
sudo nano /etc/apparmor.d/abstractions/tor
В файле абстракции изменяем 27 строку
Было
/usr/bin/obfs4proxy PUx,
Стало
/usr/bin/obfs4proxy ix,
Чтобы применить все сделанные изменения перезагружаем систему
Получение настроек обфускации
Заново входим на сервер через PuTTY и копируем файл с настройками в профиль пользователя user
sudo cp /var/lib/tor/pt_state/obfs4_bridgeline.txt /home/user/obfs4_bridgeline.txt
Затем изменяем владельца и права доступа к этому файлу
sudo chown user:user /home/user/obfs4_bridgeline.txt
chmod 0777 /home/user/obfs4_bridgeline.txt
После этого запускаем на локальной машине командный интерпретатор cmd и устанавливаем временную переменную пути к исполняемым файлам PuTTY
set PATH=x:\PuTTY;%PATH%
Файл с настройками обфускации получаем с сервера, используя утилиту pscp.exe из пакета PuTTY
pscp server:/home/user/obfs4_bridgeline.txt x:\obfs4_bridgeline.txt
pscp – команда трансфера файлов
server – имя сессии, сохраненной в PuTTY
/home/user/obfs4_bridgeline.txt – файл источник на сервере
x:\obfs4_bridgeline.txt – целевой файл на локальной машине
После получения копии файла удаляем файл источник из домашней директории на сервере
rm /home/user/obfs4_bridgeline.txt
Затем находим в логе номер порта обфускатора
sudo grep obfs4 /var/log/tor/log
Строка выдачи содержит искомый случайно сгенерированный номер порта 36842 (он кэшируется в системе для дальнейшего использования и возобновляется после перезагрузки, но при первоначальной установке или переустановке генерируется заново, чтобы пользователи мостов в сети имели максимально различные порты)
Registered server transport 'obfs4' at '[::]:36842'
Открываем в фаерволе этот порт для входящих подключений, добавив новое правило к правилам, созданным в части 1. Затем применяем сделанные изменения
sudo ufw allow 36842
sudo ufw disable
sudo ufw enable
Использование моста и обфускатора
Запускаем Tor Browser
В окне Tor Status нажимаем кнопку Open Settings
В окне Tor Network Settings нажимаем кнопку Configure
На вопрос, имеется ли цензура, отвечаем Yes
В окне конфигурации моста в поле ввода Enter custom bridges вводим IP адрес VPS и порт 443
Если локальный прокси отсутствует, то нажимаем Connect (если используется, то указываем его)
Заходим на https://pgpru.com/ и проверяем созданную цепочку
Первым хопом значится Unknown country (IP unknown)
Теперь открываем ранее полученный с сервера файл с настройками обфускации obfs4_bridgeline.txt
Вместо масок <IP ADDRESS>:<PORT> вписываем IP адрес VPS и порт обфускатора 36842
А вместо маски <FINGERPRINT> вписываем fingerprint (40 символов) своего моста, который получаем этой командой в терминале сервера (значение fingerprint копируем правой кнопкой мыши в окне терминала PuTTY, предварительно выделив протяжкой мыши по строке)
sudo cat /var/lib/tor/fingerprint
В окне конфигурации моста в поле ввода Enter custom bridges заменяем ранее введенные IP адрес VPS и порт 443 на управляющую строку, полученную в результате описанной выше модификации файла obfs4_bridgeline.txt
После этого перезапускаем Tor Browser
Заново входим на https://pgpru.com/ и проверяем созданную цепочку
Теперь первым хопом значится Bridge: obfs4 (Germany)
Обфускация трафика используется нашим мостом
Создаем отдельные копии Tor Browser'а: одну для соединения через обычный мост, вторую для соединения через мост с дополнительной обфускацией трафика
Часть 4. OpenSSH туннель в роли SOCKS 5 прокси
Если все, что вам нужно – это сокрытие вашего серфинга в интернете, то есть простая альтернатива: туннель SOCKS 5 прокси
SOCKS прокси представляет собой SSH туннель, через который конкретные приложения направляют свой трафик на сервер, а затем прокси сервер перенаправляет их трафик далее в интернет
В отличие от VPN, SOCKS прокси должен быть настроен в приложении на клиентской машине и может быть настроен без каких-либо специальных клиентских агентов
Настройка туннеля
Запускаем PuTTY и загружаем ранее сохраненную сессию подключения к своему VPS по SSH
Слева в меню выбираем пункт Connection
подпункт SSH
подпункт Tunnels
Справа в разделе Add new forwarded port
в поле Source port
вводим порт из диапазона 1025-65536,
например 1080
Активируем радиокнопку Dynamic
Затем нажимаем кнопку Add
В поле Forwarded ports
отобразится значение D1080
Возвращаемся в пункт Session
и сохраняем новую сессию с именем socks
Нажимаем кнопку Open
и устанавливаем соединение с сервером
Сворачиваем окно PuTTY, но не закрываем его. Оно должно оставаться открытым на протяжении всего сеанса. В этом неудобство данного метода
Использование туннеля
Теперь мы имеем установленный SOCKS 5 туннель через SSH и должны настроить браузер для его использования
Открываем сетевые настройки Firefox и в ручном режиме указываем, что соединяемся с SOCKS 5 сервером, где адрес сервера 127.0.0.1 (или localhost) и порт 1080
Отмечаем галочку Отправлять DNS запросы через прокси при использовании SOCKS 5
В завершение заходим на сайт https://www.dnsleaktest.com/, который возвращает IP адрес нашего VPS