Stargazer
НАСТРОЙКА СЕРВЕРА ДЛЯ РАБОТЫ С DIVERT SOCKETS

То, что написано в этом разделе на практике не проверялось. Поэтому нижеописанные вещи могут не работать. Если вы столкнетесь с проблемами, напишите и мы попробуем разобраться и исправить ошибки этого раздела документации.

Компиляция сервера

Для того, что бы сделать захват трафика c divert sockets нужно несколько по-иному собрать серврер.

  1. В файле make.bsd меняем строки:

    #BPF capture
    defines=-DFREEBSD -DTARIFF$(t) -DRCL_PROCESS

    #divert scokets capture
    #defines=-DFREEBSD -DTARIFF$(t) -DDIVERT -DRCL_PROCESS

    на

    #BPF capture
    #defines=-DFREEBSD -DTARIFF$(t) -DRCL_PROCESS

    #divert scokets capture
    defines=-DFREEBSD -DTARIFF$(t) -DDIVERT -DRCL_PROCESS

  2. make clean
  3. make bsd
Параметры ядра

Для работы серверу понадобится поддержка ядра. Нас интересует следующие опции:

option IPFIREWALL
option IPFIREWALL_VERBOSE
option IPFIREWALL_DEFAULT_TO_ACCEPT
option IPDIVERT

Скрипты

Идея настройки сервера для работы с divert sockets сводится к тому, что бы пропустить трафик подлежащий подсчету через файрвольное(ые) правило(а) divert

Для настройки нам понадобится внести коррективы в параметры сервера stargazer.conf

При сборке сервера с divert sockets, строка iface=xl0,xl1, в конфигурационном файле приймет несколько иной вид. Строка будет выглядеть так:

iface=xl0 15701,xl1 15702

Т.е. за каждым интерфейсом ставится через пробел номер порта для divert sockt-а. Эти порты не имеют никакого отношения к TCP или UDP портам. В данном случае порты стоит рассматривать как некие идентификаторы интерфейса. По этим числам сервер будет идентифицировать с какого интерфейса был получен пакет.
Для правильной настройки следует запомнить несколько простых правил: номер порта не должен превышать 65535, порты должны быть разными для всех интерфейсов. (Числа 15701, 15702 были взяты случайным образом)

Итак, в настройках должна появиться строка такого вида:

# for FreeBSD only
# Имя интерфейсов на которых нужно вести подсчет трафика
iface=xl0 12345

Следующее, что нужно сделать, это настроить firewall, так, что бы в сервер попадали нужные пакеты. Пакеты, которые будут захватыватся файрволом переправятся в сервер. Причем, пакеты захваченные на разных интерфейсах должны правилом divert переправлятся в разные порты (для записи в файле конфигурации iface=xl0 15701,xl1 15702):

ipfw add divert 15701 ip from $ip to any via xl0
ipfw add divert 15702 ip from $ip to any via xl1

Если у нас были скрипты, подобные тому, как описано в примере по настройке сервера под FreeBSD, то необходимо сделать следующие изменения:

В stargazer.conf изменить строку с

iface=xl0,xl1,xl2

на

iface=xl0 15701,xl1 15702,xl2 15703

В скрипте OnConnect будут следующие изменения:

fwcmd="/sbin/ipfw"
int_if="xl0"

ip=$2
login=$1
id=$4

# id - уникальный целочисленный идентификатор пользователя
# принимает значений от 0 до максимального кол-ва пользователей

${fwcmd} add `expr $id '*' 10 + 29000` fwd 127.0.0.1,3128 tcp from $ip to any 80 via ${int_if}
${fwcmd} add `expr $id '*' 10 + 29001` divert 15701 ip from $ip to any via ${int_if}

echo "connect $login " >> /usr/local/stargazer/var/log/connect.log

СОДЕРЖАНИЕ