Сенсор
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"
Такой способ более правильный