Учет трафика в Linux с помощью ipcad
Сети/интернет
Статья была опубликована 1 февраля 2010 года в 00:00, а последний раз правилась 28 августа 2010 года в 01:22.
Постоянная ссылка: http://www.nixp.ru/articles/11.html
Многие системные администраторы в своей работе сталкиваются с задачей подсчета расходуемого трафика в своей локальной сети. Я расскажу, как справиться со сбором статистики и покажу, что, на самом деле, это несложная задача.
Данная статья была изначально опубликована в журнале «Системный администратор» (октябрь, 2005).
Многие системные администраторы в своей работе сталкиваются с задачей подсчета расходуемого трафика в своей локальной сети. Я расскажу, как справиться со сбором статистики и покажу, что, на самом деле, это несложная задача.
В данной статье рассмотрено решение задачи учета трафика, проходящего через шлюз локальной сети в интернет, с помощью ipcad. ipcad (Cisco IP accounting simulator) — это программа для учета трафика, которая может вести подсчет несколькими механизмами, например через интерфейсы BPF, libpcap и iptables ULOG. Материал предназначен для тех администраторов, в чьем ведении имеется малая или средняя локальная сеть. Все, что понадобится для работы — лишь сам ipcad, текстовый редактор для написания скриптов разбора статистики и огромное желание наконец решить задачу подсчета расходуемого трафика в локальной сети.
Данная статья охватывает процессы установки, настройки и запуска ipcad, а также рассматривает некоторые примеры написания скриптов разбора статистики.
Установка ipcad
Для начала необходимо скачать последнюю версию ipcad. На момент написания статьи таковой была 3.6.6. В самом процессе установки нет ничего нетривиального:
$ tar -xvzf ipcad-3.6.6.tar.gz $ cd ipcad-3.6.6 $ ./configure $ make $ /bin/su - # make install
В RPM-основанных дистрибутивах устанавливать лучше с помощью checkinstall (дабы следовать правилам пакетной системы).
Настройка ipcad
Из многочисленных способов ведения статистики самым простым является учет трафика, прошедшего через физические интерфейсы шлюза (в данной статье — два ethernet-интерфейса). Для конкретизации описания настроек взята локальная сеть с одной подсетью 192.168.0.0/24.
По умолчанию единственный конфигурационный файл ipcad находится в директории /usr/local/etc. Преобразованный под задачу учета трафика через два сетевых интерфейса eth0 и eth1 ipcad.conf выглядит следующим образом:
------------------------begin of ipcad.conf-------------------------- # /usr/local/etc/ipcad.conf ################## # GLOBAL OPTIONS # ################## # опция 'capture-ports' включает/отключает дополнительные поля # в статистике, такие, как TCP- и UDP-порты, а также типы # ICMP-пакетов. Однако включение данной опции увеличивает # потребление памяти, снижает скорость подсчета трафика и, # в ряде случаев, искажает вывод через RSH, поэтому она # в данном примере отключена.
capture-ports disable;
# Размер буферов, используемых для передачи статистики ядром, # по умолчанию равен 64 kb, чего вполне достаточно. 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; --------------------------end of ipcad.conf--------------------------
Все остальные опции, задаваемые 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, а в Red Hat — /etc/rc.d/rc.local.
Просмотр статистики
Для управления статистикой ipcad используется rsh, настройки которого [rsh] задаются в конфигурационном файле ipcad.conf (о чем говорится в пункте «Настройка ipcad»). Общий синтаксис команд для ipcad выглядит следующим образом: rsh host command
где 'host’ — это хост, на котором ведется статистика, а 'command’ — это сама команда. В рассматриваемом случае значением '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:
------------------------Begin of 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)}' --------------------------End of traff.acc---------------------------
Используется просто: ./traff.acc ip
где ip — это число от 1 до 254 (попросту, последний октет из IP-адреса). Результатом работы этого скрипта будет вывод на экран количества в мегабайтах входящего трафика для введенного IP-адреса.
Приведенный простейший скрипт будет выводить всю суммарную статистику по указанному IP адресу собранную с момента первого запуска ipcad и до текущего момента времени. А это не всегда удобно, поскольку наглядней иметь данные за какой-то конкретный промежуток времени (день/неделя/месяц). Мне достаточно вести статистику расходуемого трафика по месяцам. Схема такого учета выглядит следующим образом: в 23 ч. 59 мин. «последнего» числа каждого месяца делается dump статистики в файл, к названию которого целесообразно добавить значения года и текущего месяца. Уже через минуту, в 0 ч. 00 мин. 1-го числа следующего месяца, счетчик трафика сбрасывается командой clear ip accounting, статистика начинает вестись «с нуля». По достижении «последнего» дня месяца схема повторяется.
Для реализации этого механизма создан файл /etc/cron.d/ipcad с заданиями для cron’а:
------------------------Begin of /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 --------------------------End of /etc/cron.d/ipcad-------------------
Первая задача из приведенного файла выполняет dump статистики каждую минуту. Делается это для защиты от непредусмотренных выключений и зависаний шлюза, на котором ведется учет проходящего трафика. Вторая строчка — это такой маленький «хак», который автор статьи вынужден был сделать, в связи с трудностью указания в расписании «последнего дня месяца» при настройке заданий cron’а. Суть в том, что каждый день в файл /var/log/ipcad/ipcad.date сохраняется текущий месяц и год (в формате YYYYMM). Эта же процедура, ведь, произойдет и в последний день месяца. Уже через минуту третье задание сделает dump статистики в файл, к названию которого прикрепится содержимое файла ipcad.date (т.е. год и _уже_ прошедший месяц в формате YYYYMM) и сбросит счетчик расходуемого трафика. В этот же день файл ipcad.date перезапишется новыми значениями текущих месяца и года. Не совсем красиво, но зато работает.
Теперь, когда есть данные о трафике по каждому месяцу, расположенные в разных dump-файлах, можно изменить скрипт, добавив к нему возможность просмотра общей и частной по каждому IP-адресу статистики израсходованного трафика за какой-то определенный месяц:
------------------------Begin of 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 " echo " — number of month" echo "2) if user's stat for month:" echo " ./traff.acc.2 u " echo " — stat for that month" echo " — last octet of user's IP address" echo "note: for current month in flag just type 'curr'" exit 0;; esac --------------------------End of traff.acc.2-------------------------
В приведенном скрипте traff.acc.2 в переменной $USERS определяется файл, в котором есть соответствия имен пользователей и их IP-адресов (в данном примере — это /etc/hosts на шлюзе). Эта переменная необязательна и вводится в скрипт исключительно для наглядности просматриваемой статистики.
Использовать приведенный скрипт можно двумя способами:
- ./traff.acc.2 m <month>, где семафор 'm' обозначает то, что на экран необходимо вывести общую статистику за указанный месяц;
- ./traff.acc.2 u <month> <IP>, где семафор 'u' обозначает то, что на экран необходимо вывести статистику указанного пользователя за определенный месяц.
Флаг <month> — это шестизначный номер месяца в формате YYYYMM — такой формат хранения ежемесячных dump-файлов выбран в файле задач для cron’a (для вывода статистики за текущий месяц следует указать вместо номера месяца слово 'curr’); флаг <IP> — это значение последнего октета IP-адреса пользователя, чью статистику надо просмотреть.
В заключение статьи хочу отметить, что вместо shell-скрипта можно написать скрипт на Perl и, добавив элементы навигации, прикрутить страницу с этим скриптом к httpd-серверу. Тогда статистика будет доступна для просмотра через браузер.
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
А можно просто установить TraffPro который будет не только вести учёт но и контролировать доступы, балансировать нагрузку пользователей и прочие нужные вещи!
А можно не устанавливать трафпро, и сделать всё без пропиетарных блобин, то есть гораздо проще и надёжнее.
Оно конечно можно и на велосипеде ездить вместо автомобиля, но как то на авто приятнее.
А вообще учёт учётом, а как же одноклассников рубить, скорость регулировать и балансировать между пользаками шейпером скорость, запускать 2 и более каналов провайдеров? Да и отчёты через web интерфейс приятнее получать мышкой, а не через командную строку, да и клиенты сами могут посмотреть сколько они натратили, ну я не говорю ещё о куче вещей которые умеет делать Traffpro, кстати до 6 пользователей сети он бесплатен при полном (не урезанном) функционале, ну а если контора больше 6 пользаков сети то и деньги в организации значит есть заплатить 6 т.р. за нормальный учёт и контроль трафика Traffpro.
> Оно конечно можно и на велосипеде ездить вместо автомобиля, но как то на авто приятнее.
Печальный видимо опыт? Но траффпро — это не автомобиль, а комбайн. И велосипед, замечу, быстрее комбайна.
> А вообще учёт учётом, а как же одноклассников рубить, скорость регулировать и балансировать между пользаками шейпером скорость, запускать 2 и более каналов провайдеров?
Тут ведь ничего не сказано о перепродаже интернета. Перепродажа интернета — это совершенно другая задача, и, быть может, при небольших масштабах перепродажи, траффпро будет удачным выходом. Тут я ничего сказать не могу.
> Да и отчёты через web интерфейс приятнее получать мышкой, а не через командную строку,
Эммм… Вы мониторите сервера через веб-интерфейс? А профессиональная паранойя не тревожит?
> клиенты сами могут посмотреть сколько они натратили
Да, это удобно. Но когда клиентов >50, было бы приятнее, если бы они ещё и сами платили, могли бы отслеживать текущий баланс на своём аккаунте, подключать опциональные услуги и тд. и тп. Траффпро летит фанерой над Парижем: как и любую пропиетарь его, я уверен, будет крайне сложно допилить, расширить и углубить.
> я не говорю ещё о куче вещей которые умеет делать Traffpro, кстати до 6 пользователей сети он бесплатен при полном (не урезанном) функционале, ну а если контора больше 6 пользаков сети то и деньги в организации значит есть заплатить 6 т.р. за нормальный учёт и контроль трафика Traffpro.
Во-первых, не надо говорить «я не говорю», ведь на самом деле вы говорите. Во-вторых, это реклама?
>> Тут ведь ничего не сказано о перепродаже интернета. Перепродажа интернета — это совершенно другая задача, и, быть может, при небольших масштабах перепродажи, траффпро будет удачным выходом. Тут я ничего сказать не могу.
А кто говорит о перепродаже? Это обычный функционал в организациях, без которого уже не обходится ни в одной организации, или надо работать на одном канале интернет безо всякого резервирования и при первой же поломке останавливать производство? Или если кто то решил покачать торрентом то необходимо всему предприятию ждать пока он скачает?
>>Да, это удобно. Но когда клиентов >50, было бы приятнее, если бы они ещё и сами платили, могли бы отслеживать текущий баланс на своём аккаунте, подключать опциональные услуги и тд. и тп. Траффпро летит фанерой над Парижем: как и любую пропиетарь его, я уверен, будет крайне сложно допилить, расширить и углубить.
Ошибаетесь, API открыто пилите сколько хотите :) дописывайте расширяйте.
> А кто говорит о перепродаже?
Судя по тому, что вы говорите о какой-то «сложной» задаче, я предположил очевидную сложную задачу — перепродажа трафика. Всё остальное решается стандартными средствами. Всё, за исключением веб-морды для пользователей, но, полагаю, что это не проблема.
> Ошибаетесь, API открыто пилите сколько хотите :) дописывайте расширяйте.
Угу. У блоба nvidia тоже открытый API. Дописывайте, расширяйте. Я имел делов с «открытыми» API. Единственное что я вынес из этого, что блобописцев надо отстреливать на дальних подходах. Вместе с их «открытыми» API.
Блоб — это блоб. Это говно мамонта, с которым имеет смысл связываться (быть может имеет смысл) лишь тогда, когда другого выхода нет. А быть может стоит всё же пойти другим путём, несмотря на его отсутствие.
>> Судя по тому, что вы говорите о какой-то «сложной» задаче, я предположил очевидную сложную задачу — перепродажа трафика. Всё остальное решается стандартными средствами. Всё, за исключением веб-морды для пользователей, но, полагаю, что это не проблема.
Стандартными средствами решается, я согласен, но через какие костыли вы же не сказали, то же резервирование канала при двух рабочих каналах, шейпинг, вы хотите сказать, что это для организации тревиальная задача решающаяся стандартными средствами? И много нарешали стандлартными средствами до уровня Traffpro?
P.S> Traffpro имеет две ветки офисная версия для организаций, заточена для раздачи интернета в организациях без всяких денежных операций, только мегабайты. Второй тип для провайдеров, где уже ведутся денежные операции и учёт в деньгах, и уже имеющий возможность как вы описывали: Но когда клиентов >50, было бы приятнее, если бы они ещё и сами платили, могли бы отслеживать текущий баланс на своём аккаунте, подключать опциональные услуги и тд. и тп.
Позвольте, я повторюсь:
> Во-вторых, это реклама?
Просто чем дольше мы разговариваем, тем больше становится ясно, что вы не готовы разговаривать ни о чём, кроме как о сраном трафпро, и при этом готовы разговаривать о нём исключительно в положительном ключе. Если это действительно так, то вы совершенно зря тратите своё время. Положительный отзывов о трафпро можно найти и в гугле. Изложите лучше недостатки трафпро — их не может не быть, любое ПО имеет свои недостатки. Но почему-то на сайте трафпро об этом ничего не написано. Вы тоже, почему-то, о недостатках молчите: может вы просто никогда не использовали трафпро, и наслышаны о нём исключительно по информации с офсайта?
А нет недостатков, ставьте и работайте, могу ещё один положительный момент описать, но не знаю поймёте ли вы, облако Traffpro позволяющее управлять удалёнными офисами, штатными методами о которых вы говорите позволяет?
По поводу использую ли я его? — Работает TraffPro как в организациях стоящих на обслуживании, так и у меня дома раздаёт на 5 компьютеров SmallOffice совершенно бесплатно, ни каких ни реклам не требований заплатить деньги.
По поводу проблем вы можете не сотрясать воздух, а просто зайти в форум, где проблемы описываются и решаются.
>> что вы не готовы разговаривать ни о чём, кроме как о сраном трафпро
Можем поговорить, проблем нет, я рассказать могу много интересного :) например как можно раскорячится :) Я ругаться не собираюсь, просто высказываю своё мнение.
> проблем нет
Глупая реклама. Проблем не может не быть по-определению. В лучшем случае, проблемы возникают лишь на границах применимости. Как правило же они возникают раньше. Так что если вы не видели проблем, значит вы просто никогда не использовали трафпро нигде, кроме как на локалхосте. А судя по обсуждению складывается впечатление что даже на локалхосте вы никогда не использовали ни трафпро, ни ipcad.
Почему вы так уверены? Судя ппо вашим постам вы как раз таки и не в курсе учёта трафика, ни с помощью traffpro, ни с помощь ipcad, собственно и проблемы вам не известны. А судя по вашим выражениям об использовании учёта на локалхосте вообще как бы странно, что вы ещё спорите ;)
> Почему вы так уверены?
Потому что у любой утилиты есть границы применимости.
> А судя по вашим выражениям об использовании учёта на локалхосте вообще как бы странно, что вы ещё спорите ;)
LoL. Я не обратил сразу внимания на эту фразу. Есть устойчивый мем в среде сисадминов: «администратор локалхоста.» То есть «администратор», который не администрировал ничего, кроме локалхоста. Удивительно, что вы не увидели отсылку к этому мему. Складывается впечатление, что даже до администратора локалхоста вы не дотягиваете.
Да нет, видно это вы не дотягиваете :) так как из всего разговора от вас ни чего умного так услышано и не было, один трёп и броские слова троля :)
А от вас, что мы услышали? Я вам прямо предлагал: расскажите про трафпро, но ничего кроме рекламных лозунгов мы так и не услышали.
ну могу сказать по поводу проблем: на 2000 клиентов начинаются проблемы, для traffpro это уже много для одного сервера, так как всё обрабатывается одним сервером (все ограничения, доступы, кто куда ходил, шейпера и так далее). И требуется добавлять второй сервер, хотя они и работают с одной базой.
Однокласники рубятся на уровне DNS. Туда же уходят и 90% баннерных сетей и рекламы.
Это наименее кривой вариант из всех. ИМХО.
Это вы плохо придумали: навязывать платные продукты трушным сисадминам.
До 6 клиентов сети (дом или малый офис) совершенно бесплатно с полным неограниченным функционалом.
Ещё одно рекламное заявление. Это уже начинает утомлять, если честно.
До 6 клиентов реализуется банально руками на скриптах. Полчаса-час работы даже для костыления очередного велосипеда. И вопрос будет исчерпан.