{{fl>debian?48&align=right}} ====== Установка SOCKS5 сервера Dante ====== * [[https://www.inet.no/dante/| Домашняя страница]] * [[https://github.com/notpeter/dante|Github]] * [[https://www.inet.no/dante/doc/| Документация]] Я очень огорчен очередным абсурдным и вредным шагом со стороны органов власти РФ в попытке ввести цензуру в сети. Короткая инструкция по установке socks-сервера для обхода блокировок (в первую очередь Telegram). В данном примере используется Debian 9. Также можно воспользоваться скриптом для автоматической установки * [[https://github.com/Lozy/danted|github]] - CentOS 6, CentOS 7, Debian 7, Debian 8, Ubuntu 14.04, Ubuntu 16.10, * https://selivan.github.io/socks/ - CentOS 7, Ubuntu 16.04, Ubuntu 18.04 U+1F44D Dante это только SOCKS сервер. Если дополнительна нужна поддержка HTTP-прокси, то используйте [[linux:3proxy|3proxy]]\\ \\ Далеко не все программы имеют поддержку SOCKS. Для перенаправления трафика ваших приложений на socks-сервер понадобится установка дополнительной программы (проксификатор). Для Windows это Freecap/Widecap. **Шаг 1. Установка Dante** # apt-get install dante-server Версия **1.4.1+dfsg-5** содержит ошибку (подробности в [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=862988|багтрекере Debian]]) При старте будет что-то такое warning: checkconfig(): no socks authentication methods enabled. This means all socks requests will be blocked error: checkconfig(): no internal address given for server to listen for clients Можно смело пропустить эту ошибку Примечание для Ubuntu\\ \\ Свежая версия Dante в Ubuntu появилась только в версии 18.04. Если у вас 16.04, то вам пригодится статья по самостоятельной сборке deb пакета - [[https://bvn13.tk/posts/dante-server-on-ubuntu-16-04-lts]] **Шаг 2. Основные настройки** Конфигурационный файл ''/etc/danted.conf'' Ниже представлена типовая конфигурация # Путь к лог файлу logoutput: /var/log/socks.log # Можно задать отдельный лог файл для ошибок # errorlog: /var/log/socks_error.log internal: eth0 port = 1080 external: eth0 # Авторизация по локальным/системным пользователям socksmethod: username # Мы используем системных пользователей, поэтому нужны права на чтение passwd user.privileged: root user.unprivileged: nobody user.libwrap: nobody # Разрешить подключения с любых IP всем пользователям прошедшим авторизацию client pass { from: 0/0 to: 0/0 log: connect disconnect error ioop } socks pass { from: 0/0 to: 0/0 log: connect disconnect error ioop } Подробнее об уровнях логированиях на сайте Dante смотрите в разделе [[https://www.inet.no/dante/doc/1.4.x/config/logging.html|Server logging]] **Шаг 3. Логины/пароли** Добавим нового пользователя **rootwelt** для работы с socks сервером. # useradd --shell /usr/sbin/nologin rootwelt # passwd rootwelt При этом у пользователя не будет доступа к SSH, т.к. в качестве шелла указан nologin. **Шаг 4.** Добавляем сервис в автозагрузку и запускаем его # systemctl enable danted # systemctl start danted Проверка (с локального Linux хоста; A.C.A.B здесь это IP адрес VPS) curl --socks5 rootwelt:password@A.C.A.B:1080 check-host.net/ip curl --socks5 rootwelt:password@A.C.A.B:1080 ident.me; echo Хабр подсказал, что можно создать для удобства ''~/.curlrc'' socks5 = A.C.A.B:1080 proxy-user = rootwelt:password user-agent = "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1" ===== Немного о безопасности ===== Вместо системных пользователей можно использовать [[https://www.inet.no/dante/doc/1.4.x/config/auth_pam.html|PAM файл]] с логинами и паролями (похоже на htpasswd). Для этого необходимо дополнительно установить пакет **libpam-pwdfile**, а также заменить строку socksmethod: username на эту socksmethod: pam.username В файл ''/etc/pam.d/sockd'' добавляем auth required pam_pwdfile.so pwdfile /etc/dante.passwd account required pam_permit.so В некоторых howto также советуют установить **apache2-utils** и создавать логин/пароль через утилиту **htpasswd** htpasswd -b -d -c /etc/dante.passwd username password Но лучше использовать **mkpasswd** (входит в состав пакета **whois**) mkpasswd --method=md5 password Логин и зашифрованный пароль следует теперь добавить в файле ''/etc/dante.passwd'' rootwelt:$1$3fg9NXcJ$tw3x1l8XepEcAdKtkMDyA0 Подробнее в статье на Habr'е - [[https://habr.com/post/354274/|Использование libpam при настройке SOCKS сервера Dante]] ===== Веб-интерфейс для администрирования ===== Код на Github - https://github.com/IvanDanilov/dante-gui ===== Плагин для браузера ===== Так как браузеры не поддерживают авторизацию на socks-сервере, то необходима установка дополнительных плагинов. Для Firefox рекомендуем [[https://addons.mozilla.org/ru/firefox/addon/foxyproxy-standard/|FoxyProxy]]. Для Google Chrome в сети рекомендуют использовать [[https://chrome.google.com/webstore/detail/proxy-helper/|Proxy Helper]], но к сожалению он не работает - [[https://bugs.chromium.org/p/chromium/issues/detail?id=256785|SOCKS Authentication is not implemented in Chrome]]. ===== Тест скорости через socks-сервер в браузере ===== {{https://www.speedtest.net/result/7320163010.png}} {{https://www.speedtest.net/result/7320172722.png}} {{https://www.speedtest.net/result/7320175370.png}} ===== Делимся ссылкой в Telegram ===== Формат следующий - https://t.me/socks?server=IP&port=PORT&user=USERNAME&pass=PASSWORD ===== БОНУС ===== Можно использовать socks **только** для доступа к Telegram. Для этого необходимо изменить конфиг следующим образом ([[https://weril.me/index.php/2018/04/13/installation_and_using_dante_as_socks5_proxy_on_ubuntu_16/|via]]) Список подсетей Telegram лучше всего смотреть на сайте https://bgp.he.net/ client pass { from: 0.0.0.0/0 to: 0.0.0.0/0 log: error } socks pass { from: 0.0.0.0/0 to: 149.154.160.0/20 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 149.154.164.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.4.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.8.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.56.0/22 log: connect disconnect error socksmethod: username } socks pass { from: ::/0 to: 2001:67c:4e8::/48 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.20.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.36.0/23 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.38.0/23 log: connect disconnect error socksmethod: username } socks pass { from: ::/0 to: 2001:b28:f23c::/48 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 149.154.168.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.16.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.56.0/23 log: connect disconnect error socksmethod: username } socks pass { from: ::/0 to: 2001:b28:f23f::/48 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 149.154.172.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 91.108.12.0/22 log: connect disconnect error socksmethod: username } socks pass { from: ::/0 to: 2001:b28:f23d::/48 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 149.154.167.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: 149.154.174.0/22 log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: .telegram.org log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: .stel.com log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: .t.me log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: .telegram.me log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: .telegram.dog log: connect disconnect error socksmethod: username } socks pass { from: 0.0.0.0/0 to: .telegra.ph log: connect disconnect error socksmethod: username } socks block { from: 0.0.0.0/0 to: 0.0.0.0/0 log: connect disconnect error socksmethod: username } {{tag>Linux Debian Dante Proxy Socks РКН Блокировки rootwelt}}