Этот способ сбора данных о трафике (источник) позволяет собирать информацию на одной машине (PC-роутере), и передавать ее на сервер биллинга (другую машину) по сети. Конечно, в простом случае это может быть одной машиной.
Сбор данных осуществляется через библиотеку libpcap, аналогично утилитам tcpdump и Wireshark. Преимуществом данного подхода являеются:
- уход от медленной и ненадежной (FreeBSD) библиотеки jnetpcap
- возможность разнести пропуск трафика и обработку статистики на разные машины (и разные платформы)
- возможность осуществлять блокировку по трафику (FreeBSD через pf или ipfw, Linux через ipset)
Вопрос: Почему бы не работать через ipfw вместо pcap?
Ответ: Работа по механизму ipfw в части захвата трафика предусматривает копирование пакета из kernel space в user space два раза, что замедляет работу сервера-маршрутизатора. К тому же, такой подсчет не корректно работает в случае трансляции адресов, является потенциально небезопасным (не работает биллинг-трафик не ходит). С другой стороны, никто не мешает вам использовать RemoteAgentDataSource в режиме сбора статистики через libcap, а в режиме блокирования применять не pf, а работать с таблицами ipfw.
"Удаленный агент" представляет собой программу, собранную статически (нет зависимостей от внешних библиотек), работающую под операционными системами Linux и FreeBSD (32 бит). Агент слушает проходящий мимо указанного сетевого интерфейса трафик, фильтрует его согласно заданной политике, формирует потоки статистики, и отправляет их в сторону сервера биллинга. Протокол обмена - собственный, поверх UDP, порт по умолчанию: 20002.
Ответная часть на стороне сервера биллинга (jserver) представляет собой настроенный источник данных (data source) типа RemoteAgentDatasource.
Перечислим все возможные настраиваемые параметры источника:
Параметр |
Описание |
ds_name |
Человеческое имя источника данных |
listen_at |
Локальный IP-адрес, на котором слушать входящие соединения. По умолчанию 0.0.0.0 - на всех. |
port |
Локальный UDP-порт, на котором слушать входящие соединения. По умолчанию 20002. |
accept_from |
IP-адрес удаленной стороны (агента), который будет подключаться к серверу. По умолчанию разрешить подключение отовсюду (0.0.0.0) |
password |
Пароль на подключение агента, по умолчанию "password". Его хэшем подписываются все пакеты. |
interface |
Имя локального интерфейса на стороне агента, на котором обрабатывать трафик. Если не задано, то выставляется на стороне агента. По умолчанию "интерфейс лупбэк0". |
rule |
Правило, которым на стороне агента происходит фильтрование трафика. Если не задано, то выставляется на стороне агента. По умолчанию "весь трафик". |
Агент на "удаленной стороне" - UNIX-демон. Скачать исходники и собранные бинарики можно с сайта, или взять в дистрибутиве из каталога jserver/bin.
Запускается агент так:
demo:~#n4agent_pcap_event -f /etc/n4agent.conf -p /var/run/n4agent.pid -d -q
Параметры командной строки:
Параметр |
Описание |
-q |
Ничего не выводить при запуске, работать молча |
-f cfgfile |
Имя файла с конфигурацией |
-p pidfile |
Имя файла, в котором будет храниться идентификатор процесса |
-d |
Становиться демоном (работать в фоновом режиме) |
Конфигурационный файл находится в дистрибутиве в каталоге jserver/agent, и представляет из себя набор строк со следующими командами:
Параметр |
По умолчанию |
Описание |
---|---|---|
connect |
127.0.0.1:20002 |
Параметры подключения к сервису биллинга (RemoteAgentDatasource), адрес сервера и UDP-порт (по умолчанию localhost:20002) |
filter |
ip |
Правило фильтрации (man tcpdump). По умолчанию отсутствует (весь трафик) |
interface |
em0 |
Интерфейс, на которм слушает PCAP (em0 надо исправить на имя нужного локального интерфейса) |
daemon |
|
Становиться демоном (работать в фоновом режиме). Альтернатива: nodaemon |
exec |
/usr/local/etc/access-pf.sh |
Имя shell-скрипта, который вызывается для блокировки трафика посредством помещения |
Если работающему процессу n4agent послать сигнал -USR1, то в конец системного лог-файла запишется статус о работе агента (состояние связи с сервером, сколько потоков обработано и проч).
При работе агента на самом деле запускаются два процесса: первый для обработки трафика и работы с биллингом, второй для запуска команд блокировки-разблокировки.
Вопрос: Запускаю агента (FreeBSD 8.0), вижу:
datasource @@ failed to open pcap interface: BIOCSRTIMEOUT: Invalid argument
Что это? Как бороться?
Ответ: Это происходит из-за несовместимости дистрибутивного агента (собранного для FreeBSD 8.2) c локальной (более старой) системой. Необходимо перекомпилировать агента. Для этого надо:
Скачать исходные коды агента отсюда: [
http://www.netams.com/files/netams4/agents/n4agent-src.tar.gz] и распаковать их.- Скачать утилиту gmake и библиотеку libevent
В каталоге src/ выполнить сборку, получить агента [n4agent_pcap] и заменить им дистрибутивный.