Я уже писал как поднять шифрованный прокси средствами ssh, и до сих пор я сам использовал именно этот метод. Однако при всех его плюсах, таких как проверенность протоколов и механизмов, и «изкоробочность» (при условии, конечно, наличия под рукой своего сервера), есть и довольно большой минус: задача проксирования для ssh не первоочередная и справляется он с ней не лучшим образом.
Поэтому я в очередной раз загуглил и нашел более адаптированное решение предназначенное именно для проксирования с шифрованием — https://shadowsocks.org/.
Это клиент-серверная штука, изначально написанная на питоне, но существующая и в переписанном, если память не изменяет, на C варианте.
Установка сервера (debian/ubuntu)
Ставим софт
apt install shadowsocks-libev rng-tools
Настраиваем
- HRNGDEVICE=/dev/urandom
- {
- "server":"SERVER_IP",
- "server_port":PORT,
- "local_port":1080,
- "password":"PA$$W0RD",
- "timeout":60,
- "method":"aes-128-gcm"
- }
Установка клиента
Клиенты для всяческих платформ указаны на официальном сайте. Лично я для винды использовал shadowsocks-windows (портативная версия), а для линукса — shadowsocks-qt5, доступный в штатном репозитории дебиана.
Настраиваются клиенты максимально похоже — все что нужно указать: ip и порт сервера, алгоритм шифрования и пароль, указанные при настройке сервера; а также локальный порт на клиенте, к которому будут подключаться наши приложения (браузер и т.д.)
В самом приложении указываем настройки прокси:
SOCKS5
IP: 127.0.0.1
PORT: 3128 (ну или какой вы укажите при настройке клиента)
Например в файрфоксе это будет выглядеть так:
Безопасность сервера (настройка fail2ban)
Само собой мы защитили подключение паролем, но банить по айпи всяких пытающихся пролезть — лишним не будет. Докидываем 2 файла в конфиг fail2ban (если он у вас установлен)
- [INCLUDES]
- before = common.conf
- [Definition]
- _daemon = ss-server
- failregex = ^\w+\s+\d+ \d+:\d+:\d+\s+%(__prefix_line)sERROR:\s+failed to handshake with <HOST>: authentication error$
- ignoreregex =
- datepattern = %%Y-%%m-%%d %%H:%%M:%%S
и
- [shadowsocks-libev]
- enabled = true
- filter = shadowsocks-libev
- port = PORT
- logpath = /var/log/syslog
- maxretry = 3
- findtime = 3600
- bantime = 3600
(PORT — порт подключения к серверу, указанный нами в конфиге сервера)
Таким образом буквально минут за 5-10 можно сделать для себя адекватный прокси с шифрованным каналом.