Утилита предназначена для приема потока данных от устройств по протоколу IPFIX и сохранением данных в виде файла для последующей обработки их другими средствами.
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
yum install -y ipfixreceiver
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
yum -y install epel-release
rpm --import https://forensics.cert.org/forensics.asc rpm -Uvh https://forensics.cert.org/cert-forensics-tools-release-el7.rpm
yum -y install libfixbuf --disablerepo=forensics yum -y install netsa-python netsa_silk yum -y install ipfixreceiver --disablerepo=forensics
source_ip4, decodeipv4
destination_ip4, decodeipv4
/etc/dpiui/ipfixreceiver.conf - пример конфигурации для clickstream (http запросы) /etc/dpiui/ipfixreceiverflow.conf - пример конфигурации для получения информации о сессиях (аналог netflow) /etc/dpiui/ipfixreceiversip.conf - пример конфигурации для получения информации о sip соединениях
/usr/local/lib/ipfixreceiver.d/
/etc/dpiui/port_proto.txt - информация о трансляции идентификатора протокола в наименование, используется в утилите для получения текстового имени протокола
/usr/local/bin/ipfixreceiver -> линк на /usr/local/lib/ipfixreceiver.d/ipfixreceiver
[connect] protocol=tcp host=212.12.11.10 port=1500
Для приема IPFIX потока у вас в /etc/sysconfig/iptables должно быть следующее правило:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1500 -j ACCEPT
Не забудьте что после внесения правила в iptables требуется перезапуск:
service iptables restart
/var/log/dpiui*.log { rotate 5 missingok notifempty compress size 10M daily copytruncate nocreate postrotate endscript }
Обратите внимание на использование метода copytruncate, иначе файл будет пересоздан и запись лога из процесса прекратится.
Соответственно в конфигурации ipfixreceiver у вас в разделе [handler_ipfixreceiverlogger] указано следующее:
args=('/var/log/dpiuiflow.log', 'a+')
15 4 * * * /bin/find /var/dump/dpiui/ -name url_\*.dump.gz -cmin +44640 -delete > /dev/null 2>&1
Измените строчку под ваши требования и добавьте в файл /var/spool/cron/root.
Утилита ipfixreceiver имеет следующие параметры запуска:
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
По умолчанию используется файл конфигурации /etc/dpiui/ipfixreceiver.conf.
Больше информации о конфигурировании логирования можно найти по ссылке Logging
CRITICAL - только критические ошибки, минимальный уровень сообщений ERROR - включая ошибки WARNING - включая предупреждения INFO - включая информацию DEBUG - включая отладочные NOTSET - Все, максимальный уровень сообщений (включая все выше перечисленные)
Пример:
level=DEBUG
handlers=ipfixreceiverlogger
class=FileHandler
level=DEBUG
formatter=ipfixreceiverlogger
args=('/var/log/dpiuiflow.log', 'a+')
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 - сообщение
datefmt='%m-%d %H:%M'
protocol=udp
host=localhost
port=9996
rotate_minutes=10
processcmd=gzip %%s
dumpfiledir=/var/dump/dpiui/ipfixflow/
Блок описывает получаемые данные по IPFIX протоколу.
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 или пусто.
Типы полей:
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 |
Наименование полей и описание можно взять по ссылкам:
Дополнительная информация:
Information Model for IP Flow Information Export
определяет параметры модели для экспорта, зарезервировано для будущего использования.
Mode = File
Описание модели экспорта File.
Delimiter = \t
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
Создание сервиса в CentOS7 по шагам, название сервиса ipfix1, используемая конфигурация /etc/dpiui/ipfixreceiver.conf, используемый порт 1500.
Создаем файл /etc/systemd/system/ipfix1.service следующего содержания:
[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
Выполняем:
systemctl enable ipfix1.service systemctl start ipfix1.service systemctl daemon-reload
Проверяем:
systemctl status ipfix1.service -l
не забудьте проверить поднятие сервиса после перезагрузки
ipfixreceiver -v
yum info ipfixreceiver
netstat -nlp | grep 1500
b) проверьте лог, нет ли ошибок
c) Проверьте, что запись в промежуточный файл происходит, например для 9996 порта (директория для файлов - /var/dump/dpiui/ipfixurl):
tail -f /var/dump/dpiui/ipfixurl/9996.url.dump