Ключевые слова:statistic, monitoring, netams, traffic, (найти похожие документы)
From: Артур Ломсадзе <ail-man@yandex.ru.>
Newsgroups: email
Date: Mon, 22 Mar 2010 17:02:14 +0000 (UTC)
Subject: Настройка системы учета трафика с использованием FreeBSD 8.0, Netams-3.4.5 и libpcap
Настройка детальной статистики о трафике с возможностью просмотра по
выборке через веб-интерфейс на FreeBSD 8.0 с использованием Netams-3.4.5 и libpcap.
Одной из важнейших задач системного администрирования является учет
трафика в сети с целью дальнейшего просмотра, анализа и сравнения. Одни,
более продвинутые, решают данную задачу написанием собственных скриптов,
парсеров и веб-интерфейсов. Другие, пытаясь найти готовые для этого
решения, часто разочаровываются, не находя тех, которые подходят под
конфигурацию данной сети и требования руководства. Однако, благодаря
ребятам с ООО "Нетамс" (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 (к сожалению, в портах FreeBSD 8.0 ее нет, поэтому качаем отсюда),
в которой в отличие от более старых версий, исправлены многие ошибки
в веб-интерфейсе.
И самым важным ее плюсом можно считать то, что она умеет выдавать отчеты
по трафику за любой период времени по любой выборке (пользователь сам
вводит через интерфейс параметры: кто, с какого порта, куда, на какой
порт и т.д.), а так же графические отчеты, которые так радуют глаз
руководства. Ну, и естественно ее OpenSource-ность. И так, приступим!
Что имеем (буду описывать схему, реализованную у себя): машинка с
FreeBSD 8.0, используемая в качестве шлюза в интернет для сети компании
(можно использовать любой файрволл: PF, IPF, IPFW - не важно, т.к. поток
информации на Netams будет сливать libpcap, который никак не связан с
файрволлами) с 2-мя WAN-интерфейсами (к примеру if1 и if2) (основной и
резервный), 1 LAN (if0).
1. Ставим 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
2. Ставим 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 - пароль, который вы хотите установить.
3. Ставим сетевой сниффер libpcap.
Через него Netams будет собирать статистику.
# cd /usr/ports/net/libpcap && make install clean
4. Ставим Netams-3.4.5.
Для начала нужно скачать его новый порт для FreeBSD. Для этого перейдем,
например, в каталог:
# cd /usr/ports/net-mgmt
затем скачиваем порт
# fetch http://www.netams.com/files/netams-freebsd-port.tgz
Распаковываем архив:
# tar -zxvf netams-freebsd-port.tgz
Появится папка freebsd-port. Переименуем ее (для понятности):
# mv /usr/ports/net-mgmt/freebsd-port /usr/ports/net-mgmt/netams345
Редактируем Makefile:
# ee /usr/ports/net-mgmt/netams345/Makefile
в нем находим строчку:
mysqlclient.16:${PORTSDIR}/databases/mysql51-client \
и полностью ее удаляем и сохраняем файл. Для чего это делается. Дело в
том, что Нетамс, как я уже говорил, не работает с mysql51. Во-вторых,
ему совсем наплевать на то, что у вас и так уже стоит mysql50 (server и
client), и он начинает устанавливать mysql51 (т.к. в Makefile прописаны
зависимости), а затем после долгой компиляции он начинает ругаеться,
чтобы вы удалили mysql50 перед установкой новой версии mysql51. В итоге
- ни mysql-ля ни netams'а. Вываливается с ошибкой.
После того, как удалили ненужную строчку, уже спокойно делаем:
# cd /usr/ports/net-mgmt/netams345 && 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 # пароль указываем тот, который установили для root 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
# здесь можно устанавливать квоты
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"
# $Id: netams.conf,v 1.2 2009-01-31 12:49:01 anton Exp $
#end
Конфиг готов, сохраним его.
Теперь добавляем в 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: 1
# 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-го филиала.
По всем вопросам обращайтесь: ICQ: 493552460, e-mail: ail-man@yandex.ru
>[оверквотинг удален]
>Netgraph и обработка вся в ядре, а конфиг буквально из 5
>строк?
>
>ngctl mkpeer em1: netflow lower iface0
>ngctl name em1:lower netflow
>ngctl connect em1: netflow: upper out0
>ngctl msg netflow: setconfig { iface = 0 conf = 7 }
>
>ngctl mkpeer netflow: ksocket export inet/dgram/udp
>ngctl msg netflow:export connect inet/ip.ad.d.r:port
В давние времена я делал патчик, чтобы заворачивать на нетамс траффик через ipfw.
Очень нужная вещь на машине, делающей nat.
Возможно, что сейчас нетамс это позволяет делать из коробки. Патч разработчикам не высылался..
Используем netams в провайдинге около года. Лично сделал и послал автору множество патчей. Выводы: очень неудобно. Кто додумался сделать такой вырвиглазный неструктурированный вывод на telnet интерфейсе? А ведь именно он используется для парсинга в cgi оболочке. Это просто ужасно, парсить невозможно, добавить своё поле к выводу очень трудно (полетит ВЕСЬ веб интерфес из за парсинга cgi ПО ПРОБЕЛАМ тупо), нету даже описаний пользователей (то есть адреса и телефоны забивать тупо некуда, но я реализовал это прямо на базе данных), вывод пользовательской статистики юзеру весь СТАТИЧЕСКИЙ (то есть на тыщу пользователей имеем СОТНИ гигабайт статически нагеренного html). Плюс ко всему нулевая расширяемость (нет системы, нельзя доставить новый сервер и связать несколько серверов). Плюс ко всему автор бросил проект (1% времени на проект не в счёт) и пишет другой биллинг, закрытый, платный, проприетарный.
Мы рашили либо написать свой биллинг (на базе ipfw\dummynet и ng) либо переходить на abills, но последнего боимся, так как он украинский (а все мы знаем чем это чревато, и имели дело с представителями незалежной)
Н-да. libcap, больше нечего сказать. Интересно как это добро поведет себя на относительно слабой машине и при большом количестве активных пользователей интернетов? Надо divert-ом заворачивать, divert-ом! Зачем писать патчи, если есть штатный механизм? Зачем эти велосипеды и костыли?
===> netams-3.4.5 depends on file: /usr/local/lib/perl5/site_perl/5.8.8/mach/GD.pm - found
===> netams-3.4.5 depends on file: /usr/local/lib/perl5/site_perl/5.8.8/GD/Graph.pm - found
===> netams-3.4.5 depends on file: /usr/local/lib/perl5/site_perl/5.8.8/GD/Text.pm - found
===> netams-3.4.5 depends on file: /usr/local/lib/perl5/site_perl/5.8.8/mach/Storable.pm - found
===> netams-3.4.5 depends on file: /usr/local/lib/perl5/site_perl/5.8.8/mach/DBD/mysql.pm - found
===> netams-3.4.5 depends on file: /usr/local/lib/perl5/site_perl/5.8.8/mach/DBI.pm - found
===> netams-3.4.5 depends on file: /usr/local/lib/perl5/site_perl/5.8.8/Crypt/GeneratePassword.pm - found
===> netams-3.4.5 depends on shared library: gd.4 - found
===> netams-3.4.5 depends on shared library: jpeg.11 - not found
===> Verifying install for jpeg.11 in /usr/ports/graphics/jpeg
===> Installing for jpeg-6b_7
===> Generating temporary packing list
===> Checking if graphics/jpeg already installed
===> jpeg-6b_7 is already installed
You may wish to ''make deinstall'' and install this port again
by ''make reinstall'' to upgrade it properly.
If you really wish to overwrite the old port of graphics/jpeg
without deleting it first, set the variable "FORCE_PKG_REGISTER"
in your environment or the "make install" command line.
*** Error code 1
Stop in /usr/ports/graphics/jpeg.
*** Error code 1
Stop in /usr/ports/net-mgmt/netams345.
*** Error code 1
Отличное руководство! Очень помогло, респект автору, изучил официальную доку в доль и поперёк, но не смог поставить cgi, прочитал это и всё завелось на ура. Ещё раз СПАСИБО!
Вчера завел, наконец-то!, долго собирал из сырцов,
потом были грабли при старте, но теперь все работает! Я с фряхой всего 4 дня, некогда и Федорчука почитать, на работе с 9 до 20.00 , сплю
уже неделю по 5,5 часов, пока хватает, а так -
6 -й год с Linux, а фряху пока плохо знаю.