Прием IPFIX данных ipfixreceiver [Документация VAS Experts]

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
dpi:dpi_components:utilities:oldutility:ipfixreceiver [2023/09/01 07:55] elena.krasnobryzhdpi:dpi_components:utilities:oldutility:ipfixreceiver [2024/09/26 15:29] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
-====== ipfixreceiver ======+====== Прием IPFIX данных ipfixreceiver ====== 
 +===== Введение ===== 
 + 
 +Утилита предназначена для приема потока данных от устройств по протоколу IPFIX и сохранением данных в виде файла для последующей обработки их другими средствами. 
 + 
 +===== Инсталляция и обновление ===== 
 +==== CentOS6 ==== 
 + 
 +  - подключите репозиторий VAS Experts <code>rpm --import http://vasexperts.ru/centos/RPM-GPG-KEY-vasexperts.ru 
 +rpm -Uvh http://vasexperts.ru/centos/6/x86_64/vasexperts-repo-1-0.noarch.rpm</code> 
 +  - установите ipfixreceiver:\\ <code>yum install -y ipfixreceiver</code> 
 +  - проверьте изменения в конфигурационных файлах на соответствие версии см. раздел "Важные изменения" 
 + 
 +==== CentOS7 ==== 
 +  - подключите репозиторий VAS Experts <code>rpm --import http://vasexperts.ru/centos/RPM-GPG-KEY-vasexperts.ru 
 +rpm -Uvh http://vasexperts.ru/centos/6/x86_64/vasexperts-repo-1-0.noarch.rpm</code> 
 +  - установите репозиторий epel <code>yum -y install epel-release</code> 
 +  - установка репозитория forencis: <code>rpm --import https://forensics.cert.org/forensics.asc 
 +rpm -Uvh https://forensics.cert.org/cert-forensics-tools-release-el7.rpm</code> 
 +  - установите ipfixreceiver:\\ <code>yum -y install libfixbuf --disablerepo=forensics 
 +yum -y install  netsa-python netsa_silk 
 +yum -y install ipfixreceiver --disablerepo=forensics</code> 
 +  - проверьте изменения в конфигурационных файлах на соответствие версии см. раздел "Важные изменения" 
 + 
 +===== Важные изменения в версии 1.0.3 по отношению к 1.0.2 ===== 
 +  - изменен конфигурационный файл в части преобразования IP адресов, с версии 1.0.3 необходимо указывать decodeipv4, decodeipv6 в экспортной модели, пример:<code>  source_ip4, decodeipv4</code><code>  destination_ip4, decodeipv4</code> 
 +  - сохранение информации в файл вынесено в отдельный процесс, учитывайте что при большом количестве сессий (>25k сес/сек) процесс будет полностью загружать 2 ядра процессора. Для проверки, что процесс успевает обработать весь поток данных в режиме DEBUG добавлены сообщения\\ (a)cnt=NNNNN - отправлен буфер с данным номером\\ (b)cnt=YYYYY - сохранен буфер с данным номером. 
 +  - введен параметр buffer_size - размер буфера обмена между процессом приема и записи в файл, используется в разделе [dump], по умолчанию значение параметра 100000 записей (ориентировано на 20Гбит трафика или 25 000 сессий в сек). Если количество сессий в секунду значительно меньше, то обязательно пропорционально измените данный параметр.  
 + 
 +===== Файлы поставки ===== 
 +  - примеры конфигурации:\\ <code>/etc/dpiui/ipfixreceiver.conf - пример конфигурации для clickstream (http запросы) 
 +/etc/dpiui/ipfixreceiverflow.conf - пример конфигурации для получения информации о сессиях (аналог netflow) 
 +/etc/dpiui/ipfixreceiversip.conf - пример конфигурации для получения информации о sip соединениях</code> 
 +  - файлы программы располагаются в директории:\\ <code>/usr/local/lib/ipfixreceiver.d/</code> 
 +  - вспомогательные файлы:\\ <code>/etc/dpiui/port_proto.txt - информация о трансляции идентификатора протокола в наименование, 
 +используется в утилите для получения текстового имени протокола</code> 
 +  - ссылки на исполняемый модуль:\\ <code>/usr/local/bin/ipfixreceiver -> линк на /usr/local/lib/ipfixreceiver.d/ipfixreceiver</code> 
 + 
 +===== Дополнительные настройки ОС ===== 
 +  - настройте iptables для приема внешних данных\\ Для работы ipfixreceiver'а требуется открыть порты которые так же будут использоваться в конфигурации в разделе [connect]\\ Например вами используются протокол TCP, 1500 порт и IP=212.12.11.10\\ <code>[connect] 
 +protocol=tcp 
 +host=212.12.11.10 
 +port=1500</code>\\ Для приема IPFIX потока у вас в /etc/sysconfig/iptables должно быть следующее правило:\\ <code>-A INPUT -p tcp -m state --state NEW -m tcp --dport 1500 -j ACCEPT</code> Не забудьте что после внесения правила в iptables требуется перезапуск:\\ <code>service iptables restart</code>  
 +  - настройте ротацию логов\\ Пример ротации для лог файла /var/log/dpiuiflow.log, создайте в директории /etc/logrotate.d/ файл flowlog следующего содержания <code> 
 +/var/log/dpiui*.log { 
 +    rotate 5 
 +    missingok 
 +    notifempty 
 +    compress 
 +    size 10M 
 +    daily 
 +    copytruncate 
 +    nocreate 
 +    postrotate 
 +    endscript 
 +}</code> \\ Обратите внимание на использование метода copytruncate, иначе файл будет пересоздан и запись лога из процесса прекратится.\\ Соответственно в конфигурации ipfixreceiver у вас в разделе [handler_ipfixreceiverlogger] указано следующее:\\ <code>args=('/var/log/dpiuiflow.log', 'a+')</code> 
 +  - Настройте удаление старых файлов. Например, удаление старых архивов (более 31 дня) с записями о сессиях запакованных gzip:\\ <code>15 4 * * * /bin/find /var/dump/dpiui/ -name url_\*.dump.gz -cmin +44640 -delete > /dev/null 2>&1</code>\\ Измените строчку под ваши требования и добавьте в файл /var/spool/cron/root. 
 + 
 +===== Параметры запуска программы ===== 
 +Утилита ipfixreceiver имеет следующие параметры запуска: 
 +<code>usage: ipfixreceiver start|stop|restart|status|-v [-f <config file>] 
 +где 
 +  start   - запуск в режиме сервиса 
 +  stop    - останов сервиса 
 +  state   - состояние работы сервиса 
 +  restart - перезапуск сервиса 
 +  -v      - вывести информацию о версии 
 +  -f <config file> - указать файл конфигурации для запуска сервиса 
 + 
 +Пример: 
 +  ipfixreceiver start -f /etc/dpiui/ipfixreceiverflow.conf 
 +</code> 
 +===== Конфигурация ===== 
 + 
 +По умолчанию используется файл конфигурации /etc/dpiui/ipfixreceiver.conf.\\  
 +:!:Больше информации о конфигурировании логирования можно найти по ссылке [[https://docs.python.org/2.6/library/logging.html | Logging ]] 
 + 
 +==== Служебные разделы ==== 
 +  - loggers - определяет используемые лог идентификаторы 
 +  - handlers - определяет используемые обработчики для сохранения лога 
 +  - formatters - определяет используемые форматы для лога 
 + 
 +==== logger_root ==== 
 +  - level - определяет уровень логирования (верхний уровень)\\ Возможные значения:<code> 
 +CRITICAL  - только критические ошибки, минимальный уровень сообщений 
 +ERROR     - включая ошибки 
 +WARNING   - включая предупреждения 
 +INFO      - включая информацию 
 +DEBUG     - включая отладочные 
 +NOTSET    - Все, максимальный уровень сообщений (включая все выше перечисленные) 
 +</code>\\ Пример:\\ <code>level=DEBUG</code> 
 +  - handlers - используемые обработчики сообщений\\ Пример: <code>handlers=ipfixreceiverlogger</code> 
 +==== handler_ipfixreceiverlogger ==== 
 +  - class - класс обработчика\\ Пример: <code>class=FileHandler</code> 
 +  - level - уровень сообщений <code>level=DEBUG</code> 
 +  - formatter - наименование формата сообщений<code>formatter=ipfixreceiverlogger</code> 
 +  - args - параметры обработчика <code>args=('/var/log/dpiuiflow.log', 'a+')</code> 
 +==== formatter_ipfixreceiverlogger ==== 
 +  - format - описание формата сообщения\\ Пример: <code>format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 
 +где 
 +%(name)s      - имя лога 
 +%(levelname)s - уровень сообщения ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'). 
 +%(asctime)s   - дата, по умолчанию формат “2003-07-08 16:49:45,896” (поле запятаой указаны миллисекунды). 
 +%(message)s   - сообщение 
 +</code> 
 +  - datefmt - описание формата даты\\ Пример: <code>datefmt='%m-%d %H:%M'</code> 
 +==== connect ==== 
 +  - protocol - протокол (tcp или udp). <code>protocol=udp</code> 
 +  - host - IP или имя сервера. <code>host=localhost</code> 
 +  - port - номер порта. <code>port=9996</code> 
 +==== dump ==== 
 +  - rotate_minutes - период в минутах, по прошествии которого временный файл в dumpfiledir/<port>.url.dump будет перемещен в архив (mv) и создан новый временный файл.<code>rotate_minutes=10</code> 
 +  - processcmd - команда, которая будет запущена по окончании ротации файла, параметр имя файла с путем к нему.<code>processcmd=gzip %%s</code> 
 +  - dumpfiledir - директория куда будут сохраняться файлы с принятыми данными. <code>dumpfiledir=/var/dump/dpiui/ipfixflow/</code> 
 +  - buffer_size - размер буфера обмена между процессом приема и записи в файл, по умолчанию значение параметра 100000 записей (ориентировано на 20Гбит трафика или 25 000 сессий в сек). Если количество сессий в секунду значительно меньше, то обязательно пропорционально измените данный параметр.  
 + 
 +==== InfoModel ==== 
 +Блок описывает получаемые данные по IPFIX протоколу. 
 +  - InfoElements - параметр с описанием элементов информационной модели для IPFIX <code>InfoElements =  octetDeltaCount,       0,    1, UINT64, True 
 +                packetDeltaCount,      0,    2, UINT64, True 
 +                protocolIdentifier,    0,    3, UINT8 
 +                session_id,        43823, 2000, UINT64, True 
 +где, 
 +  session_id - наименование поля из описания IPFIX см. разделы 
 +  43823  - уникальный номер организации (enterprise number) 
 +  1      - уникальный номер поля 
 +  UINT64 - тип поля 
 +  True   - использовать обратный порядок байт (endian). Значения - True или пусто. 
 +</code> 
 +Типы полей:\\ 
 +^ Type      ^ Length       ^ Type IPFIX          ^ 
 +| OCTET_ARRAY    | VARLEN     | octetArray        | 
 +| UINT8          | 1          | unsigned8         | 
 +| UINT16         | 2          | unsigned16        | 
 +| UINT32         | 4          | unsigned32        | 
 +| UINT64         | 8          | unsigned64        | 
 +| INT8           | 1          | signed8           | 
 +| INT16          | 2          | signed16          | 
 +| INT32          | 4          | signed32          | 
 +| INT64          | 8          | signed64          | 
 +| FLOAT32        | 4          | float32           | 
 +| FLOAT64        | 8          | float64           | 
 +| BOOL           | 1          | boolean           | 
 +| MAC_ADDR       | 6          | macAddress        | 
 +| STRING         | VARLEN     | string            | 
 +| SECONDS        | 4          | dateTimeSeconds   | 
 +| MILLISECONDS   | 8          | dateTimeMilliseconds | 
 +| MICROSECONDS   | 8          | dateTimeMicroseconds | 
 +| NANOSECONDS    | 8          | dateTimeNanoseconds 
 +| IP4ADDR        | 4          | ipv4Address       | 
 +| IP6ADDR        | 16         | ipv6Address       | 
 + 
 +Наименование полей и описание можно взять по ссылкам:\\ 
 +  - [[dpi:dpi_options:opt_statistics:statistics_ipfix|Шаблон экспорта Netflow в формате IPFIX]] 
 +  - [[dpi:dpi_options:opt_li:li_ipfix|Шаблоны экспорта clickstream и SIP]] 
 +  - [[dpi:dpi_components:radius:radmon_acct_ipfix|Шаблон экспорта AAA в формате IPFIX]] 
 + 
 + 
 +Дополнительная информация:\\ 
 +[[https://tools.ietf.org/html/rfc5102.html | Information Model for IP Flow Information Export]] 
 +==== ExportModel ==== 
 +определяет параметры модели для экспорта, зарезервировано для будущего использования. 
 +  - Mode - тип используемого экспорта <code>Mode = File</code> 
 +==== ExportModelFile ==== 
 +Описание модели экспорта File. 
 +  - Delimiter разделитель полей в строке ( \t - табуляция, еще примеры - |,;) <code>Delimiter = \t</code> 
 +  - ExportElements - описание полей которые будут сохранены в файл. <code>ExportElements = timestamp, seconds, %%Y-%%m-%%d %%H:%%M:%%S.000+03 
 +                 login 
 +                 source_ip4 
 +                 destination_ip4 
 +                 host, decodehost 
 +                 path, decodepath 
 +                 referal, decodereferer 
 +                 session_id 
 +где поля в каждой строке: 
 +  имя - наименование поля из информационной модели [InfoModel] (login, session_id и т.п.) 
 +  обработчик - процедура обработки поля перед выводом 
 +               seconds       - поле в секундах, ожидается формат 
 +               milliseconds  - поле в милисекундах, микросекундах, наносекундах ожидается формат 
 +               decodehost    - перекодировать из punycode в UTF-8 
 +               decodepath    - перекодировать из urlencoding в UTF-8 
 +               decodereferer - перекодировать из (punycode,urlencoding) в UTF-8 
 +               decodeproto   - перекодировать идентификатор протокола в строку 
 +  формат - описание формата для seconds, milliseconds.  
 +           Пример: %%Y-%%m-%%d %%H:%%M:%%S.%%f+0300 
 +           Результат: 2016-05-25 13:13:35.621000+0300 
 +</code> 
 + 
 +==== Создаем сервис в CentOS7 ==== 
 +Создание сервиса в CentOS7 по шагам, название сервиса **ipfix1**, используемая конфигурация **/etc/dpiui/ipfixreceiver.conf**, используемый порт **1500**. \\ 
 +Создаем файл /etc/systemd/system/ipfix1.service следующего содержания: 
 +<code> 
 +[Unit] 
 +Description=ipfix test restart 
 +After=network.target 
 +After=syslog.target 
 + 
 +[Service] 
 +Type=forking 
 +PIDFile=/tmp/ipfixreceiver.1500.pid 
 +ExecStart=/usr/local/bin/ipfixreceiver start -f /etc/dpiui/ipfixreceiver.conf 
 +ExecStop=/usr/local/bin/ipfixreceiver stop -f /etc/dpiui/ipfixreceiver.conf 
 +ExecReload=/usr/local/bin/ipfixreceiver restart -f /etc/dpiui/ipfixreceiver.conf 
 +Restart=always 
 +RestartSec=10s 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 +</code> 
 +Выполняем: 
 +  systemctl enable ipfix1.service 
 +  systemctl start ipfix1.service 
 +  systemctl daemon-reload 
 + 
 +Проверяем: 
 +  systemctl status ipfix1.service -l 
 +:!:**не забудьте проверить поднятие сервиса после перезагрузки** 
 + 
 +===== Проблемы и решения ===== 
 +  - как получить версию утилиты?\\ Используйте следующие команды:\\ <code>ipfixreceiver -v</code><code>yum info ipfixreceiver</code> 
 +  - можно ли на один порт отправлять IPFIX потоки с разных DPI?\\ Да. Единственное в записываемом потоке их будет не различить. 
 +  - как понять, что утилита работает?\\ a) проверьте, что порт из конфигурации прослушивается утилитой, например 1500:<code>netstat -nlp | grep 1500</code> b) проверьте лог, нет ли ошибок\\ c) Проверьте, что запись в промежуточный файл происходит, например для 9996 порта (директория для файлов - /var/dump/dpiui/ipfixurl): <code>tail -f /var/dump/dpiui/ipfixurl/9996.url.dump</code> 
 +  - все проверено, но приема сообщений нет?\\ a) забыли открыть порт в iptables.\\ b) инициализировали ipfixreceiver с неверным IP сервера. 
 +  - с DPI идет большое количество сессий (более 2 млн сессий/мин), при включенном DEBUG режиме видно, что счетчик обмена буферами не успевает записать до получения следующего блока записей, что можно сделать?\\ a) удалите преобразование даты в строку, это уменьшит процессорное время на обработку и дополнительно получите уменьшение объема результирующего файла\\ b) удалите преобразование decodeipv4, незначительно, но так же получите ускорение записи файла\\ c) настройте buffer_size при к-ве сес /сек более 30к совместно с п.d\\ d) увеличьте частоту процессора и объем памяти