Система учета Интернет трафика.
Сайт проекта: http://redmine.shelek.su/projects/trafstat/wiki
Ведет статистику по доступу к внешним серверам из локальной сети. Позволяет просматривать статистику как за день так и за месяц. Так же реализована панель управления пользователями, которые могут просматривать всю информацию о трафике хранящуюся в базе.
Вот как выдается информация о трафике:
[img=admin]http://sbt79.narod.ru/traffic.PNG[/img]
Так выглядит админка управления пользователями:
[img=admin]http://sbt79.narod.ru/admin.PNG[/img]
Система учета интернет-трафика
Оно считает только http, как sarg+squid?
Совсем недавно задумался о такой штуке: хорошо бы было видеть, какие файлы были отправлены (через http, например с mail.ru) ну и соответственно кэшировать их навсегда (складывать для дальнейшего просмотра). То есть чтобы можно было видеть, кто что отправлял в интернет (утечка информации и все такое). Возможно ли такое организовать с помощью вашего продукта????
Нет, считает весь трафик, то есть трафик снимается непосредственно с интерфейса. В выводе статистики показывается какой сервер запрашивался и к каким портам на нем были обращения.
Serg79, а трафик считает с помощью ipcad + flowtools? =)
Было бы отличным дополнением, если бы сделать карту трафика, примерно как в яндекс метрике, чтобы было разделение по областям, кто, откуда и в каком количестве.
Можно ссылочку где можно посмотреть на данную карту, а то что то не разу не видел.
Serg79, а трафик считает с помощью ipcad + flowtools? =)
Сейчас трафик снимается посредством libpcap, планирую добавить съем через ULOG iptables.
Прямой ссылки дать не могу, необходимо зарегистрироваться в http://metrika.yandex.ru/ и там уже смотреть smile
Уважаемый Serg79, есть ли мануал по инсталяции и настройке вашей программы ?
Хе хе, только начал писать свой велосипед, как тут уже велосипедисты нарисовались... \
Первый вопрос - лицензия какая?
Serg79, неплохо для замеса ;)
Уважаемый Serg79, есть ли мануал по инсталляции и настройке вашей программы ?
В настройке ничего сложного. Из системных пакетов на данный момент требуется три пакета: Apache, php и MySql. Машина на которую будет устанавливаться система должна выступать в качестве шлюза для локальной сети. То есть должна иметь два интерфейса, один смотрит в локальную сеть (с него снимается трафик), другой смотрит во внешний мир (Интернет).
Замечание для начинающих пользователей Linux
Все ниже приведенные команды командной строки и примеры конфигурационных файлов показаны в качестве пояснения к общему описанию, так как они более лаконичны и информативны. Не пытайтесь бездумно копировать и выполнять их. По большому счету они показывают, что и где нужно разместить в системе, что бы 'trafstat' работал правильно.
Всю систему можно разделить на три независимых компонента, которые требуют настройки:
- База данных (MySql) - требуется для хранения данных о трафике и служебной информации.
- Веб-интерфейс (Apache/php) - требуется для просмотров отчетов.
- Съем трафика (trafd и cron) - включает в себя сам коллектор снимающий трафик и скрипты выгрузки данных о трафике в базу.
Первым делом необходимо распаковать TrafStat, у меня он распакован в '/home'. Таким образом, путь до него выглядит следующим образом '/home/trafstat-0.1-beta'. Для того, что бы удобней было работать я создал ссылку 'trafstat' в '/home' на директорию с распакованными файлами:
# ln -s /home/trafstat-0.1-beta /home/tarfstatВ дальнейшем, на распакованный архив с 'trafstat' я буду ссылаться как на '/home/trafstat'.
1 - Создание базы данных.
Для хранения информации о трафике и служебной информации (пользователи и группы которым доступен веб-интерфейс) необходима база данных. В проекте используется MySql, как его установить и настроить обращайтесь к документации по MySql.
Первым делом необходимо создать базу с именем 'tarfstat' и сформировать в ней таблицы для хранения данных. SQL-скрипт создающий таблицы находиться в файле '/home/trafstat/sql/base.sql'. Команды создающие базу с необходимыми таблицами:
# mysqladmin create trafstat
# mysql trafstat < /home/trafstat/sql/base.sql2 - Настройка веб-интерфейса.
Для работы веб-интерфейса требуется Apache с php, как установить и настроить данный программы обращайтесь к их документации. Советую при настройки php включить вывод всех предупреждений (WARNING) и ошибок (ERROR). При нормальной работе веб-интерфейса, ошибки и предупреждения появляться не должны. Если они будут то при включенных предупреждениях вы их сразу увидите в браузере. Включены или выключены данные опции зависит от дистрибутива, для того что бы их включить требуется добавить или раскомментировать следующие строки в файле 'php.ini':
error_reporting = E_ALL
display_errors = OnДалее следует добавить ссылку в корневом каталоге для веб-страниц Apache, на веб-интерфейс 'trafstat'. В моем случае, корневой каталог для веб-документов Apache имеет следующий путь '/var/www/htdocs'. Соответственно что бы создать ссылку на веб-интерфейс 'trafstat' следует выполнить следующую команду:
# ln -s /home/trafstat/www /var/www/htdocs/trafstatТеперь что бы обратиться к веб-интерфейсу, необходимо в адресной строке браузера набрать адрес машины на которой установлен 'trafstat'. Если 'trafstat' например развернут на машине с ip-адресом '192.168.1.1', то путь к веб-интерфейсу имеет следующий вид 'http://192.168.1.1/trafstat'.
Далее необходимо настроить параметры для доступа веб-интерфейса к базе данных. Они находятся в файле '/home/trafstat/www/config.php'. Так как у меня MySql-ю разрешено принимать только локальные соединения через UNIX-сокеты, то у меня эти настройки имеют следующий вид:
/* настройки базы данных */
$dbhost = 'localhost'; // имя машины на которой крутиться MySQL
$dbname = 'trafstat'; // имя базы данных
$dbuser = 'root'; // имя пользователя для доступа к базе (чтение/запись)
$dbpasswd = ''; // пароль пользователя если необходим
После этого веб-интерфейс должен работать.
3 - Настройка съема трафика.
Данный раздел можно разбить на два независимых подраздела:
- Сборка и настройка коллектора (съемщика) трафика 'trafd'.
- Настройка 'cron' для запуска скриптов выгружающих данные о трафике в базу.
Так как я использую в качестве базового дистрибутива Slackware, то по умолчанию я буду иметь в виду именно этот дистрибутив. Но установка и на другой дистрибутив не должна вызвать больших проблем, мною была установлена и настроена система как в Debian, так и в Fedora.
3.1 - Сборка и установка 'trafd'.
Съемщик трафика 'trafd' представлен в виде исходных кодов и по этому его придется компилировать. Что бы его собрать необходимо выполнить следующие команды:
# cd /home/trafstat/trunk/package/trafd-build
# ./trafd.SlackBuildПосле чего в директории '/tmp' будет собран 'trafd'. В системе Slackware так же будет собран пакет готовый для инсталляции в системе. Все необходимые для инсталляции файлы будут находиться в директории '/tmp/package-trafd', их будет достаточно перенести в корневой каталог '/'.
После установки 'trafd' в систему, необходимо ему указать тот интерфейс с которого будет производиться съем трафика. Это делается в файле '/etc/trafd/trafctl.conf', необходимо раскомментировать строчку с параметром 'interfaces'. У меня он имеет следующий вид:
interfaces="eth1"Автоматический запуск 'trafd' при старте системы обеспечивает скрипт '/etc/rc.d/rc.trafd'. В зависимости от системы необходимо обеспечить его выполнение при запуске системы.
3.1 - Установка скриптов осуществляющих выгрузку данных о трафике в базу.
Что бы установить скрипты выгружающие данные о трафике в базу необходимо выполнить следующие команды:
# mkdir -p /usr/libexec/trafstat
# mkdir -p /etc/trafstat
# cd /home/trafstat/scripts
# cp trafcron.pl trafsave.pl /usr/libexec/trafstat
# cp trafstat.conf /etc/trafstatВот как выглядит у меня файл конфигурации '/etc/trafstat/trafstat.conf', для скриптов выгрузки данных в базу:
# [trafsave.pl]
#
# Options for access to the database
trafsave_db_name = traffic
trafsave_db_user = root
#trafsave_db_pass = 123456
#
# Delay before loading data (sec.)
trafsave_delay = 3
# [trafcron.pl]
#
# Offset time of writing data to the database
trafcron_time_offset = -2
Далее необходимо настроить 'cron' на автоматический запуск выгрузки данных о трафике в базу. Вот как у меня выглядит правило для запуска скрипта сохраняющего информацию о трафике каждые пять минут в файле расписания '/var/spool/cron/crontabs/root' для 'crond', запускаемый от имени пользователя 'root':
# Run trafcron.pl
*/5 * * * * /usr/libexec/trafstat/trafcron.pl 2>&1 > /dev/null
Первый вопрос - лицензия какая?
Я пока не заморачивался этим вопросом, но все исходники находятся в открытом доступе. И в дальнейшем планируется развивать проект как открытый.
Serg79, видите ли... Мне уже нравится. Хочу использовать. А значит буду пилить. Хорошо пилить, когда уверен в будущем.
Так что, если не сложно, обремените себя этим вопросом уже.
zerg, продукт разрабатывается под GPL лицензией.
Serg79, спасибо, мне полегчало smile
Вот такой вопрос, времени нет код на php разбирать, но вот грабере инфы (тот что на перле для запуска кроном) с интерфейса интересют данные переменной $psize. Что туда попадает? Какие данные соединения? Просто думаю перевести всё это на ulog-acctd.
bytes - размер данных в пакете (TCP/UDP), psize - полный размер пакета (вместе с заголовками).
Serg79Прога хорошая, поставил себе на интернет шлюз для пробы. Но вот незадача, поработала она буквально 3-4 часа и база весит после этого 26 метров. До каких размеров она разрастёца за 1-2 дня работы?
Статичтика пишетса в базу за твоим маном каждые 5 мин.
Да, данные о трафике скидываются каждые пять минут. Но новые записи не добавляются если есть уже данная запись, иначе говоря с начало вызывается update (psize += new_psize) и если этот запрос заканчивается неудачно, то вызывается select который добавляет новую запись в таблицу.
kisil, посмотри сколько записей в таблице traffic.
# mysql trafstat
> select count(*) from traffic;
И еще, сколько компов в конторе которые имеют доступ к внешним ресурсам Интернета? Обычно в среднем одна машина обращается к 1500 разным IP за день, в среднем за час получается 100 - 400 IP.
на 15 часов 51 минуту в базе было 177900 записей.
В конторе приблизительно 150 машын, нореально в день в инет ходят 60-70 машын стабильно.
База уже весит
du -b ./trafstat
29000910 ./trafstat
Сбор статичтики беспрерывно происходит то 12,00.
kisil, однозначно при таком потоке база скоро переполниться.
kisil у меня к тебе такая просьба, попробуй подержать работу TrafStat сутки. И выложить данные о количестве записей в таблице traffic и размере базы данных. У меня сейчас на тестовом стенде вот такие параметры:
debian:/var/lib/mysql# du -B M traffic/
91M traffic/
debian:/var/lib/mysql# du -b traffic/
94580512 traffic/
mysql> select count(*) from traffic;
+----------+
| count(*) |
+----------+
| 660101 |
+----------+
1 row in set (0.00 sec)
Хотелось бы увидеть что то подобное на твоей системе за сутки работы. Все таки у тебя 50 активных машин которые считай весь рабочий день ходят в Инет, мне такого трафика вжизнь не прокочать на стенде.)))
А теперь о проблеме. Я на данный момент вижу следующее решение: периодически запускать уплотнение таблицы. Что это значит. За текущий месяц разрешение по трафику будет в один час. За предыдущие месяцы текущего года разрешение по трафику будет в одни сутки. За предыдущие годы разрешение по трафику будет в один год. Т.е. по одному юзеру за предыдущий месяц информацию о трафике можно будет смотреть с разрешением в один день, текущий месяц - один час. Как то так. Это позволит значительно сократить размер базы.
kisil, если есть какие то предложения то говори. А так я завожу запрос на реализацию данного функционала с наивысшим приоритетом.