Настройка SOCKS4/5-прокси сервера Dante
Для настройки прокси сервера нам понадобится:
- пакет dante-server, содержащий сам прокси-сервер,
- пакет libpam-pwdfile, содержащий модуль PAM для проверки пользователей и их паролей по списку в текстовом файле,
- пакет whois, содержащий утилиту mkpasswd для генерирования хешей паролей.
Установим в систему необходимые пакеты:
# apt-get install dante-server libpam-pwdfile whois
Создадим файл /etc/pam.d/danted, содержащий настройки для сервиса danted:
auth required pam_pwdfile.so pwdfile /etc/danted.passwd
account required pam_permit.so
В файле указано, что аутентификация пользователей сервиса будет производиться по текстовому файлу /etc/danted.passwd.
Сформируем хэш пароля первого пользователя. Для хэширования паролей воспользуемся алгоритмом SHA-512:
$ mkpasswd -m sha-512
Создадим файл /etc/dante.passwd и впишем в него одну строку, в которой имя пользователя отделено от пароля двоеточием:
stupin:$6$SdBQ5DXnx3e$f2qi/6/J/opIsl2buCUKvn1rlyZT92siRCHZ1uWCIyEEJaRBa2JduBu9.wmQm4SUac8otQ5JCXkO67CAahzI2/
Сменим права доступа к файлу, чтобы этот файл мог читать только пользователь root:
# chmod o= /etc/danted.passwd
Наконец, настроим сам прокси-сервер. Вот краткая выжимка из моего файла /etc/dante.conf:
logoutput: syslog
# Внутренний интерфейс и порт, на котором будут приниматься подключения клиентов
internal: vlan3 port = 3128
# Внешний интерфейс, через который будут устанавливаться исходящие подключения и
# на котором будут прослушиваться порты, запрошенные клиентами
external: ppp0
# Аутентификация через подсистему PAM
socksmethod: pam.username
user.privileged: proxy
user.unprivileged: nobody
user.libwrap: nobody
# Разрешаем подключения клиентов с любых адресов на любой адрес,
# прослушиваемый прокси-сервером
client pass {
from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
}
# Запрещаем подключаться клиентам к интерфейсу lo
client block {
from: 0.0.0.0/0 to: lo
}
# Подключенным клиентам разрешаем обмен трафиком в любом направлении
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
}
# Но запрещаем подключаться к интерфейсу lo
socks block {
from: 0.0.0.0/0 to: lo0
log: connect error
}
# И запрещаем открывать порты на прослушивание
socks block {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind
log: connect error
}
Осталось запустить сервер и включить его в автозагрузку:
# systemctl start danted.service
# systemctl enable danted.service