Этот способ сбора данных о трафике (источник) позволяет собирать информацию на одной машине (PC-роутере), и передавать ее на другую машину (сервер биллинга) по сети. Конечно, в простом случае это может быть одним компьютером.
Внимание: метод запуска агента поменялся с версии 4.0.1236 (нет конфиг-файла агента).
Сбор данных осуществляется через библиотеку libpcap, аналогично утилитам tcpdump и Wireshark. Преимуществом данного подхода являеются:
- уход от медленной и ненадежной (FreeBSD) библиотеки jnetpcap
- возможность разнести пропуск трафика и обработку статистики на разные машины (и разные платформы)
- возможность осуществлять блокировку по трафику (FreeBSD через pf или ipfw, Linux через ipset)
Вопрос: Почему бы не работать через ipfw вместо pcap?
Ответ: Работа по механизму ipfw в части захвата трафика предусматривает копирование пакета из kernel space в user space два раза, что замедляет работу сервера-маршрутизатора. К тому же, такой подсчет не корректно работает в случае трансляции адресов, является потенциально небезопасным (не работает биллинг-трафик не ходит вообще, сервер недоступен). С другой стороны, ничто не мешает использовать RemoteAgentDataSource в режиме сбора статистики через libcap, а в режиме блокирования применять не pf, а работать с таблицами ipfw.
"Удаленный агент" представляет собой программу, собранную статически (нет зависимостей от внешних библиотек), работающую под операционными системами Linux и FreeBSD (агент собран как 32-бит приложение, и может работать на 64-бит архитектуре). Агент слушает проходящий мимо указанного сетевого интерфейса трафик, фильтрует его согласно заданной политике, формирует потоки статистики, и отправляет их в сторону сервера биллинга. Протокол обмена - собственный, поверх 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 |
Правило, которым на стороне агента происходит фильтрование трафика. Если не задано, то выставляется на стороне агента. По умолчанию "весь трафик". |
url_detect |
Включить детектирование URL (посещенных сайтов и ссылок) в проходящем трафике. Подробнее описано здесь |
enable_dpi |
Включить глубокое инспектирование пакетов в проходящем трафике - определение приложения (экспериментально) |
Агент на "удаленной стороне" - UNIX-демон. Скачать исходники и собранные бинарики можно с сайта, или взять в дистрибутиве из каталога jserver/agent.
Запускается агент так:
demo:~#n4agent_pcap -c 127.0.0.1:20002 -p /var/run/n4agent.pid -d -q
Параметры командной строки:
Параметр |
Описание |
-q |
Ничего не выводить при запуске, работать молча |
-p pidfile |
Имя файла, в котором будет храниться идентификатор процесса |
-d |
Становиться демоном (работать в фоновом режиме) |
-c conn_str |
Параметры подключения к сервису биллинга (RemoteAgentDatasource), адрес сервера и UDP-порт (по умолчанию localhost:20002) |
-r rule |
Правило фильтрации (man tcpdump). По умолчанию отсутствует (весь трафик) |
-i ifname |
Интерфейс, на котором слушает PCAP (надо исправить на имя нужного локального интерфейса) |
-e filename |
Имя shell-скрипта, который вызывается для блокировки трафика посредством помещения |
-h |
Печать списка допустимых параметров. Выводится по умолчанию, если не заданы параметры. |
-b bufsize |
Размер буфера PCAP в мегабайтах (от 1 до 256) - полезно при высокой нагрузке по трафику. |
-t timeout |
Таймаут неактивных соединений, в сек. (по умолчанию 300). Активных - впятеро больший. |
-s pwd |
Подписывать обмен данными с сервером паролем (по умолчанию: password) |
Конфигурационного файла агента более нет.
Переданные при старте параметры имени интерфейса или правила фильтрации могут быть переопределены в конфигурации источника данных RemoteAgentDatasource. Это произойдет в момент коннекта и регистрации агента у источника даных. Попытки коннекта производятся постоянно, таким образом агент "переживает" перезагрузку биллинга, или перезапуск источника данных.
Для автоматизации запуска агента при загрузки системы созданы специальные стартап-скрипты для ОС FreeBSD и Linux, которые помещены в каталог jserver/agent. Их же можно взять с сайта http://www.netams.com/files/netams4/agents/ . Вы можете использовать биллинг под одной операцинной системой (в том числе Windows), а агенты - под другой (Linux или FreeBSD).
Если работающему процессу n4agent послать сигнал -USR1, то в конец системного лог-файла (/var/log/messages или /var/log/daemon.log) запишется статус о работе агента (состояние связи с сервером, сколько потоков обработано и проч).
При работе агента с указанием параметра -e (скрипт блокировки) на самом деле запускаются два процесса: первый для обработки трафика и работы с биллингом, второй для запуска команд блокировки-разблокировки.
Вопрос: Запускаю агента (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] и заменить им дистрибутивный.
В режиме поддержки блокировки биллинг присылает агенту команды на блокировку-разблокировку заданных IP-адресов. Агент передает эти команды так называемым access-скриптам, указанным в параметрах командной строки через ключ -е. Сами скрипты идут в дистрибутиве, и их можно скачать там же, где и агенты. Скрипты вызывают системные утилиты добавления-удаления записей в межсетевой экран операционной системы (pf/ipfw/iptables). При этом вам необходимо самостоятельно:
- настроить создание соответствующих цепочек (таблиц) при старте ОС
- решить, что делать с трафиком, IP-адреса для которого содержатся в данных таблицах, управляемых биллингом. Фактически, настроить правила пропуска (или ограничения).
Вопрос: Почему у меня агент не запускается из стартап-скрипта?
Ответ: Поправьте стартап-скрипт. Существует множество версий дистрибутивов поддерживаемых операционных систем, и у каждой свои прихоти. Мы не в состоянии поддреживать идеально работоспособные скрипты для всех возможных вариантов. Наша компания не специализируется на бесплатной системном администрировании вашей ОС. Изучайте инструкции и документацию на вашу систему, или обратитесь сюда за поддержкой на коммерческой основе.
Вопрос: Почему у меня агент запускается, статистика собирается, но трафик блокированных абонентов продолжает ходить?
Ответ: Наша компания не специализируется на бесплатной системном администрировании вашей ОС. Изучайте инструкции и документацию на вашу систему, разберитесь в работе межсетевого экрана, или обратитесь сюда за поддержкой на коммерческой основе.