Настройка агента Softflowd для сбора статистики по протоколу Netflow в роутере FreeBSD
(для последующей обработки пакетов Netflow в программе учета трафика TMeter)
Протокол Netflow представляет собой набор средств, позволяющих
получать информацию о сетевом трафике с удаленных маршрутизаторов.
Изначально разработанный компанией Cisco для собственных устройств,
протокол Netflow получил множество реализаций для других операционных
систем. В данной статье идет речь об установке и настройке агента softflowd
для сбора информации о проходящем через роутер Freebsd сетевом трафике.
Фактически пакет Netflow предсталяет собой UDP-пакет, в котором содержится
информация до 30 сессий TCP/IP прошедших через роутер.
Установка агента softflowd
#cd /usr/ports/net-mgmt/softflowd
#make all
#install clean
|
Запуск softflowd
После того, как softflowd был установлен, необходимо выбрать
интерфейс, мониторинг которого будет производиться, указать IP адрес и
UDP порт коллектора. Например, для интерфейса rl0 и коллектора
192.168.201.187:8818 запуск softflowd будет выглядеть следующим образом:
#softflowd -i rl0 -n 192.168.201.187:8818
|
Проверка softflowd
Softflowd включает в себя программу контроля softflowctl, с помощью которой можно проверить работоспособность softflow:
#softflowctl statistics
softflowd[40476]: Accumulated statistics:
Number of active flows: 2299
Packets processed: 268089
Fragments: 0
Ignored packets: 867 (867 non-IP, 0 too short)
Flows expired: 3103 (0 forced)
Flows exported: 6206 in 214 packets (0 failures)
...
|
Проверить, действительно ли данные отправляются и достигают коллектора можно с помощью ethereal, tcpdump или другого анализатора трафика. В случае каких-либо проблем можно использовать флаг -D демона softflowd. Softflowd посылает информацию о потоке после того, как тот будет завершен, например, прекратится FTP-сессия или загрузится web-страница. Это означает, что в любой момент времени у softflowd имеется некий кэш открытых потоков, в связи с чем остановку демона необходимо выполнять командой softflowctl shutdown. В противном случае вы потеряете данные активных потоков, которые еще не были завершены и отправлены на коллектор.
Стартовый скрипт
Для того чтобы softflowd стартовал при загрузке автоматически, необходимо создать скрипт запуска и добавить его в загрузку системы. К сожалению, пока что в порт softflowd такой скрипт не входит, поэтому его придётся создать самостоятельно:
#!/bin/sh
# Set this rc.conf variables
# * softflowd_enable - enable softflowd?
# * softflowd_interfaces - interfaces to listen
# * softflowd_netflow_host - collector host
# * softflowd_netflow_port - collector port
# in rc.conf variables
# Example:
# softflowd_interfaces="em0 em1 xl0"
# softflowd_netflow_host=
# softflowd_netflow_port=
. /etc/rc.conf
if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
echo "$0: Cannot determine the PREFIX" >&2
exit 1
fi
echo "$softflowd_enable" | grep -qix yes || exit
[ -z "$softflowd_interfaces" ] && exit
[ -x ${PREFIX}/sbin/softflowd ] || exit
SOFTFLOWD=${PREFIX}/sbin/softflowd
SOFTFLOWCTL=${PREFIX}/sbin/softflowctl
case "$1" in
start)
for interface in ${softflowd_interfaces}
do
${SOFTFLOWD} -i ${interface} -n "$softflowd_netflow_host":"$softflowd_netflow_port"
echo -n softflowd[$interface]" "
softflowd_netflow_port="`expr $softflowd_netflow_port + 1`"
done
;;
stop)
${SOFTFLOWCTL} shutdown && echo -n ' softflowd'
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac
exit 0
|
После того как скрипт создан, необходимо:
- убедиться, что он находится в каталоге /usr/local/etc/rc.d
- убедиться, что он имеет расширение .sh
- убедиться, что он исполняемый, или дать команду:
#chmod +x /usr/local/etc/rc.d/softflowd.sh
|
Для запуска скрипта в файле /etc/rc.conf следует установить переменные:
- softflowd_enable - запускать softflowd при старте?
- softflowd_interfaces - какие интерфейсы прослушивать?
- softflowd_netflow_host - IP-адрес хоста коллектора NetFlow
- softflowd_netflow_port - Порт на котором слушает процесс-коллектор NetFlow