Thank you for reading this post, don't forget to subscribe!
1. Установка
Добавляем репозиторий (тут и далее все действия от root, либо подставляйте sudo перед командой):
1 |
yum <span class="hljs-keyword">install</span> <a href="http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm"><span class="hljs-keyword">http</span>://mirror.ghettoforge.org/distributions/gf/gf-<span class="hljs-keyword">release</span>-latest.gf.el7.noarch.rpm</a> |
Устанавливаем пакет
1 |
<span class="hljs-attribute">yum</span> --enablerepo=gf-plus install dante-server |
Создаём каталог для pid-файла
1 |
mkdir /<span class="hljs-keyword">var</span>/run/sockd |
Бэкапим стандартный конфиг
1 |
<span class="hljs-attribute">mv</span> /etc/sockd.conf /etc/sockd.conf.orig |
2. Настройка конфига
В какой-то момент у Dante изменился состав опций конфига. В интернете не понятно, о какой версии идёт речь. Старые опции не работают на новой версии. Это добавляет путаницы. Эта инструкция точно работает для версии Dante v1.4.1. Узнать версию уже установленной программы можно так:
1 |
<span class="hljs-attribute">sockd</span> -v |
Версия программы и потребление ресурсов сервера:
Конфиг для работы на порту 443 (стандартный порт для HTTPS). Это подойдёт вам, если на этом же сервере у вас не работает какая-нидудь другая программа на этом же порту (например, web-сервер Apache или Nginx или любой другой).
1 |
<span class="hljs-attribute">nano</span> /etc/sockd.conf |
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
user.privileged: root user.unprivileged: nobody # The listening network interface or address. internal: 0.0.0.0 port=443 #internal: 0.0.0.0 port=1080 # можно указать несколько портов, по умолчанию 1080 # The proxying network interface or address. external: eth0 logoutput: syslog stdout /var/log/sockd.log errorlog: /var/log/sockd_err.log # socks-rules determine what is proxied through the external interface. # The default of "none" permits anonymous access. socksmethod: username # client-rules determine who can connect to the internal interface. # The default of "none" permits anonymous access. clientmethod: none client pass { from: 0.0.0.0/0 to: 0.0.0.0/0 log: connect disconnect error } socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 log: connect disconnect error } |
[/codesyntax]
Этот конфиг делает так, что клиенты смогут подключаться к вашему прокси по имени и паролю пользователей (активных) вашего сервера. Т.е. нужно завести отдельных пользователей, которые собой будут являть данные для подключения к прокси.
Для настройки работы IPv6 есть вот такая страница в помощь - http://www.inet.no/dante/doc/1.4.x/config/ipv6.html. У меня получилось добавить (но это не точно) поддержку IPv6 с помощью добавления:
1 |
<span class="hljs-keyword">internal</span> <span class="hljs-number">0</span>:<span class="hljs-number">0</span>:<span class="hljs-number">0</span>:<span class="hljs-number">0</span>:<span class="hljs-number">0</span>:<span class="hljs-number">0</span>:<span class="hljs-number">0</span>:<span class="hljs-number">0</span> port=<span class="hljs-number">443</span> |
И заменить блок
1 2 3 4 |
<span class="hljs-selector-tag">client</span> <span class="hljs-selector-tag">pass</span> { <span class="hljs-attribute">from</span>: <span class="hljs-number">0</span>/<span class="hljs-number">0</span> to: <span class="hljs-number">0</span>/<span class="hljs-number">0</span> log: connect disconnect error } |
на блок
1 2 3 4 |
<span class="hljs-selector-tag">client</span> <span class="hljs-selector-tag">pass</span> { <span class="hljs-attribute">from</span>: <span class="hljs-number">0.0</span>.<span class="hljs-number">0.0</span>/<span class="hljs-number">0</span> to: <span class="hljs-number">0.0</span>.<span class="hljs-number">0.0</span>/<span class="hljs-number">0</span> log: connect disconnect error } |
3. Добавляем пользователей
Добавляем пользователей аккуратно, чтобы им не было разрешено ничего лишнего на сервере (например, подключаться по SSH) :
1 |
useradd --shell /usr/sbin/nologin proxyuser |
1 |
passwd proxyuser |
Так можно завести общего пользователя (в данном случае логин: proxyuser), данные которого можно использовать самому и передать близким людям, которым можно доверить это навсегда. Для друзей лучше заводить отдельных пользователей аналогичным образом. В будущем, если нужно будет отлучить пользователя от доступа к прокси, достаточно будет заблокировать пользователя на сервере.
Можно задать пароль пользователю со специальным ключом для автоматической деактивации пользователя по прошествии заданного времени (демо-режим своеобразный настроить):
1 |
<span class="hljs-attribute">passwd</span> --inactive10 testuser |
А так можно заблокировать определённого пользователя:
1 |
passwd --<span class="hljs-keyword">lock</span> testuser |
У команды создания паролей много разных полезных опций.
Если не потребуется отслеживать частоту подключений пользователей, то в конфиге можно заменить строки:
1 |
<span class="hljs-keyword">log</span>: <span class="hljs-keyword">connect</span> disconnect error |
На
1 |
<span class="hljs-built_in">log</span>: error |
В этом случае в лог /var/log/sockd.log будет складываться меньше записей.
4. Запуск прокси-сервера
Запуск и управление производится стандартным образом с помощью systemd. Запуск:
1 |
<span class="hljs-selector-tag">systemctl</span> <span class="hljs-selector-tag">start</span> <span class="hljs-selector-tag">sockd</span><span class="hljs-selector-class">.service</span> |
Добавление в автозапуск (на случай перезагрузки сервера):
1 |
systemctl <span class="hljs-built_in">enable</span> sockd.service |
Перезапуск:
1 |
systemctl restart sockd.service |
5. Прочие разрешения для Dante на сервере
На удивление, для SeLinux не потребовалось никаких дополнительных действий.
Для файервола нужно разрешить порт 443:
1 |
firewall-cmd --zone=<span class="hljs-keyword">public</span> --<span class="hljs-keyword">add</span>-service=https |
1 |
firewall-cmd --zone=<span class="hljs-keyword">public</span> --permanent --<span class="hljs-keyword">add</span>-service=https |
Если бы порт был другой, то правило выглядело бы иначе:
1 |
firewall-cmd --permanent --zone=<span class="hljs-keyword">public</span> --<span class="hljs-keyword">add</span>-port=<span class="hljs-number">1080</span>/tcp |
1 |
firewall-cmd <span class="hljs-comment">--reload</span> |
В процессе настройки прокси сервера возникали случаи, когда перезапускаемый сервис отваливался с ошибкой "Access denied". Помогла статья "systemd in Fedora 22: Failed to restart service: Access Denied", а конкретно, - переинициализация сервисов:
1 |
<span class="hljs-attribute">systemctl</span> daemon-reexec |
6. Проверка работы
Для начала можно проверить доступность вашего прокси-сервера с другого компьютера так (вместо PASS и SERVER_IP подставить ваши значения):
1 |
<span class="hljs-attribute">curl</span> -v -x socks5://proxyuser:PASS<span class="hljs-variable">@SERVER_IP</span>:<span class="hljs-number">443</span> https://ya.ru |
Если тут соединение удалось, значит и в других программах работать будет. Вот, например, можно сделать ссылку для автоматической настройки прокси в Telegram: https://t.me/socks?server=SERVER_IP&port=443&user=proxyuser&pass=PASS (а если домен t.me у вашего провайдера забанен, то можно попробовать http://t-do.ru/socks?server=SERVER_IP&port=443&user=proxyuser&pass=PASS)
Либо тоже самое набрать вручную в настройках: