LinuxForum.Fans
Тема

Система учета интернет-трафика

Автор: Serg79 175 сообщений 67904 просмотров
#50418

Система учета Интернет трафика.

Сайт проекта: 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]

#51296

Оно считает только http, как sarg+squid?
Совсем недавно задумался о такой штуке: хорошо бы было видеть, какие файлы были отправлены (через http, например с mail.ru) ну и соответственно кэшировать их навсегда (складывать для дальнейшего просмотра). То есть чтобы можно было видеть, кто что отправлял в интернет (утечка информации и все такое). Возможно ли такое организовать с помощью вашего продукта????

#51321

Нет, считает весь трафик, то есть трафик снимается непосредственно с интерфейса. В выводе статистики показывается какой сервер запрашивался и к каким портам на нем были обращения.

#51372

Было бы отличным дополнением, если бы сделать карту трафика, примерно как в яндекс метрике, чтобы было разделение по областям, кто, откуда и в каком количестве.

#51375

Serg79, а трафик считает с помощью ipcad + flowtools? =)

#51433
Infokart написал:
Было бы отличным дополнением, если бы сделать карту трафика, примерно как в яндекс метрике, чтобы было разделение по областям, кто, откуда и в каком количестве.

Можно ссылочку где можно посмотреть на данную карту, а то что то не разу не видел.

elve написал:
Serg79, а трафик считает с помощью ipcad + flowtools? =)

Сейчас трафик снимается посредством libpcap, планирую добавить съем через ULOG iptables.

#52177

Прямой ссылки дать не могу, необходимо зарегистрироваться в http://metrika.yandex.ru/ и там уже смотреть smile

#53173

Уважаемый Serg79, есть ли мануал по инсталяции и настройке вашей программы ?

#53209

Хе хе, только начал писать свой велосипед, как тут уже велосипедисты нарисовались... \
Первый вопрос - лицензия какая?

#53212

Serg79, неплохо для замеса ;)

#53326
leksstav написал:
Уважаемый Serg79, есть ли мануал по инсталляции и настройке вашей программы ?

В настройке ничего сложного. Из системных пакетов на данный момент требуется три пакета: Apache, php и MySql. Машина на которую будет устанавливаться система должна выступать в качестве шлюза для локальной сети. То есть должна иметь два интерфейса, один смотрит в локальную сеть (с него снимается трафик), другой смотрит во внешний мир (Интернет).

Замечание для начинающих пользователей Linux
Все ниже приведенные команды командной строки и примеры конфигурационных файлов показаны в качестве пояснения к общему описанию, так как они более лаконичны и информативны. Не пытайтесь бездумно копировать и выполнять их. По большому счету они показывают, что и где нужно разместить в системе, что бы 'trafstat' работал правильно.

Всю систему можно разделить на три независимых компонента, которые требуют настройки:

  • База данных (MySql) - требуется для хранения данных о трафике и служебной информации.
  • Веб-интерфейс (Apache/php) - требуется для просмотров отчетов.
  • Съем трафика (trafd и cron) - включает в себя сам коллектор снимающий трафик и скрипты выгрузки данных о трафике в базу.

Первым делом необходимо распаковать TrafStat, у меня он распакован в '/home'. Таким образом, путь до него выглядит следующим образом '/home/trafstat-0.1-beta'. Для того, что бы удобней было работать я создал ссылку 'trafstat' в '/home' на директорию с распакованными файлами:

text
# ln -s /home/trafstat-0.1-beta /home/tarfstat

В дальнейшем, на распакованный архив с 'trafstat' я буду ссылаться как на '/home/trafstat'.

1 - Создание базы данных.
Для хранения информации о трафике и служебной информации (пользователи и группы которым доступен веб-интерфейс) необходима база данных. В проекте используется MySql, как его установить и настроить обращайтесь к документации по MySql.
Первым делом необходимо создать базу с именем 'tarfstat' и сформировать в ней таблицы для хранения данных. SQL-скрипт создающий таблицы находиться в файле '/home/trafstat/sql/base.sql'. Команды создающие базу с необходимыми таблицами:

text
# mysqladmin create trafstat
# mysql trafstat < /home/trafstat/sql/base.sql

2 - Настройка веб-интерфейса.
Для работы веб-интерфейса требуется Apache с php, как установить и настроить данный программы обращайтесь к их документации. Советую при настройки php включить вывод всех предупреждений (WARNING) и ошибок (ERROR). При нормальной работе веб-интерфейса, ошибки и предупреждения появляться не должны. Если они будут то при включенных предупреждениях вы их сразу увидите в браузере. Включены или выключены данные опции зависит от дистрибутива, для того что бы их включить требуется добавить или раскомментировать следующие строки в файле 'php.ini':

text
error_reporting = E_ALL
display_errors = On

Далее следует добавить ссылку в корневом каталоге для веб-страниц Apache, на веб-интерфейс 'trafstat'. В моем случае, корневой каталог для веб-документов Apache имеет следующий путь '/var/www/htdocs'. Соответственно что бы создать ссылку на веб-интерфейс 'trafstat' следует выполнить следующую команду:

text
# 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-сокеты, то у меня эти настройки имеют следующий вид:

text
/* настройки базы данных */
$dbhost = 'localhost';  // имя машины на которой крутиться MySQL
$dbname = 'trafstat';   // имя базы данных
$dbuser = 'root';       // имя пользователя для доступа к базе (чтение/запись)
$dbpasswd = '';         // пароль пользователя если необходим

После этого веб-интерфейс должен работать.

3 - Настройка съема трафика.
Данный раздел можно разбить на два независимых подраздела:

  • Сборка и настройка коллектора (съемщика) трафика 'trafd'.
  • Настройка 'cron' для запуска скриптов выгружающих данные о трафике в базу.

Так как я использую в качестве базового дистрибутива Slackware, то по умолчанию я буду иметь в виду именно этот дистрибутив. Но установка и на другой дистрибутив не должна вызвать больших проблем, мною была установлена и настроена система как в Debian, так и в Fedora.

3.1 - Сборка и установка 'trafd'.
Съемщик трафика 'trafd' представлен в виде исходных кодов и по этому его придется компилировать. Что бы его собрать необходимо выполнить следующие команды:

text
# cd /home/trafstat/trunk/package/trafd-build
# ./trafd.SlackBuild

После чего в директории '/tmp' будет собран 'trafd'. В системе Slackware так же будет собран пакет готовый для инсталляции в системе. Все необходимые для инсталляции файлы будут находиться в директории '/tmp/package-trafd', их будет достаточно перенести в корневой каталог '/'.

После установки 'trafd' в систему, необходимо ему указать тот интерфейс с которого будет производиться съем трафика. Это делается в файле '/etc/trafd/trafctl.conf', необходимо раскомментировать строчку с параметром 'interfaces'. У меня он имеет следующий вид:

text
interfaces="eth1"

Автоматический запуск 'trafd' при старте системы обеспечивает скрипт '/etc/rc.d/rc.trafd'. В зависимости от системы необходимо обеспечить его выполнение при запуске системы.

3.1 - Установка скриптов осуществляющих выгрузку данных о трафике в базу.
Что бы установить скрипты выгружающие данные о трафике в базу необходимо выполнить следующие команды:

text
# 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', для скриптов выгрузки данных в базу:

text
# [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':

text

# Run trafcron.pl
*/5 * * * * /usr/libexec/trafstat/trafcron.pl 2>&1 > /dev/null
#53327
zerg написал:
Первый вопрос - лицензия какая?

Я пока не заморачивался этим вопросом, но все исходники находятся в открытом доступе. И в дальнейшем планируется развивать проект как открытый.

#53349

Serg79, видите ли... Мне уже нравится. Хочу использовать. А значит буду пилить. Хорошо пилить, когда уверен в будущем.

Так что, если не сложно, обремените себя этим вопросом уже.

#53681

zerg, продукт разрабатывается под GPL лицензией.

#53711

Serg79, спасибо, мне полегчало smile

Вот такой вопрос, времени нет код на php разбирать, но вот грабере инфы (тот что на перле для запуска кроном) с интерфейса интересют данные переменной $psize. Что туда попадает? Какие данные соединения? Просто думаю перевести всё это на ulog-acctd.

#53746

bytes - размер данных в пакете (TCP/UDP), psize - полный размер пакета (вместе с заголовками).

#53827
text
Serg79

Прога хорошая, поставил себе на интернет шлюз для пробы. Но вот незадача, поработала она буквально 3-4 часа и база весит после этого 26 метров. До каких размеров она разрастёца за 1-2 дня работы?
Статичтика пишетса в базу за твоим маном каждые 5 мин.

#53832

Да, данные о трафике скидываются каждые пять минут. Но новые записи не добавляются если есть уже данная запись, иначе говоря с начало вызывается update (psize += new_psize) и если этот запрос заканчивается неудачно, то вызывается select который добавляет новую запись в таблицу.

kisil, посмотри сколько записей в таблице traffic.

text

# mysql trafstat
> select count(*) from traffic;

И еще, сколько компов в конторе которые имеют доступ к внешним ресурсам Интернета? Обычно в среднем одна машина обращается к 1500 разным IP за день, в среднем за час получается 100 - 400 IP.

#53839

на 15 часов 51 минуту в базе было 177900 записей.
В конторе приблизительно 150 машын, нореально в день в инет ходят 60-70 машын стабильно.
База уже весит
du -b ./trafstat
29000910 ./trafstat
Сбор статичтики беспрерывно происходит то 12,00.

#53844

kisil, однозначно при таком потоке база скоро переполниться.

kisil у меня к тебе такая просьба, попробуй подержать работу TrafStat сутки. И выложить данные о количестве записей в таблице traffic и размере базы данных. У меня сейчас на тестовом стенде вот такие параметры:

text
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, если есть какие то предложения то говори. А так я завожу запрос на реализацию данного функционала с наивысшим приоритетом.

Войдите или зарегистрируйтесь, чтобы ответить.