SOCKS-прокси с авторизацией по логину и паролю

()

Прокси-сервера являются посредниками между клиентами и серверами. Например они позволяют из локальной сети обращаться к ресурсам глобальной сети. Не самым распространённым но одним из самых продвинутых прокси-протоколов является SOCKS (SOCKet Secure). Для многих приложений это единственный поддерживаемый или наиболее предпочтительный прокси-протокол.

В Linux в качестве SOCKS-прокси обычно используется пакет dante-server, а доступ ограничивают по IP-адресам или включают поддержку PAM и используют системных пользователей. Первый вариант далеко не всегда удобен, а второй весьма спорен. Далее будет показано как настроить dante-сервер с авторизацией по логину и паролю, но без использования системных пользователей.

Мы будем разворачивать наш прокси-сервер на самой дешёвой VPS от Vultr (всего 2.5 USD за достаточную для наших целей конфигурацию), работающей под управлением Ubuntu 16.04. Установим dante-server:

apt-get install dante-server

Далее нужно привести файл "/etc/danted.conf" к виду:

# Настроки логирования
logoutput: stderr
logoutput: /var/log/sockd.log
# Системные пользователи для разных операций
user.privileged: root
user.notprivileged: nobody
user.libwrap: nobody
# Интерфейс и порт, на котором слушает сервер
internal: ens3 port = 8088
# Интерфейс для исходящего трафика
external: ens3
# Будем использовать авторизацию через PAM
method: pam
# Имя сервиса в PAM
pam.servicename: sockd
# Списки доступов.
# Разрешаем всё для авторизованных пользователей
client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: error
}
pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: error
}

Здесь мы указываем авторизацию через PAM, однако несмотря на это мы не будем использовать системных пользователей, а будем использовать файл с паролями. Для этого нам понадобится модуль "pam_pwdfile" и утилита "mkpasswd" из пакета "whois". Установим необходимые пакеты:

apt-get install libpam-pwdfile whois

Теперь создаём файл "/etc/pam.d/sockd" (Важно: имя файла должно совпадать с параметром "pam.servicename" в файле "dante.conf"!), он имеет вид:

#%PAM-1.0
auth required /lib/x86_64-linux-gnu/security/pam_pwdfile.so pwdfile=/etc/danted.passwd
account required pam_permit.so

Ну и наконец создаём файл "/etc/danted.passwd", каждая строчка которого имеет вид:

логин:шифрованный_пароль

И вот тут как раз пригодится утилита "mkpasswd": с ещё помощью нужно шифровать пароли. Закончив настройку перезапускаем сервис:

service danted restart

Так же если используется файрволл то необходимо разрешить обращение к порту tcp/8088. На этом настройка сервера закончена и можно приступать к настройкам клиентов. Например для одного популярного мессенджера настройки будут выглядеть так:

Настройки socks-прокси в популярном мессенджере

Если вы используете браузер Firefox то столкнётесь с тем что он не поддерживает авторизацию на SOCKS-прокси. В качестве решения можно установить дополнение FoxyProxy Standard. В браузере Google Chrome такое же ограничение можно обойти с помощью расширения Proxy Helper.

На этом всё. Приятной работы!

Ключевые слова: socks, socks5, dante, авторизация, pam, password, mkpasswd.

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

Anonymous 2018-04-20 12:13:49 (#)

Привет!
Как скорость на вультре из Казани?
А само соединение до сокс-прокси получается нешифрованным?

MooSE 2018-04-20 16:21:00 (#)

Как скорость на вультре из Казани?
А само соединение до сокс-прокси получается нешифрованным?

На трёхмегабитном интернете - три мегабита:) Через wifi в гостях намерял 16 мбит/с. (подозреваю что это ограничение той сети).

Соединение до сокс-прокси нешифрованное. Да.
Новый комментарий



© 2006-2018 Вадим Калинников aka MooSE