Как посчитать трафик в Linux::Журнал СА 10.2005
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Архив номеров
Контакты
   

  Опросы
  Статьи

Электронный документооборот  

5 способов повысить безопасность электронной подписи

Область применения технологий электронной подписи с каждым годом расширяется. Все больше задач

 Читать далее...

Рынок труда  

Системные администраторы по-прежнему востребованы и незаменимы

Системные администраторы, практически, есть везде. Порой их не видно и не слышно,

 Читать далее...

Учебные центры  

Карьерные мечты нужно воплощать! А мы поможем

Школа Bell Integrator открывает свои двери для всех, кто хочет освоить перспективную

 Читать далее...

Гость номера  

Дмитрий Галов: «Нельзя сказать, что люди становятся доверчивее, скорее эволюционирует ландшафт киберугроз»

Использование мобильных устройств растет. А вместе с ними быстро растет количество мобильных

 Читать далее...

Прошу слова  

Твердая рука в бархатной перчатке: принципы soft skills

Лауреат Нобелевской премии, специалист по рынку труда, профессор Лондонской школы экономики Кристофер

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9956
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8163
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8264
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5231
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 5919
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

Друзья сайта  

 Как посчитать трафик в Linux

Архив номеров / 2005 / Выпуск №10 (35) / Как посчитать трафик в Linux

Рубрика: Администрирование /  Продукты и решения

АЛЕКСАНДР КУЗНЕЦОВ

Как посчитать трафик в Linux

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

Учитывать трафик, проходящий через шлюз локальной сети в Интернет, мы будем с помощью ipcad (Cisco IP accounting simulator). Это программа, которая может вести подсчёт несколькими механизмами, например, через интерфейсы BPF, libpcap и iptables ULOG. Материал предназначен для тех администраторов, в чьём ведении имеется малая или средняя локальная сеть. Всё, что понадобится для работы, лишь сам ipcad, текстовый редактор для написания скриптов разбора статистики и огромное желание наконец решить задачу подсчёта расходуемого трафика в локальной сети.

Мы рассмотрим процессы установки, настройки и запуска ipcad, а также некоторые примеры написания скриптов разбора статистики.

Установка ipcad

Для начала необходимо скачать последнюю версию ipcad (http://lionet.info/ipcad). На момент написания статьи таковой была 3.6.6. В самом процессе установки нет ничего нетривиального:

# tar -xvzf ipcad-3.6.6.tar.gz

# cd ipcad-3.6.6

# ./configure

# make

# /bin/su -

# make install

В RPM-based-дистрибутивах устанавливать ipcad лучше с помощью checkinstall (дабы следовать правилам пакетной системы).

Настройка ipcad

Из многочисленных способов ведения статистики самым простым является учёт трафика, прошедшего через физические интерфейсы шлюза (в данной статье – два Ethernet-интерфейса). Для конкретизации описания настроек взята локальная сеть с одной подсетью 192.168.0.0/24.

По умолчанию единственный конфигурационный файл ipcad находится в директории /usr/local/etc. Под задачу учёта трафика через два сетевых интерфейса eth0 и eth1 ipcad.conf выглядит следующим образом:

# /usr/local/etc/ipcad.conf

# GLOBAL OPTIONS

# Опция capture-ports включает/отключает дополнительные поля в статистике, такие как: TCP- и UDP-порты, а также

# типы ICMP-пакетов. Однако включение данной опции увеличивает потребление памяти, снижает скорость подсчёта

# трафика и в ряде случаев искажает вывод через RSH, поэтому она в данном примере отключена

capture-ports disable;

# Размер буферов, используемых для передачи статистики ядром, по умолчанию равен 64 Кб, чего вполне достаточно

buffers = 64k;

# INTERFACE OPTIONS

# Интерфейсы, на которых считается проходящий трафик.

# Рассматривается случай шлюза с двумя сетевыми интерфейсами: внутренним (локальная сеть) и внешним (Интернет)

interface eth0;  # Считать трафик на Ethernet-интерфейсе...

interface eth1;  # ...и ещё на одном

# Разделять статистику по каждому IP-адресу для подсети 192.168.0.0/24. «aggregate 192.168.0.0/24» указывает

# ipcad-диапазон адресов сети. «strip 32» означает, что в статистику необходимо заносить все 32 бита

# адреса, принадлежащего данному адресному диапазону

aggregate 192.168.0.0/24 strip 32;

# RSH SERVER OPTIONS

# Настройки rsh-сервера, с помощью которого будет просматриваться статистика.

rsh enable at 127.0.0.1;

# Правила, указанные ниже, описывают политики доступа к статистике ipcad. Root может полностью управлять

# (делать backup, просматривать и изменять таблицы подсчёта). Все остальные могут лишь просматривать статистику

rsh root@127.0.0.1 admin;     

rsh root@127.0.0.1 backup;    

rsh root@127.0.0.1;           

rsh 127.0.0.1 view-only;      

# «Время жизни» и тайм-аут IP-пакета

rsh ttl = 3;

rsh timeout = 30;

# Опцией dumpfile задаётся путь к файлу, в который по умолчанию будут складываться данные статистики

dumpfile = /var/log/ipcad/ipcad-curr.dump;

# OTHER OPTIONS

pidfile = /var/run/ipcad.pid;

# Опция memory_limit задаёт количество памяти для хранения содержимого одного потока данных.

# Синтаксис следующий: memory_limit = <количество>[{k|m|e}] ;

# где k - Кб; m - Мб; e – количество строк таблицы данных

memory_limit = 10m;

Все остальные опции, задаваемые ipcad.conf, в нашем случае можно смело удалить (или, как минимум, закомментировать) за ненадобностью. Таким образом, они не будут задействованы вообще.

Примечание: директория /var/log/ipcad/ не создаётся при установке ipcad, поэтому её необходимо создать самостоятельно. Права на чтение, запись и просмотр содержимого директории с логами ipcad рекомендую дать лишь пользователю root. Всем остальным – запретить всё, чтобы избежать даже просмотр простыми пользователями статистики расходуемого трафика в сети.

На этом процессы установки и настройки завершены, и можно переходить к запуску ipcad.

Запуск ipcad

Запускать ipcad имеет смысл таким образом, чтобы при загрузке он восстанавливал данные о статистике из dumpfile, уходил в фон, а при выключении сбрасывал все данные в тот же dumpfile. Команда для запуска выглядит следующим образом:

/usr/local/bin/ipcad –rds

где:

  • ключ r – импортирует данные из dumpfile;
  • ключ d – «демонизирует» ipcad;
  • ключ s – сбрасывает статистику в dumpfile при выключении ipcad.

Лучше всего разместить указанную команду в один из init-скриптов для запуска ipcad вместе с системой. В какой именно init-скрипт, я не конкретизирую, т.к. это зависит от каждого дистрибутива. Например, в SuSE Linux для подобных целей служит скрипт /etc/init.d/boot.local, а в RedHat – /etc/rc.d/rc.local.

Просмотр статистики

Для управления статистикой ipcad используется rsh, настройки которого [rsh] задаются в конфигурационном файле ipcad.conf (о чём говорится в «Настройка ipcad»).

Общий синтаксис команд для ipcad выглядит следующим образом:

rsh host comand

где host – это хост, на котором ведётся статистика, а comand – это сама команда. В рассматриваемом случае значением host является localhost.

По команде:

rsh localhost help

доступен полный список команд.

А именно:

  • show ip accounting – показать статистику.
  • clear ip accounting – сбросить статистику до контрольной точки. Если контрольная точка не задана, то статистика сбрасывается в ноль.
  • show ip accounting checkpoint – показать статистику, сохранённую в контрольных точках.
  • clear ip accounting checkpoint – сбросить все контрольные точки.
  • show ip cache flow – показать кэш NetFlow.
  • show interface <iface> – показать счётчик интерфейса <iface>.
  • dump [<path>] – сохранить текущую статистику в файл <path>. Если <path> не указывать, то статистика сбросится в dumpfile, указанный в конфигурационном файле ipcad.conf.
  • restore [<path>] – восстановить статистику.
  • import [<path>] – импортировать (добавить) статистику.
  • stat – показать текущее состояние работы ipcad.
  • show version – показать версию и uptime ipcad.
  • shutdown – завершить работу ipcad.

Для просмотра статистики достаточно:

rsh localhost show ip accounting

Однако таким образом на экран выведется информация обо всём трафике, прошедшем через шлюз. То есть в одной таблице будет статистика по всему входящему и исходящему трафику из локальной сети.

Получить нужные данные из вывода команды «show ip accounting» можно, например, с помощью скриптов. Которые вы вполне можете написать сами для каждой конкретной ситуации. Ниже приводится пример для просмотра статистики по одному указанному IP-адресу и подсчёта суммарного трафика для этого IP:

traff.acc

#!/bin/bash

# name of script: traff.acc

HOST=localhost

rsh $HOST dump

rsh $HOST show ip accounting | grep -E  '192\.168\.0\.'$1'([^0-9]|$)'

echo

echo "Summary traffic of 192.168.0.$1 (kbytes):"

rsh $HOST show ip accounting | grep -E  '192\.168\.0\.'$1'([^0-9]|$)' | awk '{s+=$4} END {print(s/1024)}'

Используется просто:

./traff.acc ip

где ip – это число от 1 до 254 (попросту последний октет из IP-адреса).

Результатом работы этого скрипта будет вывод на экран количества (в мегабайтах) входящего трафика для введённого IP-адреса.

Приведённый простейший скрипт будет выводить всю суммарную статистику по указанному IP-адресу, собранную с момента первого запуска ipcad и до текущего момента времени. Это не всегда удобно, поскольку нагляднее иметь данные за какой-то конкретный промежуток времени (день/неделя/месяц).

Мне достаточно вести статистику расходуемого трафика по месяцам. Схема такого учёта выглядит следующим образом: в 23 ч. 59 мин. «последнего» числа каждого месяца делается dump статистики в файл, к названию которого целесообразно добавить значения года и текущего месяца. Уже через минуту, в 0 ч. 00 мин. 1-го числа следующего месяца, счётчик трафика сбрасывается командой «clear ip accounting», статистика начинает вестись «с нуля». По достижении «последнего» дня месяца схема повторяется.

Для реализации этого механизма создан файл /etc/cron.d/ipcad с заданиями для cron:

/etc/cron.d/ipcad

* * * * * root rsh localhost dump >/dev/null

59 23 * * * root date "+\%Y\%m" > /var/log/ipcad/ipcad.date

0 0 1 * * root (rsh localhost dump /var/log/ipcad/ipcad-$(cat /var/log/ipcad/ipcad.date).dump && rsh localhost clear ip accounting) >/dev/null 2>&1

Первая задача из приведённого файла выполняет dump статистики каждую минуту. Делается это для защиты от непредусмотренных выключений и зависаний шлюза, на котором ведётся учёт проходящего трафика.

Вторая строчка – это такой маленький «хак», который автор статьи вынужден был сделать в связи с трудностью указания в расписании «последнего дня месяца» при настройке заданий cron. Суть в том, что каждый день в файл /var/log/ipcad/ipcad.date сохраняется текущий месяц и год (в формате YYYYMM). Эта же процедура ведь произойдёт и в последний день месяца. Уже через минуту третье задание сделает dump статистики в файл, к названию которого прикрепится содержимое файла ipcad.date (т.е. год и уже прошедший месяц в формате YYYYMM), и сбросит счётчик расходуемого трафика. В этот же день файл ipcad.date перезапишется новыми значениями текущих месяца и года. Не совсем красиво, но зато работает.

Теперь, когда есть данные о трафике по каждому месяцу, расположенные в разных dump-файлах, можно изменить скрипт, добавив к нему возможность просмотра общей и частной по каждому IP-адресу статистики израсходованного трафика за какой-то определённый месяц:

traff.acc.2

#!/bin/bash

HOST=localhost

USERS=/etc/hosts

case $1 in

    M|m) echo "Summary LAN traffic of month $2 (Mbytes):"

         rsh $HOST dump

         awk '{s+=$4} END {print(s/1048576)}'

           < /var/log/ipcad/ipcad-$2.dump

         exit 0;;

    U|u) grep -E '192\.168\.0\.'$3'([^0-9]|$)' $USERS | awk '{print($2)}'

         USER=`grep -E '192\.168\.0\.'$3'([^0-9]|$)' $USERS | awk '{print($2)}'`

         rsh $HOST dump

         cat /var/log/ipcad/ipcad-$2.dump | grep -E '192\.168\.0\.'$3'([^0-9]|$)'

         echo

         echo "Summary traffic of $USER in $2 month (kbytes):"

         cat /var/log/ipcad/ipcad-$2.dump | grep -E '192\.168\.0\.'$3'([^0-9]|$)' | awk '{s+=$4} END {print(s/1024)}'

         exit 0;;

    *)   echo "Usage: "

         echo "1) if only month stat:"

         echo "   ./traff.acc.2 m <month>"

         echo "        <number> - number of month"

         echo "2) if user’s stat for month"

         echo "   ./traff.acc.2 u <month> <IP>"

         echo "     <month> - stat for that month"

         echo "     <IP> - last octet of user’s IP address"

         echo "note: for current month in flag <month> just type 'curr'"

         exit 0;;

esac

В приведённом скрипте traff.acc.2 в переменной $USERS определяется файл, в котором есть соответствия имён пользователей и их IP-адресов (в данном примере – это /etc/hosts на шлюзе). Эта переменная необязательна и вводится в скрипт исключительно для наглядности просматриваемой статистики.

Использовать приведённый скрипт можно двумя способами:

./traff.acc.2 m

где семафор m обозначает то, что на экран необходимо вывести общую статистику за указанный месяц.

./traff.acc.2 u

семафор u обозначает, что на экран необходимо вывести статистику указанного пользователя за определённый месяц.

Флаг – это шестизначный номер месяца в формате YYYYMM – такой формат хранения ежемесячных dump-файлов выбран в файле задач для cron (для вывода статистики за текущий месяц следует указать вместо номера месяца слово «curr»).

Флаг – это значение последнего октета IP-адреса пользователя, чью статистику надо просмотреть.

В заключение статьи хочу отметить, что вместо shell-скрипта можно написать скрипт на perl и, добавив элементы навигации, прикрутить страницу с этим скриптом к httpd-серверу. Тогда статистика будет доступна для просмотра через браузер.


Комментарии
 
  04.05.2010 - 01:30 |  Aleks

в строке:
# Размер буферов, используемых для передачи статистики ядром, по умолчанию равен 64 Кб, чего вполне достаточно

buffers = 64k; ( на конце точка-с-запятой)

и еще нужно упомянуть что rsh-client надо устанавливать отдельно


Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru