Настройка простого SOCKS5 прокси-сервера для личного использования
Источник: https://krasovsky.me/it/2017/07/socks5-dante/
Dante Project: - https://www.inet.no/dante/
Настройка простого SOCKS5 прокси-сервера для личного использования
Буквально пару недель назад развернулась настоящая эпопея с Телеграмом и его возможной блокировкой. Казалось счет шел на дни, но пока похоже конфликт на данной стадии исчерпан и Телеграм блокироватся не будет. Однако что-то мне подсказывает, что потенциальный читатель этой статьи примерно из зимы-весны 2018 года, когда вступили в силу новые пункты закона Яровой и Телеграм опять хотят заблокировать или уже это сделали.
Благо господин Дуров уже завез обновление на все платформы с поддержкой SOCKS5-прокси. Поэтому я решил написать простой минигайд о том, как сделать собственный прокси-сервер на дешевеньком VPS за 5 баксов.
Приступим!
Тема прокси для меня была весьма новой, поэтому пришлось сначала немного погуглить, чтобы разузнать что же за ПО для этого пресловутого SOCKS5 нужно вообще. Выбор быстро пал на Dante в виду его невероятно простой настройки.
За основу теперь я беру Debian 9, так как Debian 8 морально устарел. Ставим dante-server:
sudo apt-get install dante-server
Сходу демон Dante, danted, почему-то падает. Видимо косяк мейнтейнера пакета. Так что сразу лезем в конфиг:
sudo nano /etc/danted.conf
---
logoutput: stderr
internal: eth0 port = 1080
external: eth0
socksmethod: username
user.privileged: root
user.unprivileged: nobody
user.libwrap: nobody
client pass {
from: 0/0 to: 0/0
log: error
}
socks pass {
from: 0/0 to: 0/0
log: error
}
Перед вами откроется подробный конфиг с множеством комментариев. В принципе вы можете просто всё удалить и вставить туда мой вариант, представленный выше. Но можно изучить его, раскомментировать и исправить нужные параметры.
Немного подробностей
socksmethod: username -- для авторизации по системному пользователю. Разумеется можно вообще написать none, но тогда ваш сервер рискует попасть в публичные "бесплатные списки". Можно использовать хитрый механизм pam c целым RADIUS-сервером, который будет авторизировать сотни пользователей. Но всё же моей целью был личный сервер для себя и друзей, а не высоконагруженный продакшен-сервер на тысячи пользователей
user.privileged: root -- вместо дефолтного proxy ставим root, потому что нам нужно читать файл /etc/passwd для авторизации по системному пользователю.
А вот блоки client pass и socks pass и мутят всю магию прокси. Разумеется, можно покурить матчасть и поставить гору различных умных правил, но мне нужен был простой прокси, который в случае чего будет работать не только для Телеграма.
Конфиг готов?
Ctrl^O -- сохраняем конфиг, Ctrl^X -- выходим из nano. Теперь будет разумным сделать отдельного пользователя, особенно если вы не хотите чтобы пароль от вашего VPS узнали друзья, подключаясь к вашему прокси. Как верно заметил читатель Sergey Belov, необходимо добавить ключ --shell /usr/sbin/nologin, чтобы на вашем сервере не могли шариться через SSH по этому логину.
sudo useradd --shell /usr/sbin/nologin proxyuser
sudo passwd proxyuser
[Вводим дважды пароль]
Готово, пользователь создан. Осталось только перезапустить службу:
sudo systemctl restart danted
Всего нужно будет помнить 4 настройки: IP-адрес вашего сервера, порт (в моем конфиге 1080), логин (в моем примере proxy) и пароль, который вы этому пользователю указали. Коннект должен пройти удачно.
Небольшая заметка
Я немного перфекционист и решил сделать субдомен для прокси, чтобы моим знакомым и друзьям не нужно было запоминать странный IP-адрес. Однако столкнулся с забавной сложностью. Дело в том, что в домене я прописал A- и AAAA-записи сразу, так как сервер поддерживал IPv6. Однако изначально я настроил сервер Dante без поддержки IPv6. В итоге мой ПК пытался подключится по умолчанию через IPv6, но не получал ответа. Возможно кому-то это пригодится, потому что я потратил на это не мало часов...
P.S. Ссылки на прокси в Телеграме можно распостранять в интересном формате: https://t.me/socks?server=IP&port=PORT&user=USERNAME&pass=PASSWORD