Linux netflow collector настройка

Обновлено: 01.07.2024

Биллинг принимает статистику только с известных ему IP-адресов. Поэтому в списке NAS-серверов интернет должны быть IP-адреса всех маршрутизаторов с которых отправляется Netflow, даже если это border или маршрутизаторы ядра.

Если Netflow приходит не с NAS, то просто добавьте в список NAS по инструкции Пользовательская схема или добавьте хук фаервола, например:

Убедитесь что биллинг слушает порт 9996

При настройке передачи статистики по netflow указывайте 5-ю версию. Также статистику по netflow нужно передавать на локальный интерфейс.

Для начала убедитесь, что UDP-порт для приёма указан, по дефолту большая часть NAS-серверов использует 9996 порт.

Проверьте, что сервер действительно слушает на нём:

NetFlow коллектор

Почти любом оборудовании настройка netflow потока сводится к указанию адреса и порта netflow-коллектора, в данном случае Carbon Billing.

Порт Carbon Billing по умолчанию - 9996.

Mikrotik

Примечание: все (all) интерфейсы должны быть выбраны в Trafic Flow

По настройке netflow на mikrotik есть статья в официальной документации Mikrotik

Cisco

По настройке netflow на cisco есть отличная статья на opennet

D-link

Возможно потребуется отключение опции blat attack

То, что netflow пакеты приходят на Carbon Billing можно проверить следующим образом. Заводим тестового абонента, который ходит в интернет через NAS.

Запускаем на tcpdump на Carbon Billing:

После этого попробуйте сгенерировать пользователем какой-либо трафик, одновременно наблюдая за tcpdump'ом.

Спустя небольшой промежуток времени после завершения соединения у пользователя вы должны увидеть пришедшие от NAS netflow-пакеты.

Решение проблем

Внимание: Трафик биллинг учитывает и добавляет в расход по умолчанию только по абонентам с активными услугами трафика. Если услуга трафика неактивна - в расход трафик добавлен не будет.

Если в расходе абонента трафик не появляется, проверьте следующее:

    В первую очередь, убедитесь что коллектор включен:

В примере - коллеткор включен.
Если будет "0", значит коллектор выключен. Включите его в настройках коллектора, опция "Агрегировать статистику"

Любой системный администратор рано или поздно сталкивается с необходимостью сбора статистики по расходованию трафика, используя которую, он всегда сможет ответить на вопросы начальства: кто, на какие адреса, когда и сколько. Для решения этой задачи сегодня создано множество решений и технологий, наиболее популярным из них является NetFlow.

Несколько слов о NetFlow

Сетевой протокол NetFlow изначально разрабатывался Cisco (goo.gl/vM2l7) для технологии коммутации пакетов в устройствах этой корпорации, но сегодня используется, в основном, для учета трафика. Его спецификации открыты, поэтому со временем NetFlow стал стандартом и применяется не только в Cisco, но и решениях других фирм (вроде Juniper и Enterasys) и ОС.
На сегодня известно несколько версий. Протокол NetFlow v1, созданный в 1990 году, использовался в маршрутизаторах для коммутации пакетов, когда первый пакет потока создавал запись в таблице маршрутизации (по сути кэш), которая затем применялась ко всему потоку. Примерно такая же технология сегодня задействуется и в Netfilter. Последней на сегодня является девятая версия протокола, вышедшая в октябре 2004 года и описанная в RFC 3954. На основе v9 с несколькими расширениями был создан протокол IPFIX (IP Flow Information Export, RFC 3917), который в кулуарах называют NetFlow v10. При этом v2-4 являются внутренней реализацией Cisco, не получившей большого распространения. Поэтому после первой версии сразу появилась наиболее популярная v5, возможностей которой достаточно для большинства задач в IPv4 сетях. Сетевой трафик анализируется на уровне сеансов, запись (flow record) создается для каждой транзакции TCP/IP. В v5 сохраняются данные о версии протокола, интерфейсах, времени начала и окончания соединения, IP и портах источника и назначения, количестве байт и пакетов, TOS и TCP флаги. Девятая версия понимает заголовки IPv6, метки потоков MPLS, адрес шлюза BGP и дополнительные поля. Например, в Cisco ASA NetFlow используется для динамического отслеживания потоков. Чтобы выявить различные события, как раз и задействуются специальные поля v9 (Netflow Security Event Loging, NSEL), которые затем сопоставляются с шаблонами.
Для сбора и последующего анализа информации о трафике по протоколу NetFlow требуется наличие следующих компонентов:

Устанавливаем сенсор на Linux

Поддержка сенсоров NetFlow сегодня реализована во многих аппаратных маршрутизаторах, прошивках DD-WRT и ОС. Например, в анонсированном недавно VMware vSphere 5 появилась поддержка Netflow v5, предоставляющая возможность просматривать трафик между виртуальными машинами на одном или разных хостах. Отслеживая поток трафика приложений внутри виртуальной машины, админ может контролировать производительность сети и целевое использование трафика. Для Cisco активация NetFlow для передачи на коллектор 192.10.0.2:9001 очень проста:

Вот далеко не все варианты NetFlow-сенсоров, при помощи которых можно собирать статистику в разных ОС:

Графики, выдаваемые Flowscan

Если в сети уже есть работающий маршрутизатор, выдающий NetFlow, эту часть статьи можно пропустить. Мы же предположим, что у нас настроен роутер на Ubuntu/Debian, и мы хотим собирать статистику.

В процессе установки пакета будут заданы вопросы относительно интерфейса для сбора статистики и хоста коллектора (нужно указать IP-адрес и номер порта). После чего стартует демон с указанными настройками. В последующем все параметры можно изменить в файле /etc/default/fprobe:

Указываем IP-адрес коллектора при установке fprobe


Аргументов у fprobe очень много, в высоконагруженных сетях возможно потребуется корректировка приоритета (установкой r больше 0), буфера ядра для захвата пакетов (B и q), задержки между отправками (t). Теперь при помощи tcpdump можно просмотреть отправляемые на удаленную систему пакеты.

Коллектор

Работу nfcapd и nfdump в большинстве случаев настраивают через NfSen. Именно поэтому все демоны пакета nfdump по умолчанию не стартуют, в чем легко убедиться, заглянув в /etc/default/nfdump:

Но для начала удостоверимся, что все работает. Запускаем демон для сбора nfcapd статистики, в качестве параметра указываем каталог для хранения файлов и UDP порт:

Настраиваем NFSen

Переходим к настройке NFSen. В репозитариях нужного пакета нет, поэтому установку нужно производить вручную. Само приложение написано на PHP и Perl, для построения графиков используется RRDtool. Для его работы потребуется стандартный LAMP сервер и Perl модули Mail::Header и Mail::Internet. Устанавливаем приложения для удовлетворения зависимостей:

Скачиваем и распаковываем последнюю версию.

Статистика, собранная NFSen

Переименовывем и правим шаблон конфигурационного файла. В начале файла идет много переменных, указывающих на каталоги установки, в большинстве случаев нет необходимости их изменять.

Кроме этого, в файле можно установить буфер для nfcapd, расширения для каждого коллектора, настроить каталоги для сбора данных и многое другое. Ставим.

Скрипт проверит наличие необходимых Perl-модулей, после чего скопирует компоненты по указанным в nfsen.conf каталогам. Запускаем nfsen, он активирует процессы nfcapd:

Создаем настройки для Apache:

5 комментариев

Тогда какой способ вы бы посоветовали?

Народ, подскажите. Как с одного сервера перенести данные на другой ?

был сервер без nfsen собирал статистику через nfdump. На другом сервере поднял nfsen (по этой статье) данные закинул в папку с пользователем live. Графики пустые. Создал нового пользователя через веб, автоматически создались нужные каталоги. Согласно их структуре скинул в него данные (nfcapd.20171111 и тд). Перезапустил службы. Графики всё равно пустые.

Собственно есть данные nfcapd. от старого сервака. Нужно добавить их к новому. Просто скопировать не помогло. Может есть ньюансы ? подскажите пожалуйста.

Следим за трафиком при помощи протокола NetFlow.

  1. сенсор;
  2. коллектор;
  3. обработчик данных, визуализатор.

Запись о каждом сетевом соединении (flow record) содержит такую информацию, как время начала и окончания соединения, количество переданных байт и пакетов, IP-адреса источника и получателя, порты и тип IP-протокола. Этими записями удобно манипулировать: подсчитывать трафик, генерировать отчеты и т.п.

NetFlow? Да!

Сначала мы настроим сенсоры на машинах в сети, затем сконфигурируем коллектор, в который сенсоры будут отправлять информацию о трафике. Потом рассмотрим примеры того, как с помощью NetFlow-данных, специальных утилит для работы с ними и базовых знаний в области shell-скриптинга ответить на вопросы типа упомянутых выше. Задача эффектной визуализации полученных данных выходит за рамки этой статьи и будет решена в следующих номерах журнала.

Существует множество программных реализаций компонентов NetFlow под *nix-подобные системы. Мы остановимся на следующих:

  • softflowd в качестве NetFlow-сенсора;
  • flow-tools в качестве утилит для сбора информации о трафике и работы с ней.

В качестве коллектора будем использовать машину под управлением FreeBSD 6. Сенсор поставим на шлюз под управлением OpenBSD 4.1.

Установка и настройка

Установку flow-tools на FreeBSD будем производить штатно, из портов:

$ cd /usr/ports/net-mgmt/flow-tools
$ sudo make install clean

В результате будет установлена масса утилит для работы с NetFlow. Подробную информацию о том, что же поставлено из порта, можно получить, например, с помощью команды:

$ pkg_info -L flow-tools-0.68_1

/usr/local/bin/flow-capture -p /var/run/flow-capture.pid -N 3 -w /var/log/netflows -S 5 192.168.76.146/192.168.76.147/8818

В результате нашей настройки коллектор будет слушать на хосту 192.168.76.146 (порт 8818/udp) и принимать соединения с коллектора на машине 192.168.76.147.

Осталось только прописать коллектор в автозапуск. К сожалению, порт flow-tools не содержит rc-скрипт для запуска коллектора в FreeBSD-стиле, поэтому мы сами создадим flowd.sh следующего содержания:

Благодаря изумительным pkg_tools установка сенсора на OpenBSD необременительна. При прописанной PKG_PATH набираем:

$ sudo pkg_add softflowd-0.9.8

И дело в шляпе. Прописать демон в автостарт «по-опенковскому» также не представляет проблем. В /etc/rc.local добавляем:

Управляем!

Если все запущено и работает корректно, то на сенсоре мы увидим примерно следующую информацию по текущим netflow-потокам:

А в каталоге /var/log/netflows должны появиться собранные данные:

$ ls -la /var/log/netflows/2007/2007-05/2007-05-14
drwxr-xr-x 2 root wheel 3584 14 май 18:45 ./
drwxr-xr-x 16 root wheel 512 14 май 00:00 ../
-rw-r--r-- 1 root wheel 19309 14 май 00:15 ft-v05.2007-05-14.000001+0400
-rw-r--r-- 1 root wheel 18022 14 май 00:30 ft-v05.2007-05-14.001501+0400
-rw-r--r-- 1 root wheel 21379 14 май 00:45 ft-v05.2007-05-14.003001+0400
-rw-r--r-- 1 root wheel 20607 14 май 01:00 ft-v05.2007-05-14.004501+0400
.

Нам понадобятся следующие утилиты:

  • flow-cat для конкатенации нескольких netflow-файлов;
  • flow-stat для генерации отчетов по netflow-файлам;
  • flow-print для вывода информации о netflow-потоках в текстовом виде.

Перечень задач, которые можно решать с помощью flow-tools, ограничивается только фантазией администратора. Попробую очертить типичный круг задач, под которые будут написаны скрипты:

  • Уведомление администратора о превышении какой-либо машиной дневного лимита трафика в N Мб с возможностью блокировки этой машины пакетным фильтром «до выяснения обстоятельств».
  • Уведомление администратора о превышении каким-либо сервером месячного лимита трафика в N Гб. Информативно и полезно для самоконтроля, например, в ситуации, когда в конторе имеются серверы, а оплата интернета производится по трафику с оплаченным лимитом.
  • Детальная, отсортированная netflow-информация по трафику за любой день, месяц, год. Удобна для выяснения вопросов вроде: «А кто и откуда у нас пятого числа качнул 800 мегабайт?».
  • Архивация старых netflow-данных (месячной давности).

Пример обработки записей с помощью flow-cat и flow-stat:


flowcat="/usr/local/bin/flow-cat"
flowstat="/usr/local/bin/flow-stat"
flows="/var/log/netflows"
$flowcat $flows/$year/$month/$day | $flowstat -f10 -p -S3

Результатом будет таблица из пяти колонок: src ip, dst ip, number of flows, number of bytes, number of packets. Выяснить, кто же превысил лимит, можно, например, так:

SUBJ="$INBOUND TRAFFIC ALERT"
MSG="Alert. Some of your machines gets more than 100 mbytes today. See details below."
$flowcat $flows/$year/$month/$day | $flowstat -f10 -p -S3 | tail -20 | \
while read SRC DST undef COUNT undef; do
if [ $COUNT -gt 100000000 ]; then
echo -e "$MSG\n$COUNT bytes from $SRC to $DST" | mail -s "$SUBJ" toxa
echo $DST >> /etc/pf.blockedusers
fi
done

В этом случае пользователю toxa высылается уведомление о том, что определенная машина выкачала более 100 Мб трафика, и ее адрес заносится в таблицу /etc/pf.blockedusers. В конфиге пакетного фильтра /etc/pf.conf имеем:

table persist file /etc/pf.blockedusers
block quick from to any

Разумеется, все примеры разумно разнести по соответствующим скриптам и выполнять их с помощью cron(8) с определенной периодичностью.

В этой статье собраны способы мониторинга трафика, проходящего через сервер. Чаще всего задача мониторинга встаёт для роутеров, обеспечивающих связь с интернетом.

Мониторинг в реальном времени

Для мониторинга трафика в реальном времени можно использовать утилиту jnettop :

Или, как вариант, vnstat с ключом –live :

Можно также воспользоваться достаточно удобной утилитой с псевдографическим интерфейсом, которая называется iptraf :

Журналирование активности средствами iptables

Стандартный пакетный фильтр iptables иногда может быть очень полезен для анализа какого-то конкретного типа трафика. iptables позволяет записывать в системный журнал активность по выбранным критериям. Например, с помощью iptables можно легко отследить, какой компьютер посылает данные во внешнюю сеть по 25 порту (SMTP ), таким образом вычислив заражённый компьютер в локальной сети.

Для записи данных в файл журнала предназначено действие LOG (и более мощное ULOG ). Подробный его синтаксис и возможные параметры можно посмотреть в документации по iptables .

К счастью, в Ubuntu существует простой способ рассортировать данные по нужным журналам средствами используемой системы журналирования rsyslog . Достаточно при записи в журнал добавлять некий уникальный префикс. Например, вот так:

Теперь все записи в журнале, соответствующие этому критерию, будут начинаться с «iptables: ». Осталось добавить правило сортировки в систему журналирования. Для этого можно создать файл /etc/rsyslog.d/10-iptables.conf со следующим содержанием:

Вторая строчка означает, что дальнейшую работу с этой записью производить не надо, т.е. она не должна попадать в другие журналы.

После создания нового файла конфигурации не забудьте переконфигурировать rsyslog :

Теперь вся активность, соответствующая добавленному правилу iptables, будет записываться в файл /var/log/iptables.log . Если вы хотите надолго оставить журналирование, то не забудьте добавить этот файл в систему ротации логов logrotate , а то в какой-то момент у вас может закончиться место на диске.

Подробней про управление записью журнала можно почитать в документации по rsyslog.

Утилиты Vnstat и Vnstati

Vnstat это очень простой инструмент для учёта трафика. Он есть в репозиториях Ubuntu, так что установка не вызывает сложностей. Vnstat не требует тонкой настройки, просто считает трафик и позволяет просматривать статистику. Для обычного пользователя этого чаще всего более чем достаточно.

Чтобы начать подсчёт трафика надо выполнить команду, которая создаст базу данных для указанного интерфейса:

Подсчёт трафика происходит автоматически, база данных обновляется при выключении сетевого устройства. Но есть возможность обновить базу вручную:

Для просмотра статистики достаточно просто ввести:

Также можно использовать ключи:

Vnstati это утилита для визуализации статистики, с ней тоже все просто. Вот, например, короткий скрипт, который выводит на экран статистику в виде картинки:

Обе утилиты имеют еще некоторые возможности, не забывайте про ключ --help и утилиту man!

Netflow - мониторинг с ведением статистики

Для мониторинга с ведением статистики одним из популярных решений является технология Netflow.

Для сбора статистики с помощью Netflow необходимо на нужные интерфейсы повесить специальные Netflow-сенсоры, которые будут собирать информацию и передавать Netflow-коллектору, который может располагаться на другой машине.

Информацию, собранную коллектором, можно визуализировать с помощью графического фронтенда, или же анализировать с помощью утилит командной строки.

В качестве сенсоров можно использовать доступные в стандартных репозиториях fprobe или softflowd .

Сенсор fprobe

Для установки сенсора fprobe можно, например, выполнить такую команду:

Установщик спросит, на каком интерфейсе слушать трафик, и куда передавать собранную статистику - введите нужные вам параметры и fprobe начнёт работать. Например, для Nfsen в примере ниже нужно указать порт 9995.

Автозапуск при перезапуске сети

Демон fprobe всегда аварийно завершается, когда интерфейс, к которому он привязан, выключается (переходит в состояние DOWN). И не запускается автоматически снова, когда интерфейс возобновляет работу.

Если вам по каким-то причинам нужно периодически переключать интерфейсы, то чтобы обойти данную проблему fprobe можно в файл /etc/network/interfaces после описания интерфейса добавить строчки

Например, могло бы получится нечто похожее на:

Теперь при использовании утилит, которые перечитывают этот файл ( ifup и ifdown ), fprobe будет корректно завершаться и автоматически запускаться при переключении состояния интерфейса. При этом при старте системы fprobe будет пытаться запуститься два раза (один раз стандартным способом, другой - через /etc/network/interfaces ), и хотя у него это не получится, но всё же для порядка лучше автозапуск системного демона fprobe убрать:

Несколько демонов fprobe на одном компьютере

Если вы хотите запустить на одном компьютере сразу несколько демонов fprobe (чтобы слушать несколько интерфейсов), то придётся немного изменить стартовые скрипты.

Для начала отредактируйте имеющийся стартовый скрипт /etc/init.d/fprobe , заменив в нём строчку

И, кроме этого, строчку

Первое число добавленного параметра запуска -l («1») говорит fprobe использовать syslog для журналирования, а второе является идентификатором процесса. Именно второе число и нужно менять при запуске нескольких копий fprobe , и оно же должно стоять в квадратных скобочках в параметре NAME соответствующего стартового скрипта.

Теперь, чтобы создать все необходимые параметры и скрипты для запуска второй копии fprobe , скопируйте /etc/init.d/fprobe в /etc/init.d/fprobe_1 :

И /etc/default/fprobe в /etc/default/fprobe_1 :

Отредактируйте /etc/default/fprobe_1 для работы со вторым интерфейсом.

Теперь надо отредактировать стартовый скрипт /etc/init.d/fprobe_1 для второго процесса fprobe . Замените числа в параметре NAME и DAEMON_OPTS на нужные:

Кроме этого, измените код загрузки конфигурационного файла таким образом, чтобы он обращался к файлу fprobe_1. Вместо примерно следующего:

должно получится что-то вроде:

Также в новых версиях Ubuntu в начале этого файла содержится специальный комментарий для системы загрузки. Он начинается со строчки

В этом комментарии также необходимо заменить строчку

Убедитесь, что всё работает, как надо. Для этого запустите оба fprobe , потом загляните в любой менеджер процессов (например, htop ) и найдите там оба демона.

Если всё нормально, то добавьте второй демон fprobe в автозагрузку командой

Конечно, если вы пропишете запуск второго демона fprobe в /etc/network/interfaces , то добавлять его в автозагрузку не стоит.

Таким образом можно запустить сколько угодно демонов fprobe , просто меняя идентификатор.

Коллектор Nfdump и визуализатор данных Nfsen

В качестве сенсора для этой связки можно использовать любой доступный, например fprobe или softflowd .

Nfdump можно поставить через любой пакетный менеджер, например, командой

Nfsen необходимо распаковать куда-нибудь на сервер из архива с исходными текстами и выполнить несколько несложных операций. Для начала необходимо поставить все нужные для работы пакеты:

После этого зайти в папку etc/ в директории, куда вы распаковали Nfsen, и переименовать находящийся там файл nfsen-dist.conf в nfsen.conf . Это основной конфигурационный файл Nfsen. Его необходимо отредактировать под ваши нужды. Ниже приведены только опции, которые нужно изменить для базовой конфигурации Nfsen:

Подробную документацию по доступным возможностям можно почитать на официальном сайте Nfsen.

После редактирования конфига можно установить Nfsen. Для этого достаточно из директории, куда вы его распаковали, выполнить команду

Всё, что осталось, это запустить Nfsen. В примере выше в качестве директории для установки Nfsen указан путь /srv/nfsen/. В этом случае для запуска можно использовать команду

Чтобы интегрировать Nfsen в систему качестве автоматически запускаемого сервиса выполните две примерно такие команды:

Учтите, информация начнёт собираться не сразу, так что необходимо некоторое время, перед тем, как на графиках что-то появится. Ну и конечно в сети должны быть сенсоры, посылающие информацию по указанным портам.

Для мониторинга скорости соединения и трафика можно также использовать стандартный апплет панели cairo-dock - netspeed и популярное средство системного мониторинга conky.

Читайте также: