headermask image

Notice: Undefined variable: t in /var/www/user97185/data/www/system-administrators.info/yandex-ad.php on line 15

Notice: Undefined variable: r in /var/www/user97185/data/www/system-administrators.info/yandex-ad.php on line 15
Рекомендую: Фриланс-биржа | Кэшбэк-сервис | Интернет-бухгалтерия

Установка и настройка системы подсчета трафика Ipcad + Flow-tools + MySQL

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

В данной статье подробно описана установка и настройка системы учета трафика проходящего через сетевой интерфейс компьютера с ОС Linux.

 

Как это работает

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

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

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

 

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

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

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

 

ipcad

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

Тем пользователям у кого на шлюзе установлен дистрибутив ASP Linux достаточно установить пакет ipcad (он входит в стандартную поставку дистрибутива) с помощью yum:

  • yum install ipcad
    
    

или с помощью команды rpm выполнив:

  • rpm -ihv ipcad-*.rpm
    
    

из каталога содержащего rpm пакеты дистрибутива.

Пользователям других дистрибутивов основанных на RPM пакетах можно посоветовать пересобрать пакет ipcad из пакета с исходными текстами ipcad-*.src.rpm взять который можно с ftp сервера ftp://ftp.asplinux.ru.

 

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

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

  • wget ftp.asplinux.ru/pub/i386/updates/11.2/SRPMS/ipcad-3.6.6-2.112asp.src.rpm
    
    

Из каталога в который Вы скачали пакет ipcad выполните:

  • rpmbuild –rebuild ipcad-3.6.6-2.112asp.src.rpm
    
    

 

Установка

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

  • rpm -ihv /usr/src/redhat/RPMS/i386/ipcad-3.6.6-2.112asp.src.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 сервера и отдавал эту информацию коллектору который будет «ловить» эту информацию на интерфейсе 127.0.0.1 порту 9990.

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

  • chkconfig --level 345 ipcad on
    
    

 

Softflowd

Домашняя страница проекта 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/asplinux/SOURCES/:

  • cp softflowd-0.9.8.tar.gz /usr/src/asplinux/SOURCES/
    
    

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

  • rpmbuild -ta  softflowd-0.9.8.tar.gz
    
    

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

 

Установка

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

  • rpm -ihv /usr/src/asplinux/RPMS/i386/softflowd-0.9.8-1.fc4.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
    
    

Создадим rc.d скрипт чтобы управлять работой (запуск, остановка, перезапуск, определение состояния) 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 входят утилиты для обработки таких данных.

Допустим нам необходимо извлечь суммарную информацию о том, сколько входящего трафика потребил каждый из компьютеров локальной сети за февраль 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 следующего содержания:

  • #!/bin/bash
    
    flow-cat /var/flow/flow-data/2007/2007-02 | flow-filter -fmynet.acl -S 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 -S mynetwork, если бы Нас интересовал исходящий трафик необходимо было бы вместо -S mynetwork указать -D 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 страницы.

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

Постовой

Дизайн натяжных потолков, фото натяжных потолков.

В интернет-магазине telelux.ru духовка AEG стоит сущие копейки.

2 комментов оставлено (Add 1 more)

  1. В статье получается отчёт по исходящему трафику.
    Чтобы получить отчёт по входящему, нужна команда

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

    Желательно также исключить локальный трафик:
    в mynet.acl
    ip access-list standard inet deny 192.168.66.0 0.0.0.255
    ip access-list standard inet permit any
    в параметры flow-filter добавить -S inet

    1. Santer on June 10th, 2010 at 5:41 pm
  2. После пересборки пакета установите его командой:
    rpm -ihv /usr/src/redhat/RPMS/i386/ipcad-3.6.6-2.112asp.src.rpm

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

    А вообще как-то муторно и заумно( Помоему проще squid+ipcad+sams

    2. Grek on April 11th, 2010 at 10:50 am