28 марта 2024 г.

Socks-сервер, dante v1.4.2, на debian 12

Шпаргалка для себя, некоторые изменения относительно штатного.
logoutput: /var/log/sockd.log
Чтобы это работало, нужно пофиксить systemd-юнит, в дебиане по дефолту там стоит
ReadOnlyDirectories=/bin /etc /lib -/lib64 /sbin /usr /var
т.е. надо убрать /var, иначе будет в логах старта что-то типа:
danted[130834]: alert: configparsing(): could not (re)open logfile "/var/log/sockd.log": Read-only file system

Авторизация:

По системным юзерам:
socksmethod: username
и добавить юзера (желательно без шелла), метод в принципе описан в доке и везде. Более нормальный метод - через pam. Должно быть скомпилировано с поддержкой, но думаю обычно везде так и есть. Проверить можно примерно так:
# /usr/sbin/danted -vv | grep build: | grep pam
build: libwrap mon-data mon-disconnect pam preload sess2
метод включается в конфиге (просто "pam" как в некоторых руководствах, и в конфиге дебиановском - устаревшее):
socksmethod: pam.username
Дока говороит: The default PAM service name used by Dante is sockd. Потому настройки в файле (в дебиане, например): /etc/pam.d/sockd Далее есть нюансы, официальная дока не говорит КАК настроить конкретно в pam ( https://www.inet.no/dante/doc/1.4.x/config/auth_pam.html ), будем настраивать через libpam-pwdfile (https://github.com/tiwe-de/libpam-pwdfile), оно даёт писать логины-пароли в отдельный файл в штатном формате (который через mkpasswd):
apt install libpam-pwdfile
/etc/pam.d/sockd
auth		required	pam_pwdfile.so pwdfile=/etc/danted.passwd
account required pam_permit.so
Далее про пароли, дока по libpam-pwdfile говорит:
The password file basically looks like passwd(5): one line for each user with two or more colon-separated fields. First field contains the username, the second the crypt()ed password. Other fields are optional. crypt()ed passwords in various formats can be generated with mkpasswd from the whois package.
потому создаём этот указанный выше файл /etc/danted.passwd , генерим хеш пароля
mkpasswd password
$y$j9T$56.u8.......A4GLaQjcgV/
прописываем в виде
login:$y$j9T$56.u8.......A4GLaQjcgV/
Обязательно проверить что работает при правильном и особенно что не работает при неправильном, т.к. dante за это не отвечает уже и слушается pam, который может пускать лишних, например, если накосячить.

ipv6

Если есть нормальный внешний ipv6 на интерфейсе то само по идее заработает. Если не надо то что-то типа этого будет работать и не ругаться:
internal: 0.0.0.0 port = 1080
external: ens3
Рулесы чтобы работало в ipv4/ipv6 можно писать в универсальном формате (0/0):
client pass {
        from: 0/0 to: 0/0
    log: error
}
socks pass {
        from: 0/0 to: 0/0
    log: error
}
Контролировать к чему он там собрался биндится (и почему нет) можно в логе при (минимум) debug: 1 установленном в конфиге.

Комментариев нет:

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