Собственный SOCKS5 Proxy сервер
@webware
Введение
Приветствую всех на форуме. Решил написать небольшую статью про Proxy Server. Хочу вам продемонстрировать поднятие proxy сервера на своем выделенном сервере (VPS). Иногда бывает необходимо пропустить трафик одного приложения через удаленный сервер и использование VPN в таком случае не целесообразно и не удобно, тем более если это на постоянной основе. Гораздо легче один раз прописать в приложении идентификационные данные proxy сервера и забыть об этом. Так сказать Fire and Forget. Хотя в другой ситуации когда нам требуется перенаправить весь трафик - то VPN просто незаменим.
Основная часть
Мы будем делать SOCKS5 Proxy
В отличие от HTTP прокси-серверов, SOCKS передаёт все данные от клиента, ничего не добавляя от себя, то есть с точки зрения конечного сервера, данные, полученные им от SOCKS-прокси, идентичны данным, которые клиент передал бы напрямую, без проксирования. SOCKS более универсален, он не зависит от конкретных протоколов уровня приложений (7-го уровня модели OSI) и оперирует на уровне TCP-соединений (4‑й уровень модели OSI). SOCKS 5-й версии поддерживает аутентификацию пользователя.
Таким образом мы получаем:
- Постоянный и Надежный Proxy сервер. Уверенность в том что наши данные на другом конце провода не будут кем-то расшифровываться.
- Производительность - высокая пропускная способность и низкое время отклика.
- Полный контроль.
Ну что же, начнем
Два основных компонента рассматриваемых в этой статье это: Debian 9 и Dante-Server. В место Debian у вас может быть любая Linux OS, а Dante был выбран за не имением достойной альтернативы на мой взгляд.
Поехали, первым делом подключаемся по SSH к нашему серверу. В своих предыдущих статьях я показывал аренду и настройку VPS.
Обновляем систему и пакеты.
apt update && apt dist-upgrade
И ставим Dante-Server
apt install dante-server
Сразу же после установки открываем и правим конфигурационный файл.
vi /etc/danted.conf
logoutput: stderr
internal: eth0 port = 8467
external: eth0
socksmethod: username
user.privileged: root
user.unprivileged: nobody
user.libwrap: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

logoutput: stderr - программ будет писать логи только о критических ошибках. Для отладки можно добавить параметр syslog чтобы ввелись логи подключения в /etc/log/syslog.
internal: eth0 port = 8467 - листенер сервера на нестандартном порту на eth0.
external: eth0 - исходящий трафик будет проходить через интерфейс eth0.
socksmethod: username - для авторизации по локальному пользователю.
user.privileged: root - чтобы dante-server смогла читать файл /etc/passwd для авторизации пользователей.
client pass и socks pass - доступ ото всюду, куда угодно.
Подробнее о директивах конфигурации можете прочитать в самом файле или в сети.
Добавим пользователя для установки соединения с нашим proxy, чтобы не использовать рабочих системных пользователей.
useradd -s /bin/false codebyuser && passwd codebyuser
Разрешаем TCP порт 8467 который должен слушаться.
#Если вы пользуетесь iptables: iptables -A INPUT -p tcp --dport 8467 -j ACCEPT #Если UFW ufw allow 8467/tcp
Запускаем dante-server и добавляем в авто-загрузку.
systemctl restart danted systemctl enable danted
Проверяем соединение с proxy на нашей локальной Linux машине:
curl --socks5 codebyuser:codebypass@11.22.33.44:8467 ident.me; echo
Вместо нашего реального адреса, команда должна выдать IP прокси сервера.


Как видно все работает. Можно смело прописывать конфиг в приложение на котором требуется использование прокси.
На этом все, всем спасибо за внимание!