Я уже писал как поднять шифрованный прокси средствами ssh, и до сих пор я сам использовал именно этот метод. Однако при всех его плюсах, таких как проверенность протоколов и механизмов, и «изкоробочность» (при условии, конечно, наличия под рукой своего сервера), есть и довольно большой минус: задача проксирования для ssh не первоочередная и справляется он с ней не лучшим образом.
Поэтому я в очередной раз загуглил и нашел более адаптированное решение предназначенное именно для проксирования с шифрованием — https://shadowsocks.org/.
Это клиент-серверная штука, изначально написанная на питоне, но существующая и в переписанном, если память не изменяет, на C варианте.
Установка сервера (debian/ubuntu)
Ставим софт
Настраиваем
/etc/shadowsocks-libev/config.json
Установка клиента
Клиенты для всяческих платформ указаны на официальном сайте. Лично я для винды использовал shadowsocks-windows (портативная версия), а для линукса — shadowsocks-qt5, доступный в штатном репозитории дебиана.
Настраиваются клиенты максимально похоже — все что нужно указать: ip и порт сервера, алгоритм шифрования и пароль, указанные при настройке сервера; а также локальный порт на клиенте, к которому будут подключаться наши приложения (браузер и т.д.)
В самом приложении указываем настройки прокси:
SOCKS5
IP: 127.0.0.1
PORT: 3128 (ну или какой вы укажите при настройке клиента)
Например в файрфоксе это будет выглядеть так:
Ну и все, должно работать.
Безопасность сервера (настройка fail2ban)
Само собой мы защитили подключение паролем, но банить по айпи всяких пытающихся пролезть — лишним не будет. Докидываем 2 файла в конфиг fail2ban (если он у вас установлен)
/etc/fail2ban/filter.d/shadowsocks-libev.conf
и
/etc/fail2ban/jail.d/shadowsocks-libev.conf
(PORT — порт подключения к серверу, указанный нами в конфиге сервера)
Таким образом буквально минут за 5-10 можно сделать для себя адекватный прокси с шифрованным каналом.