Socks5 proxy на CentOS 7
Введение
Всё чаще возникает необходимость отстаивать базовые конституционные права. Эта статья о том, как защитить право на тайну переписки. Самый базовый и простой вариант - настроить прокси соединение (вариант соединения настраивается отдельно в каждом приложении). Это само по себе не даст гарантии, что вашу переписку не прочтут злые хакеры, но позволит "притвориться", что вы ходите на какой-то обычный сайт по HTTPS. Хотя на самом деле это может быть вовсе не сайт, а сервер, например, Telegram.Чтобы проделать всё описанное в статье, нужно иметь подопытный сервер с CentOS 7 (хотя инструкция подойдёт и для других ОС GNU/Linux), например, купленный VDS или VPS в какой-нибудь стране, где неукоснительно соблюдаются права человека.
Установка и настройка Dante
Выбор пал на Dante прокси из-за того, что у него оказался готовый пакет для CentOS (в инструкциях к другим прокси рекомендовалось компилировать из исходников). Сначала настройку делал по статье "Установка Dante Socks proxy на Centos 7". Но оказалось, что там не хватает нескольких важных моментов. Также были полезными статьи "Настройка простого SOCKS5 прокси-сервера для личного использования" и "Установка и использование Dante в качестве сервера Socks5 на Ubuntu 16". Итак, установка с нуля (все шаги из той статьи, плюс дополнения):1. Установка
Добавляем репозиторий (тут и далее все действия от root, либо подставляйте sudo перед командой):yum install http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpmyum --enablerepo=gf-plus install dante-serverСоздаём каталог для pid-файла
mkdir /var/run/sockdБэкапим стандартный конфиг
mv /etc/sockd.conf /etc/sockd.conf.orig2. Настройка конфига
В какой-то момент у Dante изменился состав опций конфига. В интернете не понятно, о какой версии идёт речь. Старые опции не работают на новой версии. Это добавляет путаницы. Эта инструкция точно работает для версии Dante v1.4.1. Узнать версию уже установленной программы можно так:sockd -vКонфиг для работы на порту 443 (стандартный порт для HTTPS). Это подойдёт вам, если на этом же сервере у вас не работает какая-нидудь другая программа на этом же порту (например, web-сервер Apache или Nginx или любой другой).
nano /etc/sockd.conf
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
}Этот конфиг делает так, что клиенты смогут подключаться к вашему прокси по имени и паролю пользователей (активных) вашего сервера. Т.е. нужно завести отдельных пользователей, которые собой будут являть данные для подключения к прокси.
Для настройки работы IPv6 есть вот такая страница в помощь - http://www.inet.no/dante/doc/1.4.x/config/ipv6.html. У меня получилось добавить (но это не точно) поддержку IPv6 с помощью добавления:
internal 0:0:0:0:0:0:0:0 port=443client pass {
    from: 0/0 to: 0/0
    log: connect disconnect error
}client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect disconnect error
}3. Добавляем пользователей
Добавляем пользователей аккуратно, чтобы им не было разрешено ничего лишнего на сервере (например, подключаться по SSH) :useradd --shell /usr/sbin/nologin proxyuserpasswd proxyuserМожно задать пароль пользователю со специальным ключом для автоматической деактивации пользователя по прошествии заданного времени (демо-режим своеобразный настроить):
passwd --inactive10 testuserpasswd --lock testuserЕсли не потребуется отслеживать частоту подключений пользователей, то в конфиге можно заменить строки:
log: connect disconnect errorlog: error4. Запуск прокси-сервера
Запуск и управление производится стандартным образом с помощью systemd. Запуск:systemctl start sockd.servicesystemctl enable sockd.servicesystemctl restart sockd.service5. Прочие разрешения для Dante на сервере
На удивление, для SeLinux не потребовалось никаких дополнительных действий.Для файервола нужно разрешить порт 443:
firewall-cmd --zone=public --add-service=httpsfirewall-cmd --zone=public --permanent --add-service=httpsfirewall-cmd --permanent --zone=public --add-port=1080/tcpfirewall-cmd --reloadВ процессе настройки прокси сервера возникали случаи, когда перезапускаемый сервис отваливался с ошибкой "Access denied". Помогла статья "systemd in Fedora 22: Failed to restart service: Access Denied", а конкретно, - переинициализация сервисов:
systemctl daemon-reexec6. Проверка работы
Для начала можно проверить доступность вашего прокси-сервера с другого компьютера так (вместо PASS и SERVER_IP подставить ваши значения):curl -v -x socks5://proxyuser:PASS@SERVER_IP:443 https://ya.ruЛибо тоже самое набрать вручную в настройках:


 
 
Комментарии
Отправить комментарий