1 (09.06.2010 21:05:50 отредактировано Serg79)

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

Сайт проекта: http://redmine.shelek.su/projects/trafstat/wiki

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

Вот как выдается информация о трафике:
admin

Так выглядит админка управления пользователями:
admin

2 (15.06.2010 06:17:59 отредактировано forkostya)

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

3

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

4 (25.06.2010 23:04:34 отредактировано Infokart)

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

5

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

6

Infokart пишет:

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

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

elve пишет:

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

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

7

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

8 (20.06.2010 13:18:44 отредактировано leksstav)

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

9

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

10

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

11

leksstav пишет:

Уважаемый 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.sql

2 - Настройка веб-интерфейса.
Для работы веб-интерфейса требуется 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

12

zerg пишет:

Первый вопрос - лицензия какая?

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

13

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

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

14

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

15 (22.06.2010 09:22:27 отредактировано zerg)

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

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

16

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

17 (22.06.2010 15:51:36 отредактировано kisil)

Serg79

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

Trouble  in WINDOWS reboot, trouble in UNIX be root.

18 (22.06.2010 16:43:53 отредактировано Serg79)

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

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

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

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

19 (22.06.2010 16:57:56 отредактировано kisil)

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

Trouble  in WINDOWS reboot, trouble in UNIX be root.

20

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

21

kisil, думаю фикс решающий данную проблему выпустить в ближайшие два - три дня...

22

Serg79 ты щас на сайте то ответ чем быстрее. Я подержу систему целий день, даже дольше но давай с послезавтра. Просто я сегодня ночью уежаю в командировку и не хочу оставлять сервер без присмотра с такой прогой. Кабы чаго не случилось. Лады.
Жду ответа. wink

Trouble  in WINDOWS reboot, trouble in UNIX be root.

23

ОК kisil.))

24

ну тогда лады до послезавтра. Мне базу обнулять или катать в ту что уже сегодня собралась? :rolleyes:

Trouble  in WINDOWS reboot, trouble in UNIX be root.

25

Сбрось ее полностью, это для чистоты эксперимента.)))

26

Хорошо договорились.

Trouble  in WINDOWS reboot, trouble in UNIX be root.

27

Тут главное получить статистику по наполнению базы за сутки. Что бы от этого можно было уже отталкиваться.

28

Привет serg79.
Запустил програму приблизительно в 8 часов утра. А так как я с Украины то у тебя было 9.
сечас записей в базе
62724
База весит
11Mb
Это на 11 часов. Я буду писать время по своему часовому поясу тебе поправка +1

Trouble  in WINDOWS reboot, trouble in UNIX be root.

29

Хорошо kisil. Нам главное посмотреть сколько места данные будут занимать завтра в 8 часов утра. Предполагаю, что за 25 Мбайт не уйдет, хотя в полдень народ может массово повалить в Инет.)))

30

Да это так. Но можеть бить и менше, потому что щас началось лето и пользователей поменшало до 40-50 вдень

Trouble  in WINDOWS reboot, trouble in UNIX be root.