Настройка системы учета трафика с использованием FreeBSD 8.0, Netams-3.4.5 и libpcap [2010]
Настройка детальной статистики о трафике с возможностью просмотра по выборке через веб-интерфейс на FreeBSD 8.0 с использованием Netams-3.4.5 и libpcap.
Одной из важнейших задач системного администрирования является учет трафика в сети с целью дальнейшего просмотра, анализа и сравнения. Одни, более продвинутые, решают данную задачу написанием собственных скриптов, парсеров и веб-интерфейсов. Другие, пытаясь найти готовые для этого решения, часто разочаровываются, не находя тех, которые подходят под конфигурацию данной сети и требования руководства. Однако, благодаря ребятам с ООО "Нетамс" (http://www.netams.com/), которые занимаются разработкой средств учета и управления сетевым трафиком с 1999 года, "родился на свет замечательный пакет" под незатейливым названием Netams. О нем и пойдет речь.
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 строчку для его запуска
и полностью ее удаляем и сохраняем файл. Для чего это делается. Дело в том, что Нетамс, как я уже говорил, не работает с 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 rule 11 "ip"
service data-source 2 type libpcap source if1 layer7-detect urls rule 11 "ip"
service data-source 3 type libpcap source if2 layer7-detect urls rule 11 "ip"
# здесь можно устанавливать квоты 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 rule 11 "ip"
service data-source 2 type libpcap source if1 layer7-detect urls rule 11 "ip"
service data-source 3 type libpcap source if2 layer7-detect urls rule 11 "ip"
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 с таким содержанием (если файла нет, то создайте его, но обычно после установки Нетамс он там уже лежит):
Options Indexes FollowSymLinks MultiViews Order allow,deny allow from all DefaultLanguage ru AddDefaultCharset WINDOWS-1251 AuthUserFile /usr/local/www/netams/stat/.htpasswd Options Indexes FollowSymLinks MultiViews ExecCGI Order allow,deny allow from all DefaultLanguage ru AddDefaultCharset WINDOWS-1251
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-го филиала.