Как установить flow tools на linux
Перейти к содержимому

Как установить flow tools на linux

  • автор:

Установка flow-tools

Пакет утилит для работы с NetFlow потоками, отправляемыми маршрутизаторами Cisco или Juniper.

Установка flow-tools на FreeBSD

flow-tools @ FreeBSD 11.1

flow-capture на FreeBSD 11.1 ведет себя нестандартно. Может поработать минуту и потом креш. Поэтому рекоммендуется ставить flow-tools следующим образом :

cd /usr/ports/net-mgmt/flow-tools make WITH_DEBUG=yes make install

Устанавливаем пакет, даем права пользователю на директорию статистики:

pkg install flow-tools mkdir -p /usr/abills/var/log/ipn chown flowtools /usr/abills/var/log/ipn/

Заносим flow-capture в автозагрузку :

/etc/rc.conf

flow_capture_enable="YES" flow_capture_datadir="/usr/abills/var/log/ipn/" flow_capture_port="9996" flow_capture_flags="-S 5 -n 287 -N 0 -d 5"

В данном случае, flow-tools запускаются со следующими опциями :

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

Количество ротаций файлов с записями о соединениях в сутки. 287 означает создание нового файла с данными netflow каждые 5 минут.

по порядку: адрес, на котором коллектор будет принимать netflow, адрес с которого коллектор будет принимать netflow и порт, на который коллектор будет принимать netflow.

Если первый заменить на 0, то коллектор будет принимать на любой адрес из доступных интерфейсов, если второй заменить на 0, то коллектор будет принимать netflow данные с любых адресов.

Этого делать не рекомендуется по одной простой причине: netflow не имеет никаких средств авторизации, поэтому если адрес, на котором коллектор принимает netflow, доступен кому-то еще,

то злоумышленник может послать ложные данные. Учитывая то, что данные netflow могут использоваться как для расчетов, так и выявления сетевых проблем и аномалий, лучше обезопаситься и

задать все жестко. Кроме того, можно запустить несколько коллекторов на разных адресах и/или портах, так же один коллектор может работать с несколькими роутерами одновременно и различать

их по полю engine-id.

/usr/local/etc/rc.d/flow_capture start
Запуск нескольких демонов flow_capture

Иногда возникают ситуации когда нужно запустить несколько процессов flow_capture для получения flow потоков от разных серверов доступа.

/etc/rc.conf

flow_capture_enable="YES" flow_capture_profiles="r1 r2" # описание первого демона на порту 9997 flow_capture_r2_datadir="/usr/abills/var/log/ipn/" flow_capture_r2_port="9997" flow_capture_r2_flags="-S 5 -n 1400 -N 0 -d 5" # описание второго демона 9996 flow_capture_r1_datadir="/usr/abills/var/log/ipn2/" flow_capture_r1_port="9996" flow_capture_r1_flags="-S 5 -n 287 -N 0 -d 5"

Установка flow-tools на Ubuntu / Debian

Устанавливаем пакет, даем права пользователю на директорию статистики:

apt-get install flow-tools mkdir -p /usr/abills/var/log/ipn

Меняем конфиг (параметры запуска те же что представлены в секции «Установка flow-tools на FreeBSD»):

echo "-S 5 -n 287 -N 0 -d 5 -w /usr/abills/var/log/ipn/ 0/0/9996" > /etc/flow-tools/flow-capture.conf

Заносим flow-capture в автозагрузку:

update-rc.d flow-capture defaults update-rc.d flow-capture enable

Для Debian 8 нужно создать симлинки, иначе traffic2sql работать не будет:

ln -s `which flow-cat` /usr/local/bin/flow-cat ln -s `which flow-print` /usr/local/bin/flow-print
/etc/init.d/flow-capture start

Установка flow-tools на CentOS 7

Устанавливаем flow-tools из epel rep, даем права пользователю на директорию статистики:

# скачиваем и устанавливаем крайний epel-release yum install wget -yq wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm rpm -Uvh epel-release*rpm # устанавливаем flow tools yum install flow-tools # директория и права mkdir -p /usr/abills/var/log/ipn chown -R flow-tools. /usr/abills/var/log/ipn

Меняем конфиг (параметры запуска те же что представлены в секции «Установка flow-tools на FreeBSD»):

echo 'OPTIONS="-S 5 -n 287 -N 0 -w /usr/abills/var/log/ipn/ 0/0/9996"' > /etc/sysconfig/flow-capture

Добавляем flow-capture в автозагрузку:

systemctl enable flow-capture

NFStats — анализ netflow данных для ISP «на коленке»

Приветствую! Продолжая рубрику «на коленке» (написал два года назад одну статью и уже рубрика), наконец у меня появилось время рассказать еще об одном проекте (а заодно и привести его в порядок), который используется у нас на сети небольшого транзитного провайдера для сбора и анализа статистики сетевого трафика .

Как и при анализе Ddos атак (link) проект использует в своей основе набор утилит flow-tools для сбора Netflow данных с сетевого оборудования. NFStats позволяет просматривать статистику в разрезе BGP автономных систем, IP-адресов, интерфейсов через web-интерфейс, что весьма полезно при балансировке трафика и общего понимания какой трафик проходит через/в/из вашу/ей AS. По описанию можно заметить сходство с Ntopng, однако NFStats предоставляет несколько иную статистику, более подходящую ISP.

Проект написан на python3 с использованием фреймворка django. Для отображения статистики используются google charts. Проект на Github

Оглавление:

Подготавливаем

Чтобы развернуть NFStats, как ранее было сказано, для начала нужно установить пакет утилит flow-tools. Во FreeBSD он доступен как пакет и из портов. В прошлой статье (link) я немного останавливался на описании и настройке flow-tools во FreeBSD и на оборудовании.

Для GNU/Linux его можно собрать только из исходников. Поэтому здесь можно разобрать это подробнее на примере Ubuntu.

Установка Flow-tools в Ubuntu

  1. Устанавливаем зависимости
sudo apt install build-essential tcpd zlib1g-dev
mkdir ~/src wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/flow-tools/flow-tools-0.68.5.1.tar.bz2
tar -xf flow-tools-0.68.5.1.tar.bz2 cd flow-tools-0.68.5.1 ./configure make install clean
adduser --system --no-create-home --shell /usr/sbin/nologin --group flow-toolsools
mkdir /var/flows chown -R flow-tools:flow-tools /var/flows
# cat /etc/systemd/system/flow-capture.service [Unit] Description=flow-capture [Service] ExecStart=/usr/local/flow-tools/bin/flow-capture -z0 -n1439 -N3 -E10G -e0 -S1 -w /var/flows -D -p - 10.0.0.1/10.0.0.10/99919991 User=flow-tools Group=flow-tools Restart=on-failure [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl start flow-capture sudo systemctl enable flow-capture

Кроме FreeBSD или GNU/Linux со flow-tools нам понадобятся:

  • SNMP клиент и настроенный протокол snmpv2c на сетевом оборудовании
  • Python 3.6 или выше (Для GNU/Linux также нужен пакет соответственно python3.6-venv или выше для виртуального окружения)
  • СУБД
    • PostgreSQL 9.6 или выше
    • MySQL 5.7 или выше
    • Oracle Database Server 12.2 или выше. Version 6.0 or higher of the cx_Oracle Python driver is required.

    Перейдем непосредственно к установке приложения

    Загружаем проект и подготавливаем виртуальное окружение.

    cd /var/www git clone https://github.com/owenear/nfstats.git cd nfstats python3 -m venv venv source venv/bin/activate pip install -r requirements.txt

    Далее, в активированном виртуальном окружении! необходимо установить адаптер для используемой вами СУБД. Например для Postgres:

    pip install psycopg2-binary
    postgres=# create database nfstats_db; postgres=# create user nfstats_dbuser with encrypted password 'nfstatsdbpass'; postgres=# grant all ON DATABASE nfstats_db to nfstats_dbuser;

    Создаем файл настроек для Django

    cd /var/www/nfstats/nfstats/nfstats cp settings.py.sample settings.py

    Вносим в него необходимые изменения

    DATABASES = < 'default': < 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'nfstats_db', 'USER' : 'nfstats_dbuser', 'PASSWORD' : 'nfstatsdbpass', 'HOST' : 'localhost', 'PORT' : '5432', >>
    ALLOWED_HOSTS = [ 'nfstats.example.com' ]
    TIME_ZONE = 'Europe/Moscow'

    Далее необходимо провернуть небольшой финт ушами для инициализации БД.

    Сначала комментируем в URL диспетчере Django /var/www/nfstats/nfstats/nfstats/urls.py подключение url’ов приложения

    urlpatterns = [ path('admin/', admin.site.urls), # path('', include('mainapp.urls')), ]

    Затем запускаем миграцию БД (Также в активированном виртуальном окружении)

    cd /var/www/nfstats/nfstats python manage.py migrate

    И снова подключаем url в /var/www/nfstats/nfstats/nfstats/urls.py

    urlpatterns = [ path('admin/', admin.site.urls), path('', include('mainapp.urls')), ]

    Создаем файл /var/log/nfstats.log с правами на чтение для пользователя под которым будет запущено web приложение (например www-data для Apache). Соответственно он должен иметь также права на чтение для папки /var/www/nfstats

    Проверяем также, чтобы к /var/www/nfstats/nfstats/flow-tools доступ на чтение имел пользователь flow-tools.

    Добавляем проект в настройки web-сервера. Пример для Apapche:

     ServerName nfstats.example.com DocumentRoot /var/www/nfstats Alias /static/ /var/www/nfstats/nfstats/static/ WSGIScriptAlias / /var/www/nfstats/nfstats/nfstats/wsgi.py WSGIDaemonProcess nfstats.example.com python-home=/var/www/nfstats/venv python-path=/var/www/nfstats/nfstats WSGIProcessGroup nfstats.example.com 

    Cкрипт /var/www/nfstats/nfstats/bin/interface_speed.py необходимо добавить в CRON на ежеминутное исполнение

    */1 * * * * /var/www/nfstats/venv/bin/python /var/www/nfstats/nfstats/bin/interface_speed.py

    Данный скрипт записывает скорости интерфейсов, на которых настроен съем статистики netflow (так называемый sampling) в базу данных. Эти значения используется для пересчета данных собранных flow-tools, что позволяет отображать правдивые данные относительно скорости даже при условии, что семплинг на оборудовании настроен не один к одному, а к примеру 1:2000 (то есть анализируется один из 2000 пакетов). Так, к примеру, советует Juniper для 10G интерфейсов. Это позволяет экономить ресурсы оборудования и место на диске.

    На этом разворачивание приложения закончено.

    Можно переходить к nfstats.example.com

    При первом открытии вас перенаправит на страницу настроек, где нужно будет добавить сетевое оборудование на котором настроен netflow с указанием где лежат данные, собранные flow-tools.

    На вкладке «System» можно отредактировать настройки связанные с SNMP, директориями, логированием. History — количество дней, которые будут храниться данные о скоростях (зависит от настроек flow-capture и объема собираемых данных)

    Далее, на вкладке «Interfaces» необходимо пополнить базу интерфейсов с оборудования. Жмем на «Read SNMP» и добавляем необходимые интерфейсы (обычно все). Тут надо отметить, что в списке появятся только те интерфейсы, на которых настроен «description» на оборудовании

    Отмечаем среди них те, на которых включен sampling (т.е. те, с которых снимается netflow). Обычно это будут Uplink интерфейсы, т.е будут собираться данные о трафике, который поступает и который уходит из нашей автономной системы.

    Ну, и наконец использование

    Переходим на nfstats.example.com. На вкладке «Common Stats» отображается статистика по автономным системам. Так называемые pie-charts интерактивны, при нажатии на номер AS отобразится ее имя в базе Ripe. Direction меняет направление трафика. Input — входящий в интерфейс трафик, Output — соответственно исходящий.

    «BGP AS» — показывает распределение трафика по интерфейсам для конкретной source и/или destination AS.

    «Interface» отображает похожее распределение только для определенного интерфейса. Здесь можно выбрать или ввести snmpid только тех интерфейсов, для которых НЕ! включен сэмплинг.

    И «IP» — топ статистика по ip-адресам с возможностью различной фильтрации. При клике на отдельный «bar» также выводится информация о названии сети и кнопка «show traffic», которая позволяет просмотреть подробный вывод netflow данных для выбранного ip-адреса

    Как видите, я постарался как можно подробнее описать процесс установки и использования (что было в моих силах). Кое-какую документацию я положил и в репозиторий на Github.

    Но я конечно готов ответить на вопросы, если такие возникнут.

    UPD: Добавлена поддержка коллектора из пакета NFDUMP. А с ним и поддержка netflow-v9 и ipfix.

    Установка и использование flow-tools

    Flow-tools — набор утилит для отправки, сбора, обработки, анализа данных NetFlow.

    Установим коллектор, который будет принимать статистику с сенсоров:

    sudo apt-get install flow-tools

    Откроем файл конфигурации, например в текстовом редакторе nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

    sudo nano /etc/flow-tools/flow-capture.conf

    Закоментируем все и добавим в конце строку:

    -w /var/log/flow -n 275 0/192.168.0.5/555

    Ключ -w указывает директорию хранения файлов, -n указывает количество ротаций файлов за день (то есть в моем случае каждый день будет сохранятся 275 файлов, при большом трафике мелкие файлы потом легче анализировать), 0 означает что нужно слушать все сетевые интерфейсы, 192.168.0.5 адрес сенсора с которого будут приниматься статистика, 555 порт на который будут приходить данные с сенсора.

    Создадим директорию для файлов:

    sudo mkdir /var/log/flow

    Перезапустим flow-capture чтобы применить изменения в конфигурационном файле:

    sudo service flow-capture restart

    Проверить работает ли flow-capture можно так:

    sudo service flow-capture status sudo netstat -lpnu|grep flow-capture netstat -anpl |grep 555

    Ошибки и попытки прислать статистику от сенсоров, будут писаться в /var/log/syslog.
    Можем посмотреть так:

    sudo less /var/log/syslog | grep flow

    Если используется iptables, то разрешим входящие UDP соединения на порт 555 всем:

    sudo iptables -A INPUT -p udp --dport 555 -j ACCEPT

    Либо конкретному адресу или сети:

    sudo iptables -A INPUT -s 10.0.0.0/24 -p udp --dport 555 -j ACCEPT
    • Нажмите, чтобы открыть на Facebook (Открывается в новом окне)
    • Нажмите, чтобы поделиться на Twitter (Открывается в новом окне)
    • Нажмите, чтобы поделиться записями на Pinterest (Открывается в новом окне)
    • Нажмите, чтобы поделиться на LinkedIn (Открывается в новом окне)
    • Нажмите, чтобы поделиться записями на Tumblr (Открывается в новом окне)
    • Нажмите, чтобы поделиться в Telegram (Открывается в новом окне)
    • Ещё
    • Нажмите, чтобы поделиться записями на Pocket (Открывается в новом окне)
    • Нажмите, чтобы поделиться на Reddit (Открывается в новом окне)
    • Нажмите, чтобы поделиться в WhatsApp (Открывается в новом окне)
    • Нажмите для печати (Открывается в новом окне)

    настройка сервера для учёта интернет-трафика по netflow

    Netflow очень популярен в сетевом мире, с одной стороны из за того что это один из двух основных методов получения детальной статистики с роутеров cisco (второй метод это ip accounting но он дает гораздо меньшую детализацию), с другой стороны, под так любимые все в том же сетевом мире OS xxxBSD и Linux которые часто используют для роутинга есть программы способные выдавать с них информацию о проходящих пакетах по netflow. Примерами таких програм являются ipcad, fprobe, fprobe-ng, fprobe-ulog, в freebsd так же помоему есть netgraph модуль для этих целей, а посему почему бы не использовать это для снятия статистики и учета? в том числе и денег:)
    Принцип работы netflow прост – есть netflow exporter и netflow collector. exporter это то что тем или иным способом снимает информацию о прохождении пакетов через роутер, далее exporter отсылает эту информацию по udp на колектор, никаких подтверждений о посылке/приеме не предусмотрено поэтому если посылка не удалась данные теряются, исходя из этого необходимо предусмотреть надужную связь между экспортером и коллектором, колектор же это программа как правило на nix машине которая слушает определенный порт в ожидании посылок от экспортера, при приходе оной колектор обрабатывает и записывает эти данные. колекторов и экспортеров много разных, настройку экспортеров я рассмтаривать не буду, а рассмотрю работу с одним из колекторов – flow-tools.

    Учтановка и настройка netflow коллектора

    Вся установка будет производится на сервере с CentOS 6.7. Для начала добавляем репозиторий EPEL

    rpm -ihv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    Дальше стандартная установка

    yum install flow-tools

    Добавляем в автозагрузку

    chkconfig flow-capture on

    Настраиваем параметры запуска коллектора flow-capture, для этого правим файл /etc/sysconfig/flow-capture под свои нужды,

    # Change the source IP and port to what is used on your network OPTIONS="-n 287 -N 0 -w /var/flow-tools -S 5 0/0/9995"

    -n-количество ротаций файлов с записями о соединениях в сутки, по умолчанию 297 что равно каждые 5 минут, тоесть по прошествии каждых 5 минут создается новый файл и поступающие данные пишутся в него, работает на самом деле странновато в том плане что поидее если поставить 1 то по идее должен бы получаться 1 файл в сутки, однако на практике получается 2, с 0 получается как раз 1

    -N-так называемый nesting_level, определяет структуру директорий которая будет создаваться при записи файлов с соединениями

    Configure the nesting level for storing flow files. The default is 0. -3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file -2 YYYY-MM/YYYY-MM-DD/flow-file -1 YYYY-MM-DD/flow-file 0 flow-file 1 YYYY/flow-file 2 YYYY/YYYY-MM/flow-file 3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file

    -w- дирректория куда будет складываться статистик neflow.

    -S 5- каждые 5 минут колектор будет скидывать статистику о своей работе в лог, самое интересное там это количество потеряных посылок которые не дошли до коллектора

    0/0/9995- по порядку – адрес на котором колектор будет принимать netflow, адрес с которого колектор будет принимать netflow и порт на который колектор будет принимать netflow, если первый заменить на 0 то колектор будет принимать на любой адрес из доступных интерфейсов, если второй заменить на 0 то соответсвенно будет принимать netflow данные с любых адресов, этого делать не рекомендуется по одной простой причине – netflow не имеет никаких средств авторизации а посему если адрес на котором колектор ждет netflow доступен кому то еще то он может послать ложные данные, учитывая то что netflow данные могут использоваться как для расчетов так и выявления сетевых проблем и аномалий то лучше обезопаситься и задать все жестко.

    Создадим директорию для логов:

    mkdir -p /var/log/flow

    И запускаем коллектор

    service flow-capture start

    На всякий случай убеждаемся что коллектор слушает нужный порт:

    netstat -lpnu|grep flow-capture

    В случае если всё хорошо — вывод будет выглядеть примерно вот так:

    udp 0 0 192.168.0.252:9995 0.0.0.0:* 3062/flow-capture

    Если же коллектор не запустился — внимательно проверьте его настройки. Через некоторое время в указанной директории начнут собираться логи. Остаётся только написать скрипты для генерации отчётов на основе эти логов. Создадим директорию /etc/scripts/flows, все дальнейшие действия мы будем производить в ней:

    mkdir /etc/scripts/flows

    Создадим файл flow.acl, в котором опишем необходимые нам спискидоступа, этот файл потом будет использоваться утилитой flow-filter:-filter:

    ip access-list standard localnet permit 192.168.0.0 0.0.0.255 ip access-list standard localnet deny any ip access-list standard internet deny 192.168.0.0 0.0.0.255 ip access-list standard internet permit any

    Здесь список localnet описывает адресное пространство локальной сети, а список internet описывает адресное пространство, трафик с которого мы будем считать. Если какие-то адреса нужно внести в «бесплатную зону» — их нужно добавить в список internet с директивой deny (По аналогии с адресным пространством локальной сети).

    Следующим шагом создадим файл report.conf, который будет использоваться утилитой flow-report:

    stat-report localnet type ip-destination-address output format ascii options +header,+xheader,+totals fields -flows,-packets,-durationstat stat-definition localnet report localnet

    Похожие записи:

    1. Установка и настройка rsync
    2. Авторизиция на ssh сервере по ключу
    3. Как запустить программу в фоне, без привязки к терминалу
    4. -bash: /usr/sbin/ifconfig: Нет такого файла или каталога

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *