Установка и Настройка Системы Подсчета Трафика IPCAD + flow-tools

Довольно часто на Linux-форумах задаются вопросы по поводу программ подсчета трафика.

В данной статье подробно описана установка и настройка системы учета трафика на основе IPCAD, softflowd и flow-tools, проходящего через сетевой интерфейс компьютера с операционной системой Linux.

На сетевой интерфейс, трафик с которого мы собираемся снимать, необходимо установить программу-сенсор, задача которой будет состоять в том, чтобы производить захват сетевых пакетов, проходящих через необходимый сетевой интерфейс, и обеспечивать дальнейшую передачу этой информации программе-коллектору. Коллектор занимается тем, что собирает данные, которые предоставляются ему сенсорами, и сохраняет их в хранилище (файлы, база данных и т.д.) для дальнейшей обработки.

Для определенности предположим:

  • У Вас имеется локальная сеть, имеющая сетевую адресацию 192.168.0.0/24.
  • В качестве шлюза в интернет выступает компьютер с операционной систетой Linux, имеющий два сетевых интерфейса (eth0 смотрит в интернет, eth1 – в локальную сеть) и IP-адрес 192.168.0.1.

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

На данный момент существует несколько решений, позволяющих производить захват сетевых пакетов, проходящих через сетевой интерфейс. В настоящем руководстве приводится описание установки и настройки IPCAD и softflowd.

Я являюсь приверженцем RPM-based дистрибутивов (RHEL, Fedora и т.д.), по-этому приведу описание установки и настройки этих программ для данных дистрибутивов.

IPCAD

Домашняя страница проекта – http://ipcad.sourceforge.net/.

Тем пользователям, у кого на шлюзе установлен дистрибутив CentOS, достаточно установить пакет IPCAD с репозитория CentALT:

# rpm -Uvh http://pkgs.org/centos-5-rhel-5/centalt-i386/ipcad-3.7.3-4.el5.i386.rpm.html

Пользователям других RPM-based дистрибутивов можно посоветовать пересобрать пакет IPCAD из пакета с исходными текстами ipcad-*.src.rpm, взять который можно в репозитории CentALT.

Пересборка пакета IPCAD

Скачайте src.rpm пакета IPCAD:

# wget http://centos.alt.ru/pub/ipcad/RHEL/SRPMS/ipcad-3.7.3-4.el5.src.rpm

Из каталога, в который Вы загрузили пакет IPCAD выполните:

# rpmbuild -rebuild ipcad-3.7.3-4.el5.src.rpm

Установка

После пересборки пакета установите его командой:

rpm -ihv /usr/src/redhat/RPMS/i386/ipcad-3.7.3-4.el5.i386.rpm

Настройка IPCAD

Отредактируйте файл /etc/ipcad.conf, чтобы его содержание было следующим:

interface eth1;
netflow export destination 127.0.0.1 9990;
netflow export version 5;
pidfile = /var/run/ipcad.pid;
dumpfile = ipcad.dump;

Тем самым мы сказали сенсору, чтобы он захватывал пакеты, приходящие или проходящие через сетевой интерфейс eth1 Linux-сервера, и отдавал эту информацию коллектору, который будет получать эту информацию на порту 9990 интерфейса 127.0.0.1.

Добавьте IPCAD в автоматический запуск при старте системы:

chkconfig --level 345 ipcad on

Softflowd

Softflowd – это сетевой анализатор трафика, совместимый с форматом данных Cisco NetFlow. Домашняя страница проекта – http://www.mindrot.org/projects/softflowd/. Последняя версия пакета на момент написания статьи была 0.9.8.

Сборка RPM пакета

Скачайте исходные тексты с сайта проекта:

# wget http://www.mindrot.org/files/softflowd/softflowd-0.9.8.tar.gz

Скопируйте исходные тексты в каталог /usr/src/redhat/SOURCES/:

# cp softflowd-0.9.8.tar.gz /usr/src/redhat/SOURCES/

Из архива softflowd-0.9.8.tar.gz извлеките 2 файла: softflowd.init и softflowd.sysconfig. Они должны находиться в каталоге /usr/src/redhat/SOURCES/. Затем выполните команду:

# rpmbuild -ta  softflowd-0.9.8.tar.gz

Собранный RPM пакет будет находиться в каталоге /usr/src/redhat/RPMS/i386/.

Установка

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

# rpm -ihv /usr/src/redhat/RPMS/i386/softflowd-0.9.8-1.el5.i386.rpm

Настройка softflowd

Перейдите в каталог /etc/sysconfig и отредактируйте файл softflowd, сделав его содержимое таким:

SOFTFLOW_PROG=/usr/sbin/softflowd
SOFTFLOW_OPTS="-v 5 -i eth1 -n127.0.0.1:9990"

Для запуска softflowd выполните:

# service softflowd start

Добавьте softflowd в автоматический запуск при старте системы:

# chkconfig --level 345 softflowd on

Настройка и запуск коллектора flow-capture

Коллектор flow-capture входит в состав пакета flow-tools, домашняя страница проекта которого – http://www.splintered.net/sw/flow-tools/.

Со страницы проекта можно загрузить уже собранные RPM-пакеты flow-tools, а также пакеты с исходным кодом src.rpm, из которых Вы можете пересобрать бинарный RPM пакет для своего дистрибутива.

Для запуска коллектора нам предварительно необходимо создать каталог, в котором flow-capture будет сохранять данные статистики:

# mkdir /var/flow/
# mkdir /var/flow/flow-data

Теперь нам нужно запустить flow-capture:

# /usr/bin/flow-capture -N 3 -w /var/flow/flow-data 0/127.0.0.1/9990

Создадим скрипт, чтобы управлять работой (запуск, остановка, перезапуск, определение состояния) flow-capture. Для этого в каталоге /etc/rc.d/init.d/ создайте файл с именем flow-capture следующего содержания:

#!/bin/sh
#
# flow-tools Tool set for working with NetFlow data
#
# chkconfig:    - 44 44
# description:  flow-tools.
#
# processname: flow-capture
# pidfile: /var/run/flow-capture.pid 

# Source function library
. /etc/rc.d/init.d/functions 

# Get network config
. /etc/sysconfig/network 

RETVAL=0

start() {
       echo -n $"Starting Flow-capture daemon: "
       daemon /usr/bin/flow-capture -w /var/flow/flow-data 0/127.0.0.1/9990
       RETVAL=$?
       echo
       [ $RETVAL -eq 0 ] && touch /var/lock/subsys/flow-capture
       return $RETVAL
}

stop() {
       echo -n $"Stopping Flow-Capture daemon: "
       killproc flow-capture
       RETVAL=$?
       echo
       [ $RETVAL -eq 0 ] && rm -f /var/run/flow-capture.pid /var/lock/subsys/flow-capture
       return $RETVAL
}

restart() {
       stop
       start
}

reload() {
       return $RETVAL
}

case "$1" in
 start)
       start
       ;;
 stop)
       stop
       ;;
 status)
       status flow-capture
       ;;
 restart)
       restart
       ;;
 condrestart)
       [ -f /var/lock/subsys/flow-capture ] && restart || :
       ;;
 reload)
       reload
       ;;
 *)
       echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
       exit 1
esac

exit $?

Добавьте flow-capture в автоматический запуск:

# chkconfig -add flow-capture
# chkconfig --level 345 flow-capture on

Работа с данными статистики используя утилиты из пакета flow-tools

Итак данные статистики собираются и находятся в каталоге /var/flow/flow-data. flow-capture хранит эти данные в своем формате, который не невозможно просмотреть в текстовом редакторе. В пакет flow-tools входят утилиты для обработки Netflow-трафика.

Допустим, нам необходимо извлечь суммарную информацию о том, сколько входящего трафика потребил каждый из компьютеров локальной сети за февраль 2007 года.

Для решения этой задачи нам необходимо:

1. Создать файл mynet.acl следующего содержания:

# ip access-list standard mynetwork permit 192.168.0.0 0.0.0.255
# ip access-list standard mynetwork deny any

2. Создать файл febrary.sh следующего содержания:

# flow-cat /var/flow/flow-data/2007/2007-02 | flow-filter -fmynet.acl -D mynetwork | flow-stat -f9 -S2 > febrary-input.stat

3. Изменить права доступа к файлу febrary.sh:

# chmod +x febrary.sh

4. После запуска скрипта febrary.sh будет создан текстовый файл febrary-input.stat, содержимым которого будет являться необходимая нам статистика. В данном файле будет содержаться 4 колонки, разделенных друг от друга пробелами:

# IPaddr         flows                 octets                packets
#
192.168.0.2    276280                6016806821            5491368
192.168.0.3    212039                191908595             1505926
192.168.0.4    18424                 115110305             868002
192.168.0.5    31343                 51992385              282471
192.168.0.6    60896                 29306026              209770
192.168.0.7    44195                 22203563              240147
192.168.0.8    3873                  19004654              34104

Теперь попробуем разобраться в том, что же мы сделали. Мы создали файл с описанием сети, статистику по трафику которой мы хотим получить.

Обратите внимание, что сеть задается в инвертированном виде
, т.е. вместо 255.255.255.0 мы указали 0.0.0.255.

Затем в скрипте мы последовательно запускаем утилиты из пакета flow-tools в конвейере, т.е. результат выполнения предыдущей команды передается на обработку следующей.

Первой командой мы выполнили flow-cat /var/flow/flow-data/2007/2007-02, тем самым указали, какой каталог со статистикой мы хотим использовать для обработки. Утилита flow-cat сама разберется, какие подкаталоги находятся в заданном параметром каталоге, и возьмет оттуда все файлы со статистикой для последующей обработки.

Результат работы команды flow-cat мы передаем на дальнейшую обработку команде flow-filter, которой в качестве параметров указываем, откуда взять информацию о интересующих нас сетях, и какого рода трафик нас интересует: -fflow.acl -D mynetwork. Если бы нас интересовал исходящий трафик, необходимо было бы вместо -D mynetwork указать -S mynetwork.

Уже полученный результат отдается на обработку утилите flow-stat, которой в свою очередь мы сообщаем, какие поля из полученной статистики нас интересуют и какого рода сортировку в полученных данных необходимо выполнить: flow-stat -f9 -S2 > febrary-input.stat. Так как мы указали утилите flow-filter, что нас интересует входящий трафик, то произведем выборку утилитой flow-stat по адресу назначения (-f9) с сортировкой по 3 полю (нумерация полей начинается с 0), т.е. полученный результат сортируется по количеству байт (по объему потребленного трафика), и результат будет записан в файл febrary-input.stat.

Заключение

Таким образом, выполняя последовательность команд flow-cat, flow-filter, flow-stat с различными параметрами мы легко можем получать статистику потребления трафика в интересующем нас виде. Также полезными для получения статистики могут оказаться утилиты flow-print, flow-report. Более подробную информацию о возможных параметрах утилит пакета flow-tools смотрите соответствующие man-страницы.

Автор: Денис Фролов

Статьи по Теме

Категории
Поиск