Довольно часто на 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)