форумы  рассылка  download Перейти на новую версию сайта:
www.slackware.ru
Искать    где:    






    
slackware.ru > Сети > Топология, маршрутизация, DNS > ipac - отследи свой трафик ID:649
 
2003-08-06 meik
ipac - отследи свой трафик
Что такое ipac?
Ipac - это программный пакет для ОС Linux. Он предназначен для сбора, суммирования и представления данных о количестве и размере пакетов протокола TCP/IP, прошедших через какой-либо интерфейс. Говоря проще, ipac позволяет собирать статистику об интернет-трафике пользователей локальной сети, подключенных к интернету через шлюз, и представлять отчёты в виде простых ASCII таблиц, ASCII графиков (довольно симпатично), либо в виде картинок в формате png (gif), которые представляют трафик в виде графика изменения загрузки интерфейса с течением времени. Возможна интеграция ipac'a с довольно популярным MRTG.

Ipac версия 1.10.
Создатель ipac - Moritz Both (с)1997-2000.
Страничка автора http://www.comlink.apc.org/~moritz/ipac.html.
Там же можно и скачать ipac.

Что нужно для работы ipac?
Прежде всего Линух :-)
Для работы ipac'у необходимо наличие ipchains (либо ipfwadm на худой конец) скомпилированных в ядре (т.е. ядро скомпилино с опцией CONFIG IP FIREWALL Y - для 2.1.* и 2.2.* и CONFIG_IP_ACCT Y - для 2.0.*). Также потребуется perl 5, и, если возникнет желание создавать картинки, перловская библиотека, называемая "GD" (скачать можно с http://www.cpan.org/CPAN.html, но обычно присутствует в стандартной поставке перла).

Как работает ipac?
IPAC состоит из двух скриптов (shell и perl) и программки на С: ipacset, ipacsum и fetchipac:

ipacset читает конфигурационный файл ipac.conf и устанавливает правила ip accounting (счётчики) для ядра, используя ipchains (ipfwadm);

fetchipac запускается из cron'а, читает текущие значения счётчиков и пишет их в новый файл;

ipacsum суммирует данные из файлов, сгенерированных fetchipac'ом и в зависимости от переданных параметров, заменяет эти файлы одним. В нём показаны значения счётчиков в виде таблицы, либо графиков png, либоASCII графиков.

Инсталим ipac.
1. Правим config (подробнее ниже).
2. Набираем 'make'.
3. Под рутом вводим 'make install'.
4. После того как прога скомпилится, создаём файл ipac.conf. Ложим его в /etc и запускаем ipacset (подробнее ниже).
5. В cron'е добавляем строку для запуска fetchipac (подробнее ниже).
6. Делаем кое-какие примочки, чтобы всё работало бесперебойно (подробнее ниже).

Правим config.
В конфиге прописываются те вещи, которые необходимы для инсталляции и последующей работы ipac'а. Опции в файле указаны ПРОПИСНЫМИ буквами (отличить будет просто :). Чтобы включить опцию необходимо удалить знак комментария '#' перед опцией.

Пройдёмся по основным:

INSTALLPATH /usr/local/ipac/bin
Данная опция просто указывает куда будут инсталены исполняемые файлы, то бишь ipacset, fetchipac и ipacsum.
IMANPATH /usr/local/ipac/man/man8
Опция указывает на местоположение манов после инсталяции (очень советую их почитать).
ACCTDIR /var/log/ip-acct
Важная опция, которая указывает, куда fetchipac будет складывать логи с данными.
RUNFILE /var/run/ip-accounting-rules
Месторасположение файла ip-accounting-rules, который необходим для работы fetchipac. Дело в том, что файл ipac.conf читается лишь один раз скриптом ipacset при запуске системы, генерируется этот файлик, и его уже и использует fetchipac для генерации логов.
RULESFILE /etc/ipac.conf
Опция указывает на местоположение манов после инсталяции (очень советую их почитать).
IMANPATH /usr/local/ipac/man/man8
Эта опция определяет, где находится конфигурационный файл ipac.conf.
LOCKFILE /var/lock/ipac.lck
Так называемый лок-файл. Генерируется для того чтобы избежать запуска fetchipac во время работы ipacset. Так что каждый раз при запуске ipacset можно не удалять из crontable fetchipac, его запуск всё равно будет блокирован на время работы ipacset.
TMPDIR /tmp
Тэмповская директория.
STRIP_DEBUG yes
Полезна только если вы хотите отладить ipacsum. Если оставить закоментированной, отладочный код не будет включён в скрипт.

Настройки идущие далее можно и не трогать. IPAC разберётся сам (-:

IPFWADM /sbin/ipfwadm
Если стоит ядро 2.0.* указывается путь до ipfwadm.
IPCHAINS /sbin/ipchains
Для ядра 2.1.13 и более поздних указывается путь до ipchains.
PNG_WIDTH 500
PNG_HEIGHT 150
PNG_INDEX_DEFAULT index.html
Некоторые параметры для картинок (если вы захотите посмотреть на графики).
MAX_RULE_NAME_LENGTH 80
Максимальная длина имени правила (80 за глаза хватит :)

Далее в конфиге больше ничего трогать не рекомендуется.

Конфигурационный файл ipac.conf.
Это очень важный файл. Здесь содержится то, что будет считать ipac. А считать он может всё, ни один пакетик не пройдёт мимо без учёта.
Формат файла таков:
Имя_правила|направление|интерфейс|протокол|источник|приёмник, где:

Имя_правила
Любая строка, которая будет определять имя правила. Важно, чтобы у каждого правила было уникальное имя иначе правила с одинаковыми именами будут принаматься за одно и их статистика будет суммироваться.
Направление
Может иметь одно из двух значений: in, out (можно и both).
Интерфейс
ip-шник или имя интерфейса (eth0, eth1, ppp0, sbni0, ...), с которого будет сниматься статистика.
Протокол
Название протокола, например: tcp, udp, icmp или all.
Источник
Источник пакетов. Указывается в формате 'IP/маска название (номер) протокола' . Если опускать, то по умолчанию идёт 0/0 - т.е. откуда угодно.
Приёмник
Можно опускать, по умолчанию 0/0. Но лучше писать IP/маска юзера(юзеров), которые получают пакетики.

Пробелы перед и после символа '|' не допускаются. Если вы не указываете источник или приёмник, то все равно должны ставить символ ' | ', т.е. в любом правиле число прямых слэшей должно быть 5.
Пример:
Incoming all|in|eth1|all||
все пакеты по любым протоколам, попадающие на вход интерфейса eth1 (обратите внимание на два подряд идуших '|')
Incoming smtp|in|eth1|tcp|0/0 smtp|
пакеты по протоколу smtp, попадающие на вход eth1 из любого источника к любому приёмнику.
Outgoing all|out|eth1|all||
все пакеты по любым протоколам, попадающие на выход интерфейса eth1
Outgoing smtp|out|eth1|tcp||0/0 smtp
пакеты по протоколу smtp, попадающие на выход eth1 из любого источника к любому приёмнику.

В поле источник/приёмник помимо IP/маска указывается название протокола. Если вы хотите учитывать какой-нибудь хитрый протокол, то можете указать вместо имени номер порта, по которому идёт данный пакет. Например, вместо http можно написать 80.
Конечно иметь представление об общем трафике интересно, но если вы имеете скажем 100 пользователей в локальной сети и для каждого захотите просмотреть статистику входящих/выходящик пакетов хотя бы по 4 основным протоколам (http, ftp, pop-3, smtp), то вам потребуется ручками записать 100*2*4=800 строчек в файл ipac.conf. Это достаточно сложно, поэтому я написал скрипт на перле, которым вы можете воспользоваться, если хотите автоматизировать процесс создания ipac.conf.

Грабли в ipac.conf.
Я долго не мог понять почему не считалась статистика, хотя вроде конфиг был написан корректно. Позже выяснилось, что понятие пакеты-идущие-к-юзеру-в-локальной-сети-из-инета совсем не обязательно попадают на ВХОД интерфейса eth1(или другого), тоже самое для пакетов-идущих-от-юзера-в-инет, т.е. написав incoming all|in|eth1|all|| вы можете не получить статистику для пакетов-идущих-к-юзеру-из-инета, а получите как раз чепуху. Только исправив эту строку (да и все остальные) на incoming all|out|eth1|all|| , т.е поменяв направление с in на out, я как раз и получил то, что хотел. Соотвественно в outgoing ... я прописал направление in. Ну это было у меня, если у вас заработает по другому, значит дело в чём-то другом, ну а если работает значит и не важно.
Итак, у вас есть ipac.conf. Копируем его в /etc и запускаем ipacset. Работает скрипт достаточно долго (особенно если конфиг большой). После оканчания работы вы получаете либо сообщение об ошибке (тогда её надо исправить:) или, если всё удачно, то ядро начнёт считать то, что вы указали в конфиге.
Помните, что при любых изменениях в ipac.conf, надо следом запускать ipacset FETCHIPAC->CRONTABLE.
Теперь важно увидеть нашу статистику. Для этого служит fetchipac. Он при запуске читает значения счётчиков и записывает их в отдельный файл. При этом значения счётчиков в ядре обнуляются. Т.о. в файл записываются значения счётчиков за период времени между двумя запусками fetchipac.
Чтобы получать значения счётчиков за определённый период времени необходимо включить fetchipac в cron. Для этого вписываем в файл /etc/crontab следующую строку: */15 * * * * root /usr/local/bin/fetchipac - т.о. каждые 15 минут (можно указать любое значение, какое пожелаете) будет запускаться fetchipac из crontab и создавать лог со значениями счётчиков. Название лога отражает время запуска fetchipac. Он имеет следующий вид: YYYYMMDD-HHMMSS.


Примочки, для исправления кое-каких багов в работе IPAC.
Перезагрузка:
После перезагрузки ядро начисто забывает про счётчики. По этому, чтобы после перезагрузки велась статистика, необходимо запускать ipacset. Чтобы автоматизировать этот процесс, добавьте в конец файла /etc/rc.d/rc.local cтроку /usr/local/bin/ipacset. Скрипт rc.local запускается при загрузке последним и запускает ipacset без вашего участия, автоматически.
Логи fetchipac:
Создавая логи, fetchipac весьма нерационально использует дисковое пространство. Если запускать его каждые 15 минут, то за день накопится куча логов (у меня дневной прирост порядка 3 мегов). Такую ситуацию призван устранить ipacsum. Необходимо каждый день/неделю/месяц/год запускать его с опцией -r, чтобы он суммировал логи за день/неделю/месяц/год создавал новый один лог (такой же длины, что и любой лог fetchipac) и удалял старые логи. Вариант действия тут такой. Вновь в crontab добавляются такие строки:

1 0 * * * root /usr/local/bin/ipacsum -r -t "the day 1 days ago" >/dev/null
3 0 * * 0 root /usr/local/bin/ipacsum -r -t "the week 1 weeks ago" >/dev/null
5 0 1 * * root /usr/local/bin/ipacsum -r -t "the month 1 months ago" >/dev/null
7 0 1 1 * root /usr/local/bin/ipacsum -r -t "the year 1 years ago" >/dev/null
Соотвественно раз в день будут суммироваться и уничтожаться логи за день, появится новый лог, в котором будет лежать статистика за день. Раз в неделю будут суммироваться и уничтожаться логи за неделю, появиться новый лог, в котором будет лежать статистика за неделю. И так далее месяц, год.



оставить комментарий
Как Вы оцениваете эту статью? 
коментарии к статье

 развернуть комментарии (всего 0,персональных 0)