From: Bachilo Dmitry <root@solink.ru.>
Newsgroups: email
Date: Mon, 1 May 2006 18:21:07 +0000 (UTC)
Subject: Простая настройка NeTAMS во FreeBSD
По многочисленным и уже весьма поднадоевшим просьбам публикую подробную
инструкцию по настройке NeTAMS во FreeBSD с использованием данных о трафике
из IPFW, с сохранением статистики в MySQL и генерацией страниц-отчетов в виде
HTML.
Disclimer: Во-первых безусловно NeTAMS мощный инструмент и сделать в нем
можно много чего, но я пишу инструкцию самую попсовую для начинающих,
которым надо только считать трафик. Во-вторых, да, ipacct это очень здорово
и надо использовать именно его, но если админ хочет NeTAMS, почему бы ему не
помочь? Тем более что если статистика делается в первую очередь для того,
чтобы начальство могло её понимать NeTAMS и проще и гибче. Всё это
субъективно, потому статья только для согласных с этим :-) В третьих,
написано всё это в попыхах, в перерывах между основной работой, возможно я
что-то забыл, но вообще за последнюю неделю именно таким способом я подня три
разных сервера, и всё это работает, вот только нетамс с каждым обновлением
меняет синтаксис конфига, будьте внимательны.
Внимание !!! Эта статья типичное хауту. Хауту для FreeBSD. А все эти хауту
совсем не BSD-way, так что всё таки очень настоятельно рекомендуется читать
именно инструкцию к NeTAMS-у, а не эту статью. Но тем не менее...
И так, дано:
Маршрутизатор на FreeBSD с ipfw + natd. Диверт в natd осуществляется через
10000-е правило ipfw
rl0 внутренний интерфейс, смотрящий в локальную сеть
rl1 внешний интерфейс, смотрящий в сеть провайдера.
Локальная сеть 192.168.1.0/255.255.255.0, адрес маршрутизатора 192.168.1.1
Ну во-первых нам понадобится Apache ставим порт /usr/ports/www/apache13.
Во-вторых нам понадобится MySQL, например, пятый,
ставим /usr/ports/databases/mysql5-server. ВАЖНО! Не ставьте порт
нетамса /usr/ports/net-mgmt/netams до того как поставите MySQL. Сначала
MySQL, потом NetAMS иначе второй соберется без поддержки первого и так или
иначе придется его пересобирать.
Пропишите в /etc/rc.conf следующие строки:
apache_enable=YES
mysql_enable=YES
Затем создайте файл /usr/local/etc/rc.d/netams.sh, в него запишите строчку
/usr/local/libexec/netams (без кавычек конечно) и дайте команду
chmod 777 /usr/local/etc/rc.d/netams.sh
в /usr/local/etc/apache/httpd.conf поменяйте пути Directory и DocumentRoot.
На этом этапе, можно сказать, настройка Apache и MySQL завершена. Конечно,
MySQL в данном случае остался с доступом root без пароля, но если никто на
ваш сервер кроме вас больше не суется, и он тщательно зафаерволен, то это, в
общем, не страшно. Переходим к настройке NeTAMS
У вас должен появиться файл /usr/local/etc/netams.cfg, начинающийся с таких
строк:
#NeTAMS version 3.1(1830.1) compiled by root@storage
#configuration built Tue Apr 26 06:17:01 2005
#begin
Перейдем к самому важному: найдем service processor 0
Там должны обязательно быть такие строки:
lookup-delay 2
flow-lifetime 5
Опишем две политики Интернет и локальный трафик
policy acct oid 030000 name internet target proto ip
policy acct oid 030001 name local-traffic target file /usr/netams/local.txt
Как можно понять из написанного, политика internet включает в себя вообще всё,
а политика local-traffic включает в себя адреса, написанные в
файле /usr/netams/local.txt
Далее поставим строчку, чтобы никто не мог, сменив адрес на неописаный в
конфиге, попасть в интернет бесплатно:
restrict all drop local pass
и тоже самое опишем для всей сети:
unit net oid 020000 name ALL-TRAFFIC ip 192.168.1.0 mask 255.255.255.0
no-local-pass acct-policy %local-traffic internet
Видите, как описана политика учета? Объясняю: так как internet это вообще
всё, нам нужно, если трафик локальный, не пустить его к политике учета
internet, для этого мы и ставим процент перед политикой local-traffic этот
символ означает последний в списке проверки. Таким образом, если абонент
заходит на адрес, втречающийся в списке /usr/netams/local.txt, данные по
трафику с этого адреса заносятся только в политику local-traffic и в политику
internet не попадают, если же абонент зашел на другой адрес, local-traffic
ничего не защитал, информация передалась политике internet. Существует
популярное заблуждение, в которое вводят авторы документации NeTAMS, дескать
для этой цели есть символ ! Перед политикой. НЕТ! Этот символ исключает
трафик политики, и считать его просто не получится.
Теперь зададим тех юзеров, которых мы согласны выпустить в интернет и трафик
которых мы и будем считать:
unit host oid 020002 name Valera ip 192.168.1.50 acct-policy %local-traffic
internet
unit host oid 020003 name Roman ip 192.168.1.51 acct-policy %local-traffic
internet
unit host oid 020004 name Stepan ip 192.168.1.52 acct-policy %local-traffic
internet
Синтаксис тот же самый. Номер oid, Имя (для удобства просмотра статистики в
HTML всё тем же начальством :-) адрес, политика учета.
Завершается описание сервиса процессор 0 строкой storage 1 all
Теперь опишем этот самый storage, это все го две строки:
service storage 1
type mysql
Ну а теперь платформозависимая конфигурация:
service data-source 1
type ip-traffic
source divert 199
rule 9999 "ip from any to any out via rl0"
rule 10001 "ip from any to any in via rl0"
Этот сервис описывает откуда брать инфу о трафике. В данном случае мы берем её
из фаервола FreeBSD IPFW.
Обратите внимание NeTAMS окутывает диверт в natd своими правилами, но
слушает внутренний интерфейс, а не внешний.
Ну а дальше просто
service html 0
path /usr/netams
language ru
run 1min
client-pages all
Ну собственно вот и всё, в конце конфига можете написать #end и сохранить его.
В файл /usr/netams/local.txt можно что-нибудь написать, например:
172.22.0.0 /16
172.31.255.5 /255.255.255.255
Перезагружайтесь и через минуту первые данные о трафике уже будут доступны
любому абоненту через веб-интерфейс вашего маршруизатора.
Давайте сверимся еще раз, конфиг будет вроде этого:
#NeTAMS version 3.1(1830.1) compiled by root@storage
#configuration built Tue Apr 26 06:17:01 2005
#begin
#global variables configuration
debug none
user oid 01327B name admin real-name "Dmitry" crypted
$1$$GmbL3iXOMZR57QuGDLv.L1 email root@solink.ru permit all
schedule oid 08FFFF time hourly- action "html"
#services configuration
service server 0
login any
listen 20001
max-conn 6
service processor 0
lookup-delay 2
flow-lifetime 5
policy acct oid 030000 name internet target proto ip
policy acct oid 030001 name local-traffic target file /usr/netams/local.txt
restrict all drop local pass
unit net oid 020000 name ALL-TRAFFIC ip 192.168.1.0 mask 255.255.255.0
no-local-pass acct-policy %local-traffic internet
unit host oid 020002 name Valera ip 192.168.1.50 acct-policy %local-traffic
internet
unit host oid 020003 name Roman ip 192.168.1.51 acct-policy %local-traffic
internet
unit host oid 020004 name Stepan ip 192.168.1.52 acct-policy %local-traffic
internet
storage 1 all
service storage 1
type mysql
service data-source 1
type ip-traffic
source divert 199
rule 9999 "ip from any to any out via rl0"
rule 10001 "ip from any to any in via rl0"
service html 0
path /usr/www/netams
language ru
run 1min
client-pages all