Установка Dante на FreeBSD

Материал из MediaWiki
Перейти к навигации Перейти к поиску

При написании статьи использовались материалы https://bvn13.tk/posts/dante-server-on-ubuntu-16-04-lts



SOCKS - сетевой протокол, который позволяет клиент-серверным приложениям прозрачно использовать сервисы за межсетевыми экранами (фаерволами). SOCKS — это сокращение от "SOCKet Secure". SOCKS не зависит от конкретных протоколов уровня приложений (7-го уровня модели OSI) и базируется на стандарте TCP/IP — протоколе 4-го уровня.

Хотя этот протокол разработан достаточно давно, он является относительно новым (по сравнению с HTTP proxy). SOCKS позволяет работать с любыми (версия Socks 4 - с TCP, Socks 5 - с TCP и UDP) протоколами. SOCKS proxy просто передает данные от клиента к серверу, не вникая в содержимое самих данных (поэтому он может работать с HTTP, FTP, SMTP, POP3, NNTP, etc.).

SOCKS-сервер Dante Server

В коллекции пакетов FreeBSD 11.2 имеется последняя (на момент написания статьи) версия Dante Server 1.4.2. Если не требуется специальных опций при сборке, то использовать заранее подготовленный пакет наиболее предпочтительно (иначе можно использовать коллекцию портов, но этот вопрос останется за рамками этой статьи). Для авторизации клиентов будем использовать PAM.

Устанавливаем пакет

# pkg install dante
# pkg install pam_pwdfile

Модуль pam_pwdfile не включен в состав базовой системы, его тоже сразу устанавливаем.

Редактируем файл конфигурации

Файл конфигурации расположен по адресу /usr/local/etc/sockd.conf

<syntaxhighlight lang=bash>

  1. Расположение лог-файла

logoutput: /var/log/socks.log

  1. На каком сетевом интерфейсе и порту обслуживаем socks клиентов

internal: em0 port = 1080

  1. С какого IP или интерфейса выходим во внешний мир

external: em0

  1. internal: x.x.x.x port = 1080
  1. Используемый метод авторизации клиентов.

socksmethod: pam

  1. От имени какого пользователя запускается сеервер

user.privileged: root

  1. Понижение привелегий

user.unprivileged: nobody

  1. Правила

client pass {

       from: 0.0.0.0/0 to: 0.0.0.0/0
       log: error connect disconnect

}

client block {

       from: 0.0.0.0/0 to: 0.0.0.0/0
       log: connect error

}

socks pass {

       from: 0.0.0.0/0 to: 0.0.0.0/0
       log: error connect disconnect

}

socks block {

       from: 0.0.0.0/0 to: 0.0.0.0/0
       log: connect error

} </syntaxhighlight>

Полный конфигурационный файл всегда можно найти в /usr/local/etc/sockd.conf.sample (не редактируйте его, это пример).

Для правильной настроки нужно указать сетевой интерфейс или IP адрес, запросы с которого будут проксироваться. Узнать имя сетевого интерфейса можно командой ifconfig. Сокращенный вывод этой команды:

$ ifconfig

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384

Настройка PAM

Создаем файл /etc/pam.d/sockd с таким содержанием (подробнее)

<syntaxhighlight lang=bash> auth required pam_pwdfile.so pwdfile /root/sockd.passwd account required pam_permit.so </syntaxhighlight>

Создаем файл паролей /root/sockd.passwd (описание формата в файле, каждый пользователь с новой строки)

<syntaxhighlight lang=bash>

  1. User:password

UserOne:5f+wBjfFf5R|tYuEM9Kj UserTwo:hb~A5},t5>.bnTOKzTDj </syntaxhighlight>

Для генерации паролей удобно использовать утилиту pwgen. Пример генерации 5 паролей длинной 20 символов с добавленийм ключей для повышенной безопасности и использования спецсимволов:

$ pwgen -ys 20 5
-Sgd'Ss-yHfEi+=2TJ?Y mvxWwFYg/[4EI2aw/:^` hb~A5},t5>.bnTOKzTDj
@9FGi0^Qp7;F91ao9vw| 5f+wBjfFf5R|tYuEM9Kj

Автоматический запуск Dante server

Добавляем в файл /etc/rc.conf строку:

<syntaxhighlight lang=bash> sockd_enable="YES" </syntaxhighlight>

Запускаем сервер:

<syntaxhighlight lang=bash> service sockd start </syntaxhighlight>

Проверяем с клиента работоспособность с помощью curl:

<syntaxhighlight lang=bash> $ curl --socks5 'UserOne:5f+wBjfFf5R|tYuEM9Kj@x.x.x.x:1080' ifconfig.me xxx.xxx.xxx.xxx </syntaxhighlight>