Pull to refresh

Comments 30

было бы хорошо указать, что для корректной работы PAM авторизации Dante должен быть скомпилирован c поддержкой PAM.
(указано по ссылке которую автор привел в конце статьи.)
Благодарю за поправку, обязательно в ближайшее время добавлю данный момент.
Так вот же: «Необходимо оговориться, что данте для данного функционала должен быть собран с поддержкой PAM, в статьях по установке это отображено тем, что в статусе конфигурации исходников должна быть следующая строка:»
Debian 9. Что если в /etc/pam.d нет файла sockd? Сервис данте, я так понимаю называется danted. Добавление файла danted в /etc/pam.d не решает ситуацию. Приконнектиться не удается.

Dante из репозитория. v1.4.1
Если, файл отсутствует, то при открытие на редактирование (например командой nano /etc/pam.d/socksd ) он создастся. Необходимо создавать именно файл sockd.

Для большей наглядности добавлю команду редактирования в статью.
sockd тоже сделал на всякий случай (хотя в дебиане такой службы нет, есть danted). Не пашет.
В логе:
Apr 25 14:37:23 (1524663443.287009) danted[4672]: info: Dante/server[1/1] v1.4.1 running
Apr 25 14:37:34 (1524663454.948978) danted[4674]: info: block(1): tcp/accept ]: xxx.xx.xxx.x.xxxxx xx.xxx.xx.xxx.xxxx: error after reading 19 bytes in 3 seconds: pam_authenticate() for user "socks" failed: Authentication failure


Отдельно скажу, что socksmethod: username работает нормально. Проблемы только после переключения.
1.
~# ps -aux|grep danted
nobody 4716 0.0 0.1 48556 1860 ? Ss 14:45 0:00 /usr/sbin/danted -D
nobody 4717 0.0 0.0 48556 320 ? S 14:45 0:00 danted: monitor-ch
root 4718 0.1 0.5 68264 5184 ? S 14:45 0:00 danted: negotiate-
nobody 4719 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4720 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4721 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4722 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4723 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4724 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4725 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4726 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4727 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4728 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4729 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4730 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4731 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4732 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4733 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4734 0.0 0.0 48556 328 ? S 14:45 0:00 danted: request-ch
nobody 4735 0.0 0.1 48556 1412 ? S 14:45 0:00 danted: io-child:
nobody 4736 0.0 0.1 48556 1484 ? S 14:45 0:00 danted: negotiate-
root 4756 0.0 0.1 12784 1020 pts/0 S+ 14:47 0:00 grep danted


2. sockd.passwd генерировался командой htpasswd -b -m -c /opt/danted/danted.passwd UserName SomeStrongPassword представляет из себя

cat /opt/danted/danted.passwd
socks:hash


В /etc/pam.d/sockd и danted указан именно /opt/danted/danted.passwd
Возможно, не установлен pam_pwdfile.so. В /lib/security (или /lib64/security) должен присутствовать таковой.
Установлен.

Проблему удалось победить, сгенерировав хеш при помощи mkpasswd.

Причем «htpasswd -b -m -c» при повторном вызове постоянно разный хеш вставляет в файл. Соль что ли используется? Ну и по результату не работает. В первопричинах пока не разбирался.
Странно, нужно будет проверить в чем проблема. Пока что уберу способ с htpasswd
~# htpasswd -b -m -c /opt/danted/danted.passwd1 socks qwer1234
Adding password for user socks
~# htpasswd -b -m -c /opt/danted/danted.passwd2 socks qwer1234
Adding password for user socks
~# cat /opt/danted/danted.passwd1
socks:$apr1$YfVx7bMg$QezEU7Mf0AgDiRCD3Yx/g.
~# cat /opt/danted/danted.passwd2
socks:$apr1$aydFBNIn$uYkZh5VdRBiWdvT0AH.h2.
Да, действительно htpasswd для md5 использует соль…

httpd.apache.org/docs/2.4/misc/password_encryptions.html

Но и mkpasswd использует соль. Проблема заключается в типе алгоритма в хэше. Тип для md5 должен быть $1, однако htpasswd устанавливает тип $apr1

www.shellhacks.com/ru/linux-generate-password-hash

И насколько я понимаю формат хеширования MD5 (APR) не поддерживается.
Необходимо создавать именно файл sockd

Не обязательно именно sockd, имя сервиса можно указать в конфиге с помощью pamservicename.
Благодарю, действительно упустил эту директиву. Добавлю в статью этот момент.
У меня более общий вопрос. Чаще всего используются следующие види прокси:
http/https — thinproxy, squid.
и socks — 3proxy, dante, shadowsocks.
Если я понял правильно, то http/https прокси вообще не предусматривают паролей и к ним может подключиться любой. В socks-прокси можно настроить вход по паролям, но я слышал, что они передаются открытым текстом, то есть существует возможность их перехвата. Я верно изложил или нет?
Http прокси так же могут быть закрыты паролем, в том числе и с использованием SSL/TLS.
Да, пароль к прокси передается в открытом виде, в связи с чем и появилась эта статья.

Кроме shadowsocks. Это обёртка, которая туннелирует внутри себя, и локально запускает socks сервер. и пароль зашифрованным передается.

А кто знает как в этом dante победить chaining local socks5-> remote socks5 для случая когда оба сервера с авторизацией?
Фактически самая ходовая ситуация — купленый внешний socks5 прокси используется через socks5 установленный в локалке.

У меня немного схожий вопрос.
Собираюсь спрятать прокси тора за авторизацию, данте же умеет переадресовывать запросы не на интерфейс, а на другую сокс проки(в данном случае тор)?

Согласно этому разделу документации, вы можете это реализовать. Авторизация при цепочки прокси возможна, но не поддерживается. Так что на свой страх и риск.
Вроде я в начале статьи привет ссылку ( например ) по которой можно прочитать одну из вполне очевидных причин использовать «эти заморочки».
Вообще возможность обезопасить свой сервер от потенциальной дыры вполне себе оправдывает данные действия.
Запуск dante в docker контейнере избавляет от многих проблем hub.docker.com/r/vimagick/dante

Если dante настраивается только для телеграма, то можно в конфиге разрешить его подсети github.com/ojab/docker-dante-telegram/blob/master/danted_authenticated.conf
Это подстрахует от mitm атак, так как логин и пароль передаются в открытом виде. Таким образом сделать, что-то противоправное через ваш прокси не получится. Но к сожалению не решает проблему использования вашего прокси на халяву для телеграма.

Ещё есть pam_userdb, который использует berkley db. В отличие от pam_pwdfile присутствует из коробки в CentOS. Собственно, я о нём узнал, когда для https://selivan.github.io/socks прислали патч с поддержкой CentOS :)

Работает, благодарю (плюс в карму). Что удивительно, работает быстрее, чем SSH-тоннель; во всяком случае, Telegram показывает для SSH-тоннеля на тот же VPS пинг 95 мс, а для этого прокси — 58.

А как в openwrt знать с с каким параметром собран sockd ?

у меня при указании socksmethod: pam.username или socksmethod: pam.any
запуск вызывает ошибку: sockd[19854]: error: /etc/sockd.conf: problem on line 275 near token "pam.username": in order to set the given keyword/value, Dante must be linked with an external PAM library at compiletime. When Dante was compiled, no such linking was done, perhaps due to no usable PAM library being installed on the system at the time. If a PAM library has since been installed on this system, please rerun ./configure in Dante's source directory, recompile and reinstall Dante. Please see the Dante manual for more information

файл авторизации есть

cat /etc/pam.d/sockd

auth required pam_pwdfile.so nodelay pwdfile=/etc/sockd.passwd
account required pam_permit.so

Sign up to leave a comment.

Articles