Настройка SOCKS5 прокси-сервера для обхода блокировок

Master

Master

Модератор
Буквально пару недель назад развернулась настоящая эпопея с Телеграмом и его возможной блокировкой. Казалось счет шел на дни, но пока похоже конфликт на данной стадии исчерпан и Телеграм блокироватся не будет. Однако что-то мне подсказывает, что потенциальный читатель этой статьи примерно из зимы-весны 2018 года, когда вступили в силу новые пункты закона Яровой и Телеграм опять хотят заблокировать или уже это сделали.

Благо господин Дуров уже завез обновление на все платформы с поддержкой SOCKS5-прокси. Поэтому я решил написать простой минигайд о том, как сделать собственный прокси-сервер на дешевеньком VPS за 5 баксов.

Установка Dante Server на Debian.
Тема прокси для меня была весьма новой, поэтому пришлось сначала немного погуглить, чтобы разузнать что же за ПО для этого пресловутого 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

https://krasovsky.me/it/2017/07/socks5-dante/
 
Последнее редактирование модератором:
Master

Master

Модератор
Готовый конфиг для dante.
Код:
# Логи
logoutput: /var/log/socks5.log

# Интерфейс и порт для подключения к прокси
internal: eth0 port = 1080

# Интерфейс выхода в интернет
external: eth0

# Метод авторизации, без автроризации значение none
socksmethod: username
user.privileged: root
user.unprivileged: nobody
user.libwrap: nobody

# Подключение клиентов, тут можно указать IP и уровень логирования
client pass {
from: 0/0 to: 0/0
log: error connect disconnect
}

socks pass {
from: 0/0 to: 0/0
log: error connect disconnect
}
 
Сверху