{{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}}