GrabDuck

Сбор статистики NetFlow в Linux при помощи утилит flow-tools

:

Cisco flow-tools fprobe Linux NetFlow

Данная статья рассматривает установку и настройку системы сбора статистики NetFow в операционной системе Linux и маршрутизаторе Cisco. В качестве коллектора и анализатора выбраны утилиты из комплекта flow-tools. Для тестирования системы было выбрано следующее адресной пространство, которое в последующем будет использоваться в данной статье:

  • 192.168.0.1 - сервер на базе ОС Linux OpenSUSE;
  • 192.168.0.2 - маршрутизатор Cisco серии 3800;
  • 192.168.0.9 - сервер с операционной системой CentOS на котором будет собираться и анализироваться статистика.

На сервере и маршрутизаторе будет настроен сенсор, который будет собирать статистику NetFlow и отправлять ее на коллектор.

Настройка сенсора

Установка и настройка сенсора в ОС Linux

В данном примере используется установка сенсора fprobe в операционной системе Linux OpenSUSE из исходных кодов. По аналогии можно произвести установку fprobe в других дистрибутивах, а при наличие данной программы в стандартном репозитории, желательно производить установку из него. К примеру в Linux Debian fprobe устанавливается из стандартного репозитория при помощи команды aptitude install fprobe. Прежде всего необходимо установить утилиту checkinstall, которая поможет собрать rpm пакет fprobe из исходных кодов, скачать и разархивировать сами исходные коды fprobe.

yast -i checkinstall
wget http://sourceforge.net/projects/fprobe/files/fprobe/1.1/fprobe-1.1.tar.bz2/download
tar -jxvf fprobe-1.1.tar.bz2

Переходим в папку с распакованными исходными кодами и конфигурируем утилиту.

cd fprobe-1.1/
./configure

Собираем пакет, изменяя, при необходимости, его описание в процессе сборки.

checkinstall -R

После сборки пакета checkinstall подскажет куда был сохранен готовый RPM-пакет

Done. The new package has been saved to /usr/src/packages/RPMS/i386/fprobe-1.1-1.i386.rpm You can install it in your system anytime using: rpm -i fprobe-1.1-1.i386.rpm

Устанавливаем собранный пакет.

rpm -ivh /usr/src/packages/RPMS/i386/fprobe-1.1-1.i386.rpm

Теперь данным программным обеспечением можно управлять при помощи стандартного менеджера пакетов. Запускаем сбор и отсылку статистики NetWlow на коллектор.

fprobe -i eth0 192.168.0.9:9801
  • eth0 - сетевой интерефейс на котором будет собираться статистика;
  • 192.168.0.9 - адрес коллектора;
  • 9801 - порт на котором коллектор прослушивает и принимает информацию.

Для автоматического запуска сенсора при старте системы, необходимо добавить строку с запуском нашей программы в файл /etc/init.d/after.local. Если данного файла не существует, то его необходимо создать.

echo "/usr/local/sbin/fprobe -i eth0 192.168.0.9:9801" >> /etc/init.d/after.local

Настройка сенсора на маршрутизаторе Cisco

Заходим в режим конфигурации маршрутизатора

router# enable
router# configure terminal

Включаем сбор netflow на интерфейсе GigabitEthernet 0/1

router(config)# interface GigabitEthernet 0/1
router(config-if)# ip route-cache flow
router(config-if)# exit

Задаем адрес коллектора, порт и версию netflow.

router(config)# ip flow-export destination 192.168.0.1 9802
router(config)# ip flow-export version 5
router(config)#^Z

Включаем экспорт статистики с интерфейса GigabitEthernet 0/1

router(config)# ip flow-export source GigabitEthernet 0/1
router(config)#^Z

Установка коллектора

Для сбора и анализа данных NetFlow были использованы утилиты из пакета flow-tools. Коллектор устанавливался на сервере с ОС Linux CentOS. В стандартном репозитории flow-tools не присутствовало, однако в интернете были найдены уже собранный rpm пакет, который в последующем был установлен.

wget http://centos.alt.ru/pub/flow-tools/RHEL/RPMS/i386/flow-tools-0.68.5-1.el5.i386.rpm
rpm -ihv flow-tools-0.68.5-1.el5.i386.rpm

Установку и сбор собственного пакета flow-tools из исходных кодов можно произвести аналогично сенсору, используя утилиту checkinstall. Создаем директории в которых будут храниться данные, полученные с сервера 192.168.0.1 и роутера 192.168.0.2

mkdir /var/flow-tools/server
mkdir /var/flow-tools/router

Далее необходимо отредактировать файл /etc/sysconfig/flow-capture и записать в него настройки, с которыми будет запускаться демон flow-capture. Настройки для сервера 192.168.0.1 будут выглядить следующим образом:

-w /var/flow-tools/server 0/192.168.0.1/9801
  • -w /var/flow-tools/server - директория в которой будут храниться файлы;
  • 0 - говорит, что коллектор должен прослушивать все свои сетевые интерфейсы;
  • 192.168.0.1 - принимает данные только от машины с данным IP-адерсом;
  • 9801 - прослушивает данный порт.

Стартовые скрипты

Для удобства мы поменяем стартовый скрипт на другой (взятый из Linux Debian и немного отредактированный), который позволяет добавлять опции для сразу нескольких одновременно запускаемых коллекторов. Заменяем /etc/init.d/flow-capture на следующий скрипт:

/etc/init.d/flow-capture
#!/bin/sh -e
#

DAEMON=/usr/bin/flow-capture
CONFIG=/etc/sysconfig/flow-capture
NAME=flow-capture
DESC=flow-capture

test -f $DAEMON || exit 0
test -f $CONFIG || exit 0

case "$1" in
start)
pid=`pidof $DAEMON` || true

    if [ "$pid" ]; then
echo "Sorry, flow-capture is already running."
exit 0
fi
IFS='
'
lines=`grep -E " |\t" /etc/sysconfig/flow-capture | grep -v "^#"`
echo -n "Starting $DESC: "
for args in $lines; do
IFS=' '
$DAEMON ${args}
done
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
pid=`pidof $DAEMON` || true
if [ "$pid" ]; then
kill -TERM $pid >/dev/null 2>&1
fi
echo "$NAME."
;;
restart|force-reload)
$0 stop
sleep 1
$0 start
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0

Файл /etc/sysconfig/flow-capture теперь можно записать следующим образом

# Linux server
-w /var/flow-tools/server 0/192.168.0.1/9801
# Cisco router
-w /var/flow-tools/router 0/192.168.0.2/9802

После чего при запуске демона flow-capture, будут запущены все перечисленные в файле экземпляры коллекторов. Отдельно для сервера на базе ОС Linux на порту 9801, и отдельно для маршрутизатора Cisco на порту 9802. Запускаем демон flow-capture и, при необходимости добавляем его в автозапуск.

service flow-capture start
chkconfig --level 35 flow-capture on

Анализ трафика при помощи flow-tools

После запуска коллектора в директориях /var/flow-tools/server и /var/flow-tools/router будет собираться статистика для соответствующего оборудования. Данные дирректории будут иметь структуру вида: год/год-месяц/год-месяц-число/файлы-статистики В утилиты flow-tools входят следующие полезные утилиты для анализа сетевого трафика:

  • flow-cat - конкатенация (склеивание) отдельных файлов flow-tools;
  • flow-filter - фильтрация NetFlow;
  • flow-stat - создание отчета;
  • flow-print - отображение статистики в понятной человеку форме.

Подробнее можно найти в мануале к flow-tools или отдельной утилите.

man flow-tools
man flow-stat

Примеры использования flow-tools

Выводим всю статистику за 2011 год (здесь и далее для сервера 192.168.0.1. Для вывода статистики по роутеру нужно заменить дирректорию server на router).

flow-cat /var/flow-tools/server/2011/*/*/ft-* | flow-stat

flow-cat здесь склеивает все файлы, находящиеся на пути звездочки * и через конвеер | передает их flow-stat. Отображаем трафик в байтах за 18 марта 2011 с портом источника 80.

/var/flow-tools/server/2011/2011-03/2011-03-18/ft-*| flow-filter -p80 | flow-stat -f10

Выводим статистику соединений пользовательской машины с адерсом 192.168.0.101 с интернетом (порт 80).

flow-cat /var/flow-tools/server/2011/2011-03/2011-03-18/ft-* | flow-filter -Duser1 -P80 | flow-print

Создаем файл flow.acl с в котором прописываются соответсвующие строки.

ip access-list standard user1 permit host 10.96.0.15

Применение flow-nfilter

Утилита flow-nfilter позваляет строить сложные и информативные отчеты по разным параметарам. Первым делом необходимо создать соответствующий файл filter.cfg и в соответствии с руководством по flow-nfilter описать необходимые фильтры. К примеру, нам нужно получить статистику по определенному пользователю и его доступу в интерент. Для этого создаем файл filter.cfg со следующим содержимым:

#Фильтр, определяющий http(s) порты
filter-primitive http-port
 type ip-port
 permit 80,8080,443

#Фильтр, определяющий IP-адрес пользователя
filter-primitive user2
 type ip-address
 permit 192.168.0.102  
 default deny

#Фильтр доступа пользователя user2 к портам http-port
filter-definition user2-http
 match ip-source-address user2
 match ip-source-port http-port
 or
 match ip-destination-address user2
 match ip-destination-port http-port

Через данный фильтр пройдут только пакеты, предназначающиеся user2 с порта 80,8080,443 и отправленные user2 на порт 80,8080,443. Таким образом, чтобы получить статистику доступа user2 к веб-ресурсам за март 2011 года нужно задать следующие цепочки команд:

flow-cat /var/flow-tools/server/2011/2011-03/*/ft* | flow-nfilter -f filter.cfg -F user2-http | flow-stat -f10
  • -f filter.cfg - ссылается на соответствующий файл с описанием фильтро;
  • -F user2-http - применяет соответсвующий фильтр в данном файле.
24 Мар 2011 17:03 -- Юрий Акимов