SOCKS5 Proxy: поднимаем свой сервер за 5 минут

Содержание
Хочу вам продемонстрировать поднятие proxy сервера на своем выделенном сервере. Иногда бывает необходимо пропустить трафик одного приложения через удаленный сервер и использование VPN в таком случае не целесообразно и не удобно, тем более если это на постоянной основе.
Гораздо легче один раз прописать в приложении идентификационные данные proxy сервера и забыть об этом. Так сказать Fire and Forget. Хотя в другой ситуации когда нам требуется перенаправить весь трафик — то VPN просто незаменим.
Почему выбран Proxy SOCKS5
В отличие от HTTP прокси-серверов, SOCKS передаёт все данные от клиента, ничего не добавляя от себя, то есть с точки зрения конечного сервера, данные, полученные им от SOCKS-прокси, идентичны данным, которые клиент передал бы напрямую, без проксирования. SOCKS более универсален, он не зависит от конкретных протоколов уровня приложений (7-го уровня модели OSI) и оперирует на уровне TCP-соединений (4‑й уровень модели OSI). SOCKS 5-й версии поддерживает аутентификацию пользователя.
Преимущества
- Постоянный и Надежный Proxy сервер. Уверенность в том что наши данные на другом конце провода не будут кем-то расшифровываться.
- Производительность — высокая пропускная способность и низкое время отклика.
- Полный контроль.
Два основных компонента рассматриваемых в этой статье это: Debian 9 и Dante-Server. В место Debian у вас может быть любая Linux OS, а Dante был выбран за не имением достойной альтернативы на мой взгляд.
Первым делом подключаемся по SSH к нашему серверу. Обновляем систему и пакеты:
apt update && apt dist-upgrade
Ставим Dante-Server
apt install dante-server
Сразу же после установки открываем и правим конфигурационный файл.
nano /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:[email protected]:8467 ident.me; echo
Вместо нашего реального адреса, команда должна выдать IP прокси сервера.