Сенсор ipt_NETFLOW считается самым быстрым, в прямом смысле этого слова, для отдачи статистики по протоколу netflow. Систему не грузит, работает молненосно :)
ВЕРСИЯ СИСТЕМЫ
Система centos 5.8:
shell> uname -a Linux temp.test.local 2.6.18-308.13.1.el5PAE #1 SMP Tue Aug 21 17:50:26 EDT 2012 i686 i686 i386 GNU/Linux
УСТАНОВКА ИНСТРУМЕНТАРИЯ
Устанавливаем набор инструментов и исходники ядра:
shell> yum install iptables-devel gcc gcc-c++ kernel-headers kernel-PAE-devel make
Если у вас процессор без PAE то надо указать kernel-devel.
ИСХОДНИКИ ipt_NETFLOW
Загружаем исходники модуля:
shell> wget http://citylan.dl.sourceforge.net/project/ipt-netflow/ipt-netflow/ipt_netflow-1.8.tgz shell> tar xf ipt_netflow-1.8.tar shell> mv ipt_netflow-1.8 /usr/local/src/ shell> cd /usr/local/ipt_netflow-1.8/
КОМПИЛЯЦИЯ
Начинаем собирать:
shell> ./configure (...) Now run: make all install shell> make all install make -C /lib/modules/2.6.18-308.13.1.el5PAE/build M=/usr/local/src/ipt_netflow-1.8 modules_install make: *** /lib/modules/2.6.18-308.13.1.el5PAE/build: Нет такого файла или каталога. Останов. make: *** [minstall] Ошибка 2
Покавырявшись немного стало понятно - нет симлинка на исходники ядра:
shell> ln -s /usr/src/kernels/2.6.18-308.13.1.el5PAE-i686/ /lib/modules/$(uname -r)/build
Проверяем привильно ли все:
shell> file /lib/modules/$(uname -r)/build /lib/modules/2.6.18-308.13.1.el5PAE/build: symbolic link to `/usr/src/kernels/2.6.18-308.13.1.el5PAE-i686/'
И опять собираем моудль:
shell> ./configure (...) Now run: make all install shell> make all install (...) shell> depmod
Проверяем установился ли модуль:
shell> modinfo ipt_NETFLOW filename: /lib/modules/2.6.18-308.13.1.el5PAE/extra/ipt_NETFLOW.ko version: 1.7.2 description: iptables NETFLOW target module author:license: GPL srcversion: 43F3959209576499C33AB98 depends: x_tables vermagic: 2.6.18-308.13.1.el5PAE SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1 parm: destination:export destination ipaddress:port (charp) parm: inactive_timeout:inactive flows timeout in seconds (int) parm: active_timeout:active flows timeout in seconds (int) parm: debug:debug verbosity level (int) parm: sndbuf:udp socket SNDBUF size (int) parm: hashsize:hash table size (int) parm: maxflows:maximum number of flows (int) parm: aggregation:aggregation ruleset (charp)
Опа! А версия то 1.7.2.
АВТОЗАГРУЗКА МОДУЛЯ
Раз модуль относится к iptables то пусть он его и подгружает. Логично? Логично. Но не рабоатет. Редактируем файл /etc/sysconfig/iptables-config, находим там параметр IPTABLES_MODULES и приводим его к такому виду:
IPTABLES_MODULES="ip_nat_pptp ip_nat_ftp ipt_NETFLOW"
У меня тут еще кое что есть, так что ненужное можно удалить. Создаем файл /etc/modprobe.d/ipt_netflow.conf с содержимым:
options ipt_NETFLOW hashsize=160000 destination=127.0.0.1:8818
Т.е. сенсор ipt_NETFLOW будет отсылать на 127.0.0.1:8818 данные о трафике. Именно на этот IP:PORT надо вешать коллектор. Перезапускаем систему и ... Не работает. Модуль как бы загружен, но он не подвязался к сетевому интерфейсу lo. Проблема в том, что iptables загружается немного раньше, чем система начинает грузить сеть:
shell> ll /etc/rc3.d/ |grep iptables lrwxrwxrwx 1 root root 18 Сен 17 14:45 S08iptables -> ../init.d/iptables shell> ll /etc/rc3.d/ |grep network lrwxrwxrwx 1 root root 17 Сен 19 13:19 S10network -> ../init.d/network
По цифаркам видно, что грузится первее. iptables загружается первым, интерфейса lo еще нет, в dmesg попадает сообщение remove destination 127.0.0.1:8818. Все пропало...
Когда встала проблема я полез в сеть искать решение. И все что я нашел было как у меня. Т.е. все запускали ipt_NETFLOW как я, через конфиг iptables. Такое чувство, что никто никогда не перезагружает сервера (я ради теста перезагружал :)). Возможно проблема в чем-то другом.
Заставить загружать модуль номально удалось лишь указав загрузку через /etc/rc.local:
shell> echo modprobe ipt_NETFLOW >> /etc/rc.local
ПРОВЕРКА РАБОТЫ СЕНСОРА
Проверить работу можно так:
shell> cat /proc/net/stat/ipt_netflow Flows: active 14 (peak 100 reached 0d0h5m ago), mem 0K Hash: size 160000 (mem 625K), metric 1.0, 1.0, 1.0, 1.0. MemTraf: 304 pkt, 15 K (pdu 77, 4004). Timeout: active 1800, inactive 15. Maxflows 2000000 Rate: 286 bits/sec, 0 packets/sec; Avg 1 min: 1630 bps, 0 pps; 5 min: 1419 bps, 0 pps cpu# stat:, sock: , traffic: , drop: Total stat: 1 1087 1216, 0 0 0 0, sock: 42 0 0, 56 K, traffic: 2303, 0 MB, drop: 0, 0 K cpu0 stat: 0 0 0, 0 0 0 0, sock: 0 0 0, 0 K, traffic: 0, 0 MB, drop: 0, 0 K cpu1 stat: 1 1087 1216, 0 0 0 0, sock: 42 0 0, 56 K, traffic: 2303, 0 MB, drop: 0, 0 K sock0: 127.0.0.1:8818, sndbuf 110592, filled 0, peak 0; err: sndbuf reached 0, other 0
Незабудте убрать модуль из конфига iptables (/etc/sysconfig/iptables-config).
Все настроено. Осталось настроить правила в iptables (пример есть в исходниках - README) и настроить какой нить коллектор для принятия данных отсылаемых сенсором.
UPDATE 10/04/2012
Есть еще один способ загружать ipt_NETFLOW во время загрузки системы. В файл /etc/sysctl.conf добавить вот эти параметры:
net.netflow.flush = 0 net.netflow.maxflows = 2000000 net.netflow.aggregation = net.netflow.destination = 127.0.0.1:8818 net.netflow.sndbuf = 110592 net.netflow.hashsize = 160000 net.netflow.debug = 0 net.netflow.inactive_timeout = 15 net.netflow.active_timeout = 1800
А в файл /etc/sysconfig/iptables-config отредактировать параметр:
IPTABLES_MODULES="ipt_NETFLOW"
Такой способ более правильный
Добрый день!
ОтветитьУдалитьВ статье не описано какие правила нужно создавать в iptables чтобы собирать трафик через модуль ipt_netflow
/sbin/iptables --table filter --insert FORWARD 1 --jump NETFLOW
Удалить/sbin/iptables --table filter --insert FORWARD 2 --match state --state RELATED,ESTABLISHED --jump ACCEPT
/sbin/iptables --table filter --append FORWARD --source 192.168.42.168 --jump ACCEPT
...
Именно так, по другому правило с NETFLOW ставилось в другом порядке и не работало.
Hi! Можно поучаствовать в тестировании новой версии ipt-netflow (сделайте clone из git), новые возможности: IPv6 (ip6tables), ipfix и netflow v9 протоколы, NAT events (как Cisco NEL) и прочая мелочь. Git репозиторий https://github.com/aabc/ipt-netflow
ОтветитьУдалить