From: Max Birintsev <birintsev@mail.ru.>
Newsgroups: email
Date: Mon, 28 Sep 2009 17:02:14 +0000 (UTC)
Subject: Настройка системы учета трафика на базе Cacti, SNMP, bpft, FreeBSD
Система:
FreeBSD 7.1, jail-ы с помощью ezjail-3.0 с выделенными IP на одном интерфейсе
Цель:
Мониторинг всего трафика (исходящий/входяший) по каждому из jail. Фактически
будем считать по каждому IP
Возможности применения:
Мониторинг наборов пользовательских потоков
Требования:
Непосредственно: Cacti, SNMP, bpft
Необходимо также: bpf фильтр в ядре, bttp сервер Apache, сервер баз данных mySQL
Реализация:
Инсталлируем Cacti из портов
cd /usr/ports/net-mgmt/cacti
make
make install
по окончании установки следуем полученным инструкциям (сообщение инсталлятора):
1. Создаем БД в MySQL:
# mysqladmin --user=root create cacti
2. Устанавливаем логин пароль для cacti:
(change user and/or password if requered)
# echo "GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY ''cactiuser''; FLUSH PRIVILEGES;" | mysql
3. Импортируем БД cacti:
# mysql cacti < /usr/local/share/cacti/cacti.sql
4. Настраиваем соедниение к базе данных mySQL для Cacti в файле /usr/local/share/cacti/include/db-settings.php
если ничего не меняли в инициализации базы данных (см. предыдущий пункт), примерно так:
<?php
/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cacti";
$database_port = "3306";
?>
создаём конфигурационный файл /usr/local/etc/snmp/snmpd.conf и пишем в него строки
syslocation "Мой город, улица"
syscontact moj-email@moj-server.com
com2sec readonly default PASSWORD
group MyROGroup v1 readonly
group MyROGroup v2c readonly
view all included .1 80
access MyROGroup "" any noauth exact all none none
запускаем демон SNMP
/usr/local/etc/rc.d/snmpd.sh start
пробуем получить ответ от демона SNMP
snmpwalk -v 2c -c PASSWORD localhost system
должен вернуть список переменных с ключами
Инсталлируем bpft4(trafd) из портов
cd /usr/ports/net-mgmt/bpft
make
make install
Создаём конфигурационный файл и пишем в него строки (в моём случае это интерфейс em0)
# trafd configuration file
# interfaces to proceed
#IFF_LISTEN="eth0 eth1"
IFF_LISTEN="em0"
# options for trafd (-pr - default options)
# Don''t use "-i" here !
em0_opts="-pr"
#eth1_opts="-r -m0"
Создаём папку /var/log/trafd и делаем symlink /usr/local/var/bpft/
Запускаем bpft4(trafd)
/usr/local/etc/rc.d/trafd.sh
Пробуем снять статистику
trafstat -n
Теперь нам необходимо добавить в SNMP списки IP, входящего и исходящего трафика
создаём 3 скрипта
скрипт для сброса статистики каждые 5 мин по крону в бинарный файл
/usr/scripts/trafd-5min.sh
for i in `jot $ipcount`; do
echo $i
done
exit $ipcount # this is the value at OID .1.3.6.1.4.1.2021.49.42.100.1
;;
*)
exit 254
;;
esac
попробуем получить список IP интерфейса
/usr/scripts/snmp-iplist.sh g
и просто индексы
/usr/scripts/snmp-iplist.sh i
для получения исходящего/входящего трафика всех IP интерфейса по отдельности
/usr/scripts/snmp-iplist-traffic.sh
#!/bin/sh
myIPs=`/usr/scripts/snmp-iplist.sh g`
case $1 in
in)
for IP in $myIPs; do
/usr/local/bin/traflog -n -i em0 from all to $IP | grep ''Summary'' | /usr/bin/awk ''{print $2+$5}''
done
;;
out)
for IP in $myIPs; do
/usr/local/bin/traflog -n -i em0 from $IP to all
| grep ''Summary'' | /usr/bin/awk ''{print $2+$5}''
done
;;
*)
exit 254
;;
esac
попробуем получить входящий трафик всех IP интерфейса по отдельности (если уже сработал
крон для скрипта /usr/scripts/trafd-5min.sh)
/usr/scripts/snmp-iplist-traffic.sh in
попробуем получить исходящий трафик всех IP интерфейса по отдельности (если уже
сработал крон для скрипта /usr/scripts/trafd-5min.sh)
/usr/scripts/snmp-iplist-traffic.sh out
Добавляем созданные скрипты в конфигурационный файл SNMP /usr/local/etc/snmp/snmpd.conf
extend .1.3.6.1.4.1.2021.49 iplist /usr/scripts/snmp-iplist.sh g
extend .1.3.6.1.4.1.2021.49.42 ipindex /usr/scripts/snmp-iplist.sh i
extend .1.3.6.1.4.1.2021.50 traffic_in /usr/scripts/snmp-iplist-traffic.sh in
extend .1.3.6.1.4.1.2021.51 traffic_in /usr/scripts/snmp-iplist-traffic.sh out
перезапускаем SNMP
/usr/local/etc/rc.d/snmpd restart
пробуем возвращает ли SNMP данные скриптов (по очереди)
в настоящем руководстве указан самый быстрый найденный путь после того
как автор попробовал много длинных тупиков
Улучшения
* изменить пароль доступа к базе данных mySQL для Cacti
* выделить под Cacti отдельный поддомен вместо глобального алиса
* ограничить доступ к веб-интерфейсу Cacti
* изменить пароль доступа к SNMP (в этом примере PASSWORD)
* изменить переменные syslocation, syscontact