Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> подсчёт трафика —> Netams 3.4.5

Настройка детальной статистики с возможностью просмотра по выборке через веб-интерфейс на FreeBSD 8.0 с использованием Netams-3.4.5 и libpcap.

Автор: ail-man.


Одной из важнейших задач системного администрирования является учет трафика в сети с целью дальнейшего просмотра, анализа и сравнения. Одни, более продвинутые, решают данную задачу написанием собственных скриптов, парсеров и веб-интерфейсов. Другие, пытаясь найти готовые для этого решения, часто разочаровываются, не находя тех, которые подходят под конфигурацию данной сети и требования руководства. Однако, благодаря ребятам с ООО "Нетамс" (http://www.netams.com/), которые занимаются разработкой средств учета и управления сетевым трафиком с 1999 года, "родился на свет замечательный пакет" под незатейливым названием Netams. О нем и пойдет речь.

Цитируя http://www.netams.com/index.html:

NeTAMS (Network Traffic Accounting and Monitoring Software) - многофункциональная программа по учету и управлению IP-трафиком для маршрутизаторов Cisco или компьютеров под управлением Unix (Linux/FreeBSD/Solaris). Поддерживаются различные методы сбора статистики (tee/divert/ip_queue/ulog/libpcap/netflow v5 и v9/netgraph), хранения в базе данных (BerkleyDB/MySQL/PostgresSQL/Oracle/Radius), агрегирования, отображения, оповещения и пр. Можно проводить блокировку на базе квот, авторизации, исчерпании баланса (биллинг); управлять полосой пропускания, контролировать подмену MAC-адреса, делать связь с RADIUS, создавать гибкие политики учета и фильтрации (полный список).

На момент написания данной статьи последняя "зарелизенная" версия - 3.4.5, в которой в отличие от более старых версий, исправлены многие ошибки в веб-интерфейсе.

И самым важным ее плюсом можно считать то, что она умеет выдавать отчеты по трафику за любой период времени по любой выборке (пользователь сам вводит через интерфейс параметры: кто, с какого порта, куда, на какой порт и т.д.), а так же графические отчеты, которые так радуют глаз руководства. Ну, и естественно ее OpenSource-ность. И так, приступим!

Что имеем (буду описывать схему, реализованную у себя): машинка с FreeBSD 8.0, используемая в качестве шлюза в интернет для сети компании (можно использовать любой файрволл: PF, IPF, IPFW - не важно, т.к. поток информации на Netams будет сливать libpcap, который никак не связан с файрволлами) с 2-мя WAN-интерфейсами (к примеру if1 и if2) (основной и резервный), 1 LAN (if0).




                                Ставим Apache 2.2

Он у нас потребуется для веб-интерфейса Netams'а
# cd /usr/ports/www/apache22
# make install clean

Все опции установки оставляем по-умолчанию.

В файле конфигурации веб-сервера, который лежит в каталоге /usr/local/etc/apache22/httpd.conf, ничего не трогаем.

Добавляем в /etc/rc.conf строчку для запуска apache22:
# echo 'apache22_enable="YES"' >> /etc/rc.conf

и затем запускаем его
# /usr/local/etc/rc.d/apache22 start

Проверяем работу демона:
# ps -ax | grep httpd

В ответ мы получим примерно такое:
1357 ?? Ss 0:01.29 /usr/local/sbin/httpd -DNOHTTPACCEPT
1388 ?? I 0:01.03 /usr/local/sbin/httpd -DNOHTTPACCEPT
1389 ?? I 0:00.20 /usr/local/sbin/httpd -DNOHTTPACCEPT
1390 ?? I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
1391 ?? I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
1392 ?? I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
1627 ?? I 0:01.13 /usr/local/sbin/httpd -DNOHTTPACCEPT
1786 ?? I 0:00.21 /usr/local/sbin/httpd -DNOHTTPACCEPT
1787 ?? I 0:00.06 /usr/local/sbin/httpd -DNOHTTPACCEPT
1788 ?? I 0:00.21 /usr/local/sbin/httpd -DNOHTTPACCEPT





                                Ставим MySQL-Server 5.0

Для работы Netams-3.4.5 потребуется  база данных, где он будет хранить всю статистику. Поэтому ставим mysql50-server (mysql51 не подойдет, т.к. с ним он не работает, а более новые версии не проверял).
# cd /usr/ports/databases/mysql50-server
# make install clean

После окончания установки добавляем в /etc/rc.conf строчку для его запуска
# echo 'mysql_enable="YES"' >> /etc/rc.conf

и запускаем
# /usr/local/etc/rc.d/mysql-server start

Проверяем, запустился ли он
# ps ax | grep mysql

вывод должен быть примерно таким
1233 v0- I 0:00.01 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --user=mysql --datadir=/var/db/mysql --socket=/tmp/m
1270 v0- S 1:15.42 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --pid-file=/var/

Задаем пароль для root mysql-server'а, защищая от недоброжелателей
# /usr/local/bin/mysqladmin -u root password 'new_password'

где new_password - пароль, который вы хотите установить.




                                Ставим сетевой сниффер libpcap.

Через него Netams будет собирать статистику.
# cd /usr/ports/net/libpcap && make install clean





                                Ставим Netams-3.4.5

Вот и приступили к основному моменту настройки. Для начала делаем как обычно:
# cd /usr/ports/net-mgmt/netams && make install clean 

Когда он спросит в процессе установки зависимого порта GD выбрать опции, отметьте галочкой последнюю (ICONV)

Раньше, например, в версии 3.4.1, чтобы отображать графические отчеты требовалось ставить руками дополнительные пакеты. Сейчас он скомпилирует все сам. Сидим и наслаждаемся процессом.

После установки,  появляется папка /usr/local/etc/netams/, где лежит пример конфигурационного файла. Подправим его под свои нужды.
# cp /usr/local/etc/netams/netams.conf.sample /usr/local/etc/netams/netams.conf
# ee /usr/local/etc/netams/netams.conf

#NeTAMS version 3.4.5 (work config)
#begin
#global variables configuration
debug none
# Задаем имя пользователя и пароль для доступа к Нетамсу
user name admin real-name Admin password aaa email root@localhost permit all

#services configuration

service server 0
login local
listen 20001
max-conn 6

service processor 0
lookup-delay 60
flow-lifetime 180
# Указываем порты, которые будут отображаться на графике.
policy name ip target proto ip # весь IP-траффик
policy name www target proto tcp port 80 81 8080 3128 443 # WWW
policy name ftp target proto tcp port 20 21 # FTP
policy name pop3 target proto tcp port 110 # POP3
policy name smtp target proto tcp port 25 # SMTP
policy name ipsec target proto esp # IPSEC
policy name rdp target proto tcp port 3389 5589 3390 5590 5593 37777 # RDP & 
    PORT-MAPPING RDP
policy name ssh target proto tcp port 22 # SSH
restrict all drop local pass
# Задаем группы
unit group name IT acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit group name BUH acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit group name FS acct-policy ip www ftp pop3 smtp rdp ssh ipsec
# Задаем юниты, за которыми будем наблюдать
unit host name WAN1 ip A.A.A.A acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit host name WAN2 ip B.B.B.B acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit net name LAN ip 192.168.99.0/24 acct-policy ip www ftp pop3 smtp rdp 
    ssh ipsec
# IT
unit user name user1 ip 192.168.99.1 parent IT acct-policy ip www ftp pop3
    smtp rdp ssh
unit user name user2 ip 192.168.99.2 parent IT acct-policy ip www ftp pop3
    smtp rdp ssh
unit user name user3 ip 192.168.99.3 parent IT acct-policy ip www ftp pop3
    smtp rdp ssh
# BUH
unit user name user4 ip 192.168.99.4 parent BUH acct-policy ip www ftp pop3
    smtp rdp ssh
unit user name user5 ip 192.168.99.5 parent BUH acct-policy ip www ftp pop3
    smtp rdp ssh
unit user name user6 ip 192.168.99.6 parent BUH acct-policy ip www ftp pop3
    smtp rdp ssh
# FS
unit user name user7 ip 192.168.99.7 parent FS acct-policy ip www ftp pop3 
    smtp rdp ssh
unit user name user8 ip 192.168.99.8 parent FS acct-policy ip www ftp pop3
    smtp rdp ssh
unit user name user9 ip 192.168.99.9 parent FS acct-policy ip www ftp pop3 
    smtp rdp ssh

# Указываем, где будем хранить статистику (в mysql)
service storage 0
type mysql
user root
password new_password # пароль тот же, который ставили для mysql-сервера
accept all

# указываем источники пакетов
service data-source 1
type libpcap
source if0
layer7-detect urls

service data-source 2
type libpcap
source if1
layer7-detect urls

service data-source 3
type libpcap
source if2
layer7-detect urls

# здесь можно устанавливать квоты
# работает только для DIVERT с IPFW, но не с LIBPCAP
service quota 0
policy ip
notify soft {owner}
notify hard {owner} admin
notify return {owner}
storage 1

# включаем сервис мониторинга (то, что нас больше всего интересует)
service monitor 0
monitor to storage 0
monitor unit WAN1
monitor unit WAN2
monitor unit LAN

service alerter 0
report oid 06100 name rep1 type traffic period day detail simple
smtp-server localhost

# указываем ему путь, где он будет хранить файлы отчетов
service html 0
path /usr/local/www/netams/stat
run 10min
htaccess yes
client-pages all
url http://192.168.99.177/netams/
language ru

service scheduler
oid 08FFFF time 5min action "html"

Конфиг готов, сохраним его.

Теперь добавляем в rc.conf строчку для запуска нет-амса:
# echo 'netams_enable="YES"' >> /etc/rc.conf

и запускаем его:
# /usr/local/etc/rc.d/netams start

Проверяем, запущен ли он. Пытаемся соединиться с ним на 20001 порту:
# telnet localhost 20001

Вводим логин и пароль:
Username: admin
Password: aaa

Если успешно вошли, значит Нетамс запущен. Пробуем вводить команды:
# html

# save

# show config

#NeTAMS 3.4.5 (3490.1) root@elproxy.el.dialine.org / Tue 16 Mar 2010 18:51:08 +0300
#configuration built Wed Mar 17 11:24:24 2010
#begin
#global variables configuration
debug none
language ru
user oid 0D85FF name admin real-name "Admin" crypted $1$$HpXmjtul/3i1.bf.B27bU. email root@localhost permit all

#services configuration

service server 0
login local
listen 20001
max-conn 6

service processor
lookup-delay 60
flow-lifetime 180
policy oid 01D5F8 name ip target proto ip
policy oid 0E8D83 name www target proto tcp port 80 81 8080 3128 443
policy oid 071E2B name ftp target proto tcp port 20 21
policy oid 002EBC name pop3 target proto tcp port 110
policy oid 0071C0 name smtp target proto tcp port 25
policy oid 0BCA64 name ipsec target proto esp
policy oid 090D8E name rdp target proto tcp port 3389 5589 3390 5590 5593 37777
policy oid 052534 name ssh target proto tcp port 22
restrict all drop local pass
unit group oid 057B0D name IT acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit group oid 0E1BC0 name BUH acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit group oid 06329F name FS acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit host oid 0F848D name WAN1 ip 0.0.0.0 acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit host oid 0503FE name WAN2 ip 0.0.0.0 acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit net oid 04AA91 name LAN ip 192.168.99.0/24 acct-policy ip www ftp pop3 smtp rdp ssh ipsec
unit user oid 00DD6A name user1 ip 192.168.99.1 parent IT acct-policy ip www ftp pop3 smtp rdp ssh
unit user oid 090448 name user2 ip 192.168.99.2 parent IT acct-policy ip www ftp pop3 smtp rdp ssh
unit user oid 0103E4 name user3 ip 192.168.99.3 parent IT acct-policy ip www ftp pop3 smtp rdp ssh
unit user oid 0108DD name user4 ip 192.168.99.4 parent BUH acct-policy ip www ftp pop3 smtp rdp ssh
unit user oid 034ED6 name user5 ip 192.168.99.5 parent BUH acct-policy ip www ftp pop3 smtp rdp ssh
unit user oid 0FED45 name user6 ip 192.168.99.6 parent BUH acct-policy ip www ftp pop3 smtp rdp ssh
unit user oid 0D0452 name user7 ip 192.168.99.7 parent FS acct-policy ip www ftp pop3 smtp rdp ssh
unit user oid 0F5DC7 name user8 ip 192.168.99.8 parent FS acct-policy ip www ftp pop3 smtp rdp ssh
unit user oid 080611 name user9 ip 192.168.99.9 parent FS acct-policy ip www ftp pop3 smtp rdp ssh

service storage 0
type mysql
user root
password new_password
accept all

service data-source 1
type libpcap
source if0
layer7-detect urls

service data-source 2
type libpcap
source if1
layer7-detect urls

service data-source 3
type libpcap
source if2
layer7-detect urls

service quota
policy ip
notify soft owner
notify hard owner
notify return owner

service monitor 0
monitor to storage 0
monitor unit WAN1
monitor unit WAN2
monitor unit LAN

service alerter 0
report oid 06100 name rep1 type traffic period day detail simple
smtp-server localhost

service html
path /usr/local/www/netams/stat
run 10min
url http://192.168.99.177/netams/
htaccess yes
client-pages all
account-pages none

service scheduler
oid 08FFFF time 10min action "html"

#end

# show version

NeTAMS 3.4.5 (3490.1) root@elproxy.el.dialine.org / Tue 16 Mar 2010 18:51:08 +0300
Run time 3 mins 44.1445 secs
System time: 3 mins 0.0984 secs
Average CPU/system load: 0.04%
Process ID: 44053 RES: 4920K
Memory allocated: 1803131 (411), freed (60) (0 NULL) [351 used]
Total objects:
Oids used: 25
NetUnits: 15
Policies: 8
Services: 15
Users: 1
Connections: 1 active, 2 total

Services info:
Storage ID=0 type mysql wr_q 0/0 rd_q 0/0
Data-source ID=1 type LIBPCAP source if0:0 loop 0 average 0 mcsec
Perf: average skew delay 0 mcsec, PPS: 0, BPS: 0
Data-source ID=2 type LIBPCAP source if1:0 loop 0 average 0 mcsec
Perf: average skew delay 0 mcsec, PPS: 0, BPS: 0
Data-source ID=3 type LIBPCAP source if2:0 loop 0 average 0 mcsec
Perf: average skew delay 0 mcsec, PPS: 0, BPS: 0
Alerter 0 queue max: 255, current: 0
Scheduled tasks: 172

# show monitor

service monitor 0
monitor to storage 0
0 flows in 0 commits
Units: WAN1(0F848D)WAN2(0503FE)LAN(04AA91)
Packets monitored: 172

Если вывод этих команд у вас примерно такой же, то поздравляю! Нетамс у вас установлен правильно и работает. Теперь перейдем к настройке веб-интерфейса программы. В каталоге /usr/local/etc/apache22/Includes/ должен лежать файл netams-apache-freebsd.conf с таким содержанием (если файла нет, то создайте его, но обычно после установки Нетамс он там уже лежит):

<Location /netams>
        Options Indexes FollowSymLinks MultiViews
        Order allow,deny
        allow from all
        DefaultLanguage ru
    AddDefaultCharset WINDOWS-1251
</Location>

<Location /netams/cgi-bin>
        AuthUserFile /usr/local/www/netams/stat/.htpasswd
        Options Indexes FollowSymLinks MultiViews ExecCGI
        Order allow,deny
        allow from all
        DefaultLanguage ru
    AddDefaultCharset WINDOWS-1251
 </Location>

Alias /netams /usr/local/www/netams

AddHandler cgi-script .cgi

Также в каталоге /usr/local/www должна лежать папка netams с самим веб-инетрфейсом. Внтури этой папки каталог cgi-bin. Даем права на запуск всех файлов, лежащих в этом каталоге:
# chmod -R +x /usr/local/www/netams/cgi-bin

Теперь редактируем два файла:
# ee /usr/local/www/netams/cgi-bin/config.cgi

В строке $sql_password="" прописываем пароль, который у нас стоит на mysql, т.е.

$sql_password="new_password"


Затем в строке $sc_passwd="aaa" указываем пароль, который мы поставили на Нетамс (если его не меняли, то оставляем как есть).

Второй файл редактируем аналогичным образом.
# ee /usr/local/www/netams/cgi-bin/admin/config.cgi

Сохраняем файл и даем команду на перезагрузку веб-сервера:
# /usr/local/etc/rc.d/apache22 restart

Теперь заходим через браузер в веб-интерфейс: http://your.freebsd.ip/netams/

Объяснять, что там к чему, не стану, т.к. это займет больше места, чем описание установки и настройки. Тем более на каждой странице есть маленькая кнопочка "Help", которая выдаст подсказку. Скажу только, что графики вы можете просматривать в "Administration interface" -> "Statistics", а мониторить трафик по выборке (кто, с какого порта, куда, на какой порт и т.д.) в "Administration interface" -> "Monitor". Возможности действительно впечатляют! Например, если настроена прозрачная VPN-сеть между филиалами, то можно просмотреть, сколько трафика и по каким портам ушло с любого компьютера 1-го филиала на любой компьютер (или группу) 2-го филиала.




                        Скрины для наглядности:












Документация: http://www.netams.com/doc/index.html

ICQ: 493552460
e-mail: ail-man@yandex.ru
Ломсадзе Артур



размещено: 2010-03-18,
последнее обновление: 2010-12-31,
автор: ail-man


dreamond, 2010-03-20 в 0:44:43

C позволения автора дам некоторый совет касательно ошибок с jpeg.10 и pcap.7

Подобные ошибки у автора не встречались, однако у меня встретились и на 8ке и на 7.2 обе Stable, portsnap && reboot и portupgrade, обноление как ни странно не помогло, поэтому от комментирую как исправить.

ДО установки NeTAMS
1- обновляем порты (так на всякий случай)
2- /usr/ports/graphics/jpeg && make install ( у меня вставала jpeg.8_1 )
3- cd /usr/local/lib
4- ln -s libjpeg.so.YY libjpeg.so.8 где YY версия билиотеки

bas, 2010-03-31 в 19:11:01

Можно проще
ee /usr/ports/net-mgmt/netams345/Makefile
jpeg.10:${PORTSDIR}/graphics/jpeg \
pcap.7:${PORTSDIR}/net/libpcap \
меняем на
jpeg.11:${PORTSDIR}/graphics/jpeg \
pcap.3:${PORTSDIR}/net/libpcap \
и все работает

dreamond, 2010-03-31 в 21:24:18

bas
да мой комментарий не полный- только сейчас заметил, разумеется надо скорректировать версии в makefile, но одной только редакцией не обойтись
Для libpcap это действительно достаточно, но для для jpeg.so необходимо сделать также и линк как я уже говорил.

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

Hoper, 2010-04-06 в 10:10:25

если я не ошибаюсь что блокировка трафика при превышении квоты при таких настройках работать не будет.
type libpcap - это копирование трафика
а что бы блокировать надо его заворачивать
вот так должно быть для IPFW
#=====================
type ip-traffic
source divert 199
#=====================

filier, 2010-05-16 в 12:02:16

u menea rugalsea
.: Can\'t open %%RC_SUBR%%: No such file or directory

reshil
in /usr/local/etc/rc.d/netams Begin the process of deprecating sysutils/rc_subr by
s#. %%RC_SUBR%%#. /etc/rc.subr#

ail-man, 2010-06-18 в 10:01:45

В последних обновленных портах FreeBSD появился Netams-3.4.5, в котором не нужно исправлять makefile. Просто делаем make install clean, и наслаждаемся процессом корректной установки.

Dimkin, 2010-07-22 в 18:02:23

а как коллектор он может выступать?хочу с циски чтобы брал инфу. циска сейчас валит на 996 порт на локальный сервак, но пока в раздумьях чем можно собирать это всё.

dserga, 2010-08-17 в 14:39:14

Это работает при чистом nat-e трафика, а если стоит divert на squid, то вес www траффик пролетает мимо libcap, что тогда делать?

mediamag, 2010-09-24 в 10:02:08

netams понятул libpcap 1.1.1 и увидел, что он уже есть, соответственно STOP. Нужно удалить Libpcap make deinstall clean и запустить установку нетамса заново

alik, 2011-06-26 в 17:23:07

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

ail-man, 2011-06-27 в 22:27:50

К сожалению, такого механизма в netams нет, но он может работать совместно с IPFW. Теоретически, можно настроить связку IPFW (для отключения пользователей, превысивших трафик) + PF (нат, файрволл, портмаппинг и т.д.) + NETAMS, однако я не видел в нете подобные статьи. Будет время, надо будет заняться этим.

am_eagle, 2013-03-23 в 20:25:01

Думаю что для pf можно написать скрипт, который будет из базы mysql получать количество байт по юзеру за определенный период, если превышен, то добавляем user_ip в ранее созданную таблицу pf "block_ip"

Майк, 2014-11-09 в 23:53:54

Пора бы статейку обновить. Мускуля 5.0 в портах уж нет, а 5.1 как верно подметил автор статьи с нетамс не работает. Пробовал мускуль 55, так и не смог побороть ошибку: не конфигуренное хранилище, выход нетамс с ошибкой..



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1479 секунд
Из них PHP: 48%; SQL: 52%; Число SQL-запросов: 86 шт.
Исходный размер: 76013; Сжатая: 14194