Установка и настройка NetAms

Post Reply
User avatar
Raven
Бородатый сис
Бородатый сис
Posts: 2791
Joined: 03 Mar 2010, 15:12
ОС: RHEL 8
Location: Из серверной

Установка и настройка NetAms

Post by Raven » 19 Apr 2010, 12:52

Среди систем подсчета траффика для Unix-подобных систем по большому счету черт ногу сломит. Поднимая новый шлюз я серьезно озаботился выбором системы учета трафика... Первоначально предполагалось использовать trafd как самый популярный, а соответственно имеющий кучу разной документации, но вкоре отказался от этой идеи, поскольку выяснилось что у него есть особенность пропускать некоторые пакеты. ipacctd я так и не смог подружить с MySQL, так как все скрипты для переброса данных в базу, которые мне попадались оказались не жизнеспособными. Знакомый посоветовал netams. Чтож, займемся им. Перво-наперво нам нужно скачать свежую версию программы, но официальный сайт производителей почему-то отказался работать, пришлось топать в нигму (имхо лучший на сегодня поисковик), искать и скачивать ручками. распаковываем архив куда-нибудь (у меня это папка /distr)

Code: Select all

# tar -xvf netams-3.4.1rc1.tar.bz
# cd netams-3.4.1rc1
Теперь нужно подправить конфиг, так как параметры заданные в нем не соответствуют действительности.

Code: Select all

# ee configure.sh

Code: Select all

#!/bin/sh
# Configuration script for NeTAMS project
# $Id: configure.sh,v 1.58 2008-02-23 08:35:05 anton Exp $
##########################################################
PATH=/usr/local/sbin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/local/bin
export PATH
makefile=Rules.make

##########################################################
paths="/usr/lib /usr/local/lib /usr/lib/mysql /usr/local/lib/mysql /usr/local/mysql4/lib/mysql
 /usr/local/include/mysql /usr/local/include /usr/include /usr/include/mysql /usr/local/mysql4/include/mysql
 /opt/csw/include /usr/pkg/include/mysql /usr/pkg/lib/mysql $ORACLE_HOME/lib32 $ORACLE_HOME/lib /usr/include/libipq
 /usr/pkg/include /usr/pkg/lib /usr/lib64/mysql /usr/lib64 /usr/include/postgresql "

locate_file(){
	for val in $paths; do
		to_test="$val/$1"
		#echo " try: $to_test"
		if [ -f $to_test ]; then
			var=$val
			return
		fi
	done
var=""
}

##########################################################
warn_on_mysql3xx(){
if [ -f "$v1/libmysqlclient.so.10" ]; then
	echo "!!! Looks like you have MYSQL=3.xx which is NOT supported !!!"
	echo "!!! I will continue making but ensure you have 4.XX or above  !!!"
fi
}

##########################################################
llu_to_qu_patch(){
	cp src/st_sql_mysql.c src/st_sql_mysql.c.orig
	sed -e "s/llu/qu/g" src/st_sql_mysql.c.orig > src/st_sql_mysql.c
	cp src/st_sql_postgres.c src/st_sql_postgres.c.orig
	sed -e "s/llu/qu/g" src/st_sql_postgres.c.orig > src/st_sql_postgres.c
	cp src/st_hash.c src/st_hash.c.orig
	sed -e "s/llu/qu/g" src/st_hash.c.orig > src/st_hash.c
}

##########################################################
prepare_for_freebsd() {
echo "FreeBSD operating system..."
echo "DEFINE += -DFREEBSD" >> $makefile
echo "LIB += -lpcap -lcrypt -pthread -lnetgraph" >> $makefile
echo "INSTALL = /usr/bin/install" >> $makefile

# paths
echo "PATH_TO_ETC=/usr/local/etc" >> $makefile
echo "PATH_TO_WWW=/usr/local/www/netams" >> $makefile
echo "PATH_TO_CONFIG=/usr/local/etc" >> $makefile
echo "PATH_TO_LOG=/var/log/netams.log" >> $makefile
echo "PATH_TO_SCRIPTS=/usr/local/etc/rc.d" >> $makefile
echo "DAEMONDIR=/usr/local/libexec"  >> $makefile
echo "SBINDIR=/usr/local/sbin"	>> $makefile
echo "MANDIR=/usr/local/man"  >> $makefile
echo "STARTUP_SCRIPT=netams-startup-freebsd6.sh"  >> $makefile

#check for FreeBSD-4.xx and patch
var=`uname -r | cut -b 1`
if [ $var -lt 5 ]; then
	echo "With FreeBSD 4 patch the sources..."
	llu_to_qu_patch
else
	echo "With FreeBSD 5 and above will have netgraph module..."
	echo "FREEBSD_KMOD = ng_netams.ko" >> $makefile
	echo "FREEBSD_KMOD_CLEAN = clean_ng_netams.ko" >> $makefile
fi

echo "PROG += flowprobe ipfw2netflow"	 >> $makefile
}

##########################################################
prepare_for_netbsd() {

echo "NetBSD operating system..."
echo "DEFINE += -DNETBSD" >> $makefile
echo "LIB += -lpcap -lcrypt -pthread " >> $makefile
echo "INSTALL = /usr/bin/install" >> $makefile

# paths
echo "PATH_TO_ETC=/usr/pkg/etc" >> $makefile
echo "PATH_TO_WWW=/usr/local/www/netams" >> $makefile
echo "PATH_TO_CONFIG=/usr/pkg/etc" >> $makefile
echo "PATH_TO_LOG=/var/log/netams.log" >> $makefile
echo "PATH_TO_SCRIPTS=/usr/pkg/etc/rc.d" >> $makefile
echo "DAEMONDIR=/usr/pkg/libexec"  >> $makefile
echo "SBINDIR=/usr/pkg/sbin"  >> $makefile
echo "MANDIR=/usr/pkg/man"  >> $makefile
echo "STARTUP_SCRIPT=netams-startup.sh"  >> $makefile

llu_to_qu_patch

echo "PROG += flowprobe"    >> $makefile
}

##########################################################
prepare_for_openbsd() {
echo "OpenBSD operating system..."
echo "DEFINE += -DOPENBSD" >> $makefile
echo "LIB += -lpcap -pthread" >> $makefile
echo "INSTALL = /usr/bin/install" >> $makefile

# paths
echo "PATH_TO_ETC=/usr/local/etc" >> $makefile
echo "PATH_TO_WWW=/usr/local/www/netams" >> $makefile
echo "PATH_TO_CONFIG=/usr/local/etc" >> $makefile
echo "PATH_TO_LOG=/var/log/netams.log" >> $makefile
echo "PATH_TO_SCRIPTS=/usr/local/etc/rc.d" >> $makefile
echo "DAEMONDIR=/usr/local/libexec"  >> $makefile
echo "SBINDIR=/usr/local/sbin"	>> $makefile
echo "MANDIR=/usr/local/man"  >> $makefile
echo "STARTUP_SCRIPT=netams-startup.sh"  >> $makefile

echo "PROG += flowprobe"    >> $makefile
}

##########################################################
prepare_for_linux() {
echo "Linux operating system..."
echo "DEFINE += -DLINUX -D_BSD_SOURCE -I/usr/include/pcap -I/usr/libipq -I../lib/libipulog/include" >> $makefile
echo "LIB += -pthread -lpcap -lcrypt " >> $makefile
echo "INSTALL = /usr/bin/install" >> $makefile

#paths
echo "PATH_TO_ETC=/etc" >> $makefile
echo "PATH_TO_WWW=/var/www/netams" >> $makefile
echo "PATH_TO_CONFIG=/etc" >> $makefile
echo "PATH_TO_LOG=/var/log/netams.log" >> $makefile
echo "PATH_TO_SCRIPTS=/etc/init.d" >> $makefile
echo "DAEMONDIR=/usr/local/sbin"  >> $makefile
echo "SBINDIR=/usr/local/sbin"	>> $makefile
echo "MANDIR=/usr/local/man"  >> $makefile
echo "STARTUP_SCRIPT=netams-startup.sh"  >> $makefile

#ipq
locate_file "libipq.a" && v1=$var && locate_file "libipq.h" && v2=$var
if [ "X$v1" != "X" -a "X$v2" != "X" ]; then
	echo "Will have LIBIPQ support"
	ipv=`iptables -V`
	ipvn=`echo $ipv | sed -e "s/iptables v1.2.//g" -e "s/iptables v1.3./3/g" -e "s/[a-z]//g "`
	if [ $ipvn -lt 5 ]; then
		echo "		LIBIPQ is <=1.2.4 (yours is .$ipvn)"
		echo "DEFINE += -DIPTBL_OLD" >> $makefile
	fi
	echo "LIB += -lipq -L$v1 -lipulog" >> $makefile
	echo "DEFINE += -I$v2" >> $makefile
	echo "NLIB += libipulog" >> $makefile
	echo "PROG += ulog2netflow"    >> $makefile
else
	echo "No LIBIPQ support - install \"iptables-devel\" if needed"
	echo "DEFINE += -DIPTBL_NONE" >> $makefile
fi

echo "PROG += flowprobe"    >> $makefile
}
##########################################################
prepare_for_solaris() {
echo "Solaris operating system..."
#paths
echo "PATH_TO_ETC=/etc" >> $makefile
echo "PATH_TO_WWW=/opt/www/netams" >> $makefile
echo "PATH_TO_CONFIG=/etc" >> $makefile
echo "PATH_TO_LOG=/var/log/netams.log" >> $makefile
echo "PATH_TO_SCRIPTS=/etc/init.d" >> $makefile
echo "DAEMONDIR=/usr/local/sbin"  >> $makefile
echo "SBINDIR=/usr/local/sbin"	>> $makefile
echo "MANDIR=/usr/local/man"  >> $makefile

echo "INSTALL = /usr/sbin/install" >> $makefile
echo "DEFINE += -DSOLARIS" >>$makefile
echo "LIB += -R/usr/local/lib -lnsl -lsocket -lresolv -lpthread" >> $makefile
echo "SYSLIB += -lnsl -lsocket -lresolv" >> $makefile

	#LIBPCAP support
	if [ -f /usr/local/lib/libpcap.so -a -f /opt/csw/include/pcap.h ]; then
		echo "LIB += -L/opt/csw/lib -lpcap" >> $makefile
		echo "DEFINE += -I/opt/csw/include" >> $makefile
		echo "PROG += flowprobe"    >> $makefile
	else
		echo "NO libPCAP"
		echo "DEFINE += -DNOPCAP" >> $makefile
	fi

}
##########################################################
add_common() {

# mysql
locate_file "libmysqlclient.so" && v1=$var && locate_file "mysql.h" && v2=$var
if [ "X$v1" != "X" -a "X$v2" != "X" ]; then
	echo "Will have MYSQL support"
	echo "	[ $v1	$v2 ]"
	warn_on_mysql3xx
	echo "DEFINE += -DUSE_MYSQL -I$v2" >> $makefile
	echo "LIB += -lmysqlclient -L$v1" >> $makefile
fi


#postgres
locate_file "libpq.so" && v1=$var && locate_file "libpq-fe.h" && v2=$var
if [ "X$v1" != "X" -a "X$v2" != "X" ]; then
	echo "Will have POSTGRESQL support"
	echo "	[ $v1	$v2 ]"
	echo "DEFINE += -DUSE_POSTGRES -I$v2" >> $makefile
	echo "LIB += -lpq -L$v1" >> $makefile
fi

# oracle
# XXX Should check for oci.h presence.
# Oracle moves oci.h around the world, this
# is include paths for 8i/9i. YMMV.
locate_file "libclntsh.so" && v1=$var
if [ "X$v1" != "X" ]; then
	use_oracle=`echo $CONFIGURE_ARGS | awk " /--no-oracle/ { print $1 } " | wc -l`
	if [ $use_oracle -eq 0 ]; then
		echo "Will have ORACLE support"
		echo "	[ $v1 ]"
		echo "DEFINE += -DUSE_ORACLE -I$ORACLE_HOME/rdbms/demo -I$ORACLE_HOME/rdbms/public" >> $makefile
		echo "LIB += -L$v1 -R$v1 -lclntsh" >> $makefile
		echo "( if you are building MySQL or PostgreSQL version on the "
		echo "	same computer where Oracle is installed, clean and "
		echo "	invoke this with \"CONFIGURE_ARGS=--no-oracle\" option ) "
	fi
fi

#service billing
if [ -f src/billing.c -o -f src/billing.o ]; then
	echo "Will have BILLING service"
	echo "DEFINE += -DHAVE_BILLING" >> $makefile
	echo "SRC += billing.c s_billing.c" >> $makefile
	echo "HEADERFILES += billing.h" >> $makefile
fi

#debug (on by default)
if [ ! "x$1" = "x-nodebug" ]; then
	echo "Will have DEBUG flag set"
	echo "DEFINE += -DDEBUG" >> $makefile
	echo "FLAGS += -g -Wall" >> $makefile
fi

#memory debug (off by default)
if [ "x$1" = "x-memory" ]; then
	echo "Will have MEMORY DEBUGGING"
	echo "DEFINE += -DMEMORY_DEBUG" >> $makefile
fi

#radius
locate_file "openssl/md5.h" && v1=$var
if [ "X$v1" != "X" ]; then
	echo "Will have RADIUS support"
	echo "DEFINE += -DUSE_LIBRADIUS" >> $makefile
	echo "NLIB += libradius" >> $makefile
	echo "LIB += -lradius" >> $makefile
else
	echo "No RADIUS support - install \"openssl-devel\" (md5.h)"
fi

#PAM
locate_file "security/pam_appl.h" && v1=$var && locate_file "libpam.so" && v2=$var
if [ "X$v1" != "X" -a "X$v2" != "X" ]; then
	echo "Will have PAM support (experimental)"
	echo "DEFINE += -DHAVE_PAM" >> $makefile
	echo "LIB += -lpam -L$v2" >> $makefile
	echo "PROG += pam_netams.so"	>> $makefile
fi

echo "## Configuration file was built.			      ##"
echo "##########################################################"
}

#check if file exist
if [ -s $makefile ] ; then exit; fi

##########################################################
echo "##########################################################"
echo "## Configuring NeTAMS for build targets...	      ##"

#header
rm -f $makefile
echo "#/*************************************************************************"	>  $makefile
echo "#***	Authentication, authorization, accounting + firewalling package"	>> $makefile
echo "#***	Copyright 1998-2002 Anton Vinokurov <anton@netams.com>"			>> $makefile
echo "#***	Copyright 2002-2008 NeTAMS Development Team"					>> $makefile
echo "#***	This code is GPL v3"	>> $makefile
echo "#***	For latest version and more info, visit this project web page"		>> $makefile
echo "#***	located at http://www.netams.com"					>> $makefile
echo "#***							"			>> $makefile
echo "#*************************************************************************/"	>> $makefile
echo "# This is automatically generated Makefile for NeTAMS"				>> $makefile
echo "# Created `date`"									>> $makefile
echo											>> $makefile

echo "PROG += netamsctl ascii2netflow"		>> $makefile
echo "CONFIG_FILE_NAME = netams.conf" >>$makefile

system=`uname`
if [ $system = "FreeBSD" ]; then
	prepare_for_freebsd
fi
if [ $system = "OpenBSD" ]; then
	prepare_for_openbsd
fi
if [ $system = "NetBSD" ]; then
	prepare_for_netbsd
fi
if [ $system = "Linux" ]; then
	prepare_for_linux
fi
if [ $system = "Solaris" -o $system = "SunOS" ]; then
	prepare_for_solaris
fi

echo "#Optional params - uncomment if needed"	>> $makefile
echo -n "Optional features: "
echo -n "BW_limit " && echo "DEFINE += -DHAVE_BW"			>> $makefile
#echo -n "Memory_debug " && echo "DEFINE += -DMEMORY_DEBUG"		>> $makefile
#echo -n "Mutex_debug " && echo "DEFINE += -DMUTEX_DEBUG"			>> $makefile
#echo -n "Timer_ticks " && echo "DEFINE += -DUSE_TICKS"			>> $makefile
echo -n "Fast_FW_checks " && echo "DEFINE += -DFAST_FW_CHECK"		>> $makefile
echo -n "Layer7_filter " && echo "DEFINE += -DLAYER7_FILTER"		>> $makefile
#echo -n "Hash_database " && echo "DEFINE += -DUSE_HASH"			>> $makefile

echo " "

add_common $1 $2

Вот эта вот строчка

Code: Select all

echo "PATH_TO_WWW=/usr/local/www/netams" >> $makefile
меня нисколько не вдохновляет, поскольку Apache у меня настроен несколько в другую папку.
создадим в корне моей директории веб-сервера папку stat

Code: Select all

# mkdir /usr/local/www/apache22/stat
и направим netams в нее - правим злосчастную строчку

Code: Select all

echo "PATH_TO_WWW=/usr/local/www/apache22/stat" >> $makefile
Запускаем его

Code: Select all

# ./configure.sh
Скрипт подправит Makefile, а после скрипта подправим его мы :)

Code: Select all

#*************************************************************************
#***     Authentication, authorization, accounting + firewalling package
#***     Copyright 1998-2002 Anton Vinokurov <anton@netams.com>
#***     Copyright 2002-2008 NeTAMS Development Team
#***     This code is GPL v3
#***     For latest version and more info, visit this project web page
#***     located at http://www.netams.com
#***
#*************************************************************************/
#/* $Id: Makefile,v 1.98 2009-08-01 09:23:54 anton Exp $ */

RELEASE=3.4.3

include Rules.make

#Optional for profiler support
#LIB += -pg -static -lssl -lm -lintl -lz -liconv
#FLAGS += -pg 
#

all: config lib
	cd src && make all

config:
	sh configure.sh

distclean: clean
	rm Rules.make; touch Rules.make; rm -rf *.[0-9] ; 

lib: config
	cd lib && make library
	
clean:
	cd lib && make cleanlibrary
	cd src && make clean

webinstall: 
	$(INSTALL) -d -m 755 $(PATH_TO_WWW)/cgi-bin/admin $(PATH_TO_WWW)/stat $(PATH_TO_WWW)/images 
	$(INSTALL) -m 755 cgi-bin/*.cgi cgi-bin/*.pl cgi-bin/*.tmpl cgi-bin/*.res $(PATH_TO_WWW)/cgi-bin
	$(INSTALL) -m 755 cgi-bin/admin/*.cgi cgi-bin/admin/*.tmpl cgi-bin/admin/*.res $(PATH_TO_WWW)/cgi-bin/admin
	$(INSTALL) -m 644 cgi-bin/admin/.htaccess $(PATH_TO_WWW)/cgi-bin/admin
	$(INSTALL) -m 644 cgi-bin/images/*.gif cgi-bin/images/*.jpg $(PATH_TO_WWW)/images
	$(INSTALL) -m 644 addon/index.html $(PATH_TO_WWW)
	$(INSTALL) -m 644 addon/netams-apache $(PATH_TO_ETC)apache2/sites-available/netams
	ln -fs $(PATH_TO_ETC)/apache2/sites-available/netams $(PATH_TO_ETC)/apache2/sites-enabled/010-netams

install: all webinstall
	$(INSTALL) src/netams $(DAEMONDIR)
	cd src ; $(INSTALL) $(PROG) $(SBINDIR) ; cd ..
	$(INSTALL) -d -m 644 $(MANDIR)/man8
	$(INSTALL) -m 644 doc/*.8 $(MANDIR)/man8
	sed -e "s#PATH_TO_WWW#$(PATH_TO_WWW)#g" addon/netams.conf > /tmp/netams.conf
	$(INSTALL) -m 644 /tmp/netams.conf $(PATH_TO_ETC)/netams.conf.sample
	rm -f /tmp/netams.conf 
	$(INSTALL) -m 644 addon/.netamsctl.rc $(PATH_TO_ETC)/.netamsctl.rc
	$(INSTALL) -m 644 addon/ru-networks.txt $(PATH_TO_ETC)/ru-networks.txt.sample
	sed -e "s#DAEMONDIR#$(DAEMONDIR)#g" -e "s#PATH_TO_ETC#$(PATH_TO_ETC)#g" addon/$(STARTUP_SCRIPT) > /tmp/netams-startup.sh 
	$(INSTALL) -m 755 /tmp/netams-startup.sh $(PATH_TO_SCRIPTS)/netams.sh
	rm -f /tmp/netams-startup.sh
	@echo
	@echo
	@echo NeTAMS is now installed.
	@echo
	@echo Sample configuration file is $(PATH_TO_ETC)/netams.conf.sample
	@echo Edit, rename it and check startup at $(PATH_TO_SCRIPTS)/netams.sh
	@echo
	@echo Web interface and CGI scripts are in $(PATH_TO_WWW)
	@echo Apache Web Server configuration file is at $(PATH_TO_ETC)/apache2/sites-available/netams 
	@echo
	@echo "PLEASE READ THE DOCUMENTATION!"
	@echo "http://www.netams.com"
	@echo

distrib:
	rm -rf TEMP; mkdir TEMP; mkdir TEMP/netams-$(RELEASE)  
	cp -Rp src doc lib cgi-bin Makefile GPL configure.sh Rules.make INSTALL addon TEMP/netams-$(RELEASE)  
	cd TEMP ; find . -type f -exec dos2unix -p {} \; 
	cp -Rp cgi-bin/images TEMP/netams-$(RELEASE)/cgi-bin  
	cd TEMP ; tar -z -c -v --exclude *CVS*  --exclude *.o --exclude *.bak --exclude *~  \
	 --exclude .cvs* -f ../netams-$(RELEASE).tar.gz netams-$(RELEASE) 
	rm -rf TEMP 
Здесь меня собственно не удовлетворяет это:

Code: Select all

	$(INSTALL) -m 644 addon/netams-apache $(PATH_TO_ETC)apache2/sites-available/netams
	ln -fs $(PATH_TO_ETC)/apache2/sites-available/netams $(PATH_TO_ETC)/apache2/sites-enabled/010-netams
В случае с моей FreeBSD 7.3 пути оказались далеко не корректны - даже папка с индейцем уже давно не называется apache2, я уж молчу про структуру ее содержимого. Исправим это дело:

Code: Select all

# ls /usr/local/etc/ | grep apache
apache22
Вот как она теперь выглядит. Посмотрим что внутри:

Code: Select all

# ls /usr/local/etc/apache22
envars.d     httpd.conf     magic    Includes 
extra        mime.types
Честно - что-то я не виду папок sites-available и sites-enabled. Так что будем исправлять положение. По правилам httpd.conf папка extra содержит конфигурацию подключаемых надстроек (типа виртуалхостов и т.д.), так что ей придется заменить собой папку sites-available, а в папке Includes хранятся надстройки автоматически подхватываемые апачем, так что роль папки sites-enabled она выполнит с успехом. Правим!

Code: Select all

	$(INSTALL) -m 644 addon/netams-apache $(PATH_TO_ETC)/apache22/extra/netams
	ln -fs $(PATH_TO_ETC)/apache22/extra/netams $(PATH_TO_ETC)/apache22/Includes/010-netams.conf
Задача расширения .conf тут обязательна, поскольку из папки Includes подхватываются только *.conf.
Итак, все готово, можем компилировать

Code: Select all

# make && make install
Далее создаем виртуалхост для апача и направляем его в папку /usr/local/www/apache22/stat. Если веб-сервер предполагается использовать только для просмотра статистики трафика, то этого можно не делать, а направить NetAms в папку, в которой работает апач и его серв по умолчанию (обычно /usr/local/www/apache22/data).
Далее подготовим MySQL для правильной работы с NetAms.
Создаем базу в которой будет копошиться NetAms

Code: Select all

# mysql –u root –p 
Enter password:
mysql> create database netams; 
mysql> connect netams;
Торжественно вручаем права на эту базу пользователю netams:

Code: Select all

mysql> grant SELECT,INSERT,DELETE,UPDATE,CREATE on netams.* to netams
mysql> grant SELECT,INSERT,DELETE,UPDATE,CREATE on netams.* to netams@localhost;
и задаем пароль пользователя netams:

Code: Select all

mysql> connect mysql; 
mysql> set password for 'netams'@'localhost'=password('pass_for_netams'); 
mysql> set password for 'netams'@'%'=password('pass_for_netams'); 
Для того чтобы внесенные изменения вступили в силу, обновляем активные привилегии и выходим:

Code: Select all

mysql> flush privileges; 
mysql> exit
Копируемобразец конфига в действующий

Code: Select all

# cp /usr/local/etc/netams.conf.sample  /usr/local/etc/netams.conf
Далее идем править конфиг. Есть два варианта снятия трафика - с помощью libpcap непосредственно с интерфейса и снятия с divert-правил фаервола. Я выбрал последний вариант.
Вот исходный конфиг:

Code: Select all

#NeTAMS version 3.4.1 (template 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          
policy name www target proto tcp ports 80 81 8080 3128
policy name mail target proto tcp ports 25 110         
restrict all pass local pass
unit group name CLIENTS acct-policy ip www mail
unit host name server ip 192.168.0.1 acct-policy ip www mail
unit user name client1 ip 192.168.0.10 parent CLIENTS email client1@domain.ru acct-policy ip www mail
unit net name LAN ip 192.168.0.0/24 acct-policy ip www mail
storage 1 all

service storage 1
type mysql

service data-source 1
type libpcap
source eth0
rule 11 "ip"

service quota 0
policy ip
notify soft {owner} 
notify hard {owner} admin
notify return {owner} 
storage 1

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

service html 0
path PATH_TO_WWW/stat
run 10min
htaccess yes
client-pages all
url http://192.168.0.1/netams/
language ru

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

# $Id: netams.conf,v 1.1 2008-01-03 12:44:53 anton Exp $ 
#end


Как видите, далеко не идеален. Будем выпрямлять, для чего мне придется обьяснить значения некоторых директив этого конфига. Разберем файл построчно. Обращаю внимание, что в пределах одного сервиса пустые строки недопустимы. Дело в том, что с точки зрения NeTAMS после пустой строки должно идти начало нового сервиса, и в случае обнаружения пустой строки, за которой не идет определение сервиса, NeTAMS будет аварийно завершать работу. Строка debug none отключает вывод отладочной информации. Следующая строка определяет пользователя:

• user name admin – логин;
• real-name Admin – реальное имя;
• email root@localhost – email;
• password aaa – пароль (незашифрованный);
• permit all – разрешено все.

Следующая строка начинает описание сервиса server. Этот сервис обеспечивает возможность подключения к работающей программе с помощью telnet:

• service server 0 – начало описания сервиса. Каждый сервис должен иметь номер. Это нужно для того, чтобы можно было описать несколько одинаковых сервисов. Например, несколько сервисов storage, которые будут хранить разную информацию в разных БД.
• login any – пустить всех.
• listen 20001 – слушать tcp-порт 20001.
• max-conn 6 – максимальное число одновременных подключений.

• service processor 0 – ядро системы, в нем определяются объекты, по которым будет идти учет.
• policy acct name all-ip target ip – определяет политику, по которой будет производиться подсчет трафика, в данном случае политика с именем all-ip (параметр name) будет считать весь IP-трафик. Параметр target может принимать следующие значения:
• ip – весь IP-трафик;
• icmp – весь icmp-трафик;
• tcp – весь tcp-трафик;
• udp – весь udp-трафик;
• tcp-http – весь tcp-трафик, входящий или исходящий, порты которого 80, 808, 8080, 3128, 442;
• tcp-ports – весь tcp-трафик на указанные порты;
• udp-ports весь udp-трафик на указанные порты.
• unit host name client1 ip 192.168.0.10 parent CLIENTS email client1@domain.ru – определяет объект, для которого будет производиться подсчет трафика. В данном случае объект host с именем client1, IP-адресом 192.168.0.10 (внешний адрес маршрутизатора) и определенной выше политикой all-ip.

Таким образом, с помощью этого правила мы считаем весь IP-трафик, поступающий из Интернета на наш маршрутизатор.

• storage 1 all – передает все данные сервису storage 1.
• service storage 1 – сервис, определяющий тип и параметры доступа к БД, в которой будет сохраняться статистика.
• service data-source 1 – обеспечивает поступление данных о трафике внутрь программы. В данном случае определен источник данных
• service html 1 – организует автоматическое периодическое создание статических html-страниц, содержащих информацию о прошедшем трафике. Периодичность создания задается параметром run, в данном случае она равна 10 минутам.

В первую очередь меняем пароль на необходимый нам

Code: Select all

password aaa
например на

Code: Select all

password 1q2w3e
Далее описываем хранилище данных - под строкой

Code: Select all

service storage 1
type mysql
дописываем

Code: Select all

host localhost
user netams
password pass_for_netams
accept all
Далее определим источник данных - приведем секцию service data-source 1 к следующему виду:

Code: Select all

service data-source 1
type ip-traffic
source divert 199
layer7-detect urls
В нашем случает тип это ip-traffic, а источник, это правило divert 199 в нашем конфиге ipfw, т.е. что бы трафик попадал нетамсу, его нужно на него как-то завернуть и эту функцию выполняет правило divert. Правила NATа на NetAms должны обязательно обрамлять правила, которым NATится сеть в интернет.
Приведу часть своего конфига IPFW:

Code: Select all

${IPFW} add divert 199 ip from ${LAN}/${LAN_MSK} to any out via ${EXT}
${IPFW} add divert natd ip from ${LAN}/${LAN_MSK} to any out via ${EXT}
${IPFW} add divert natd ip from any to ${EXT_IP} in via ${EXT}
${IPFW} add divert 199 ip from any to ${EXT_IP} in via ${EXT}
То есть правила заворачивающие трафик из локальной во внешнюю сеть и обратно дублируются, и заворачивают тот же траффик на счетчик NetAms.
Последняя секция достойная нашего внимания в конфиге - секция service html. Отредактируем ее:

Code: Select all

service html 0
path /usr/local/www/apache22/stat/stat
run 10min
htaccess yes
client-pages all
url http://stat.svyaznoy.kg:8088/
language ru
Вот вроде как и все. Перезапускаем апач, нетамс и правила для фаера и вперед в бой.
Я не злопамятный, я просто часто ковыряю логи
User avatar
Raven
Бородатый сис
Бородатый сис
Posts: 2791
Joined: 03 Mar 2010, 15:12
ОС: RHEL 8
Location: Из серверной

Re: Установка и настройка NetAms

Post by Raven » 06 Aug 2010, 10:18

Кстати, тут такая бяка... С муськой младше 5.0.5х не работает. Какая-то у него не совместимость с ней. А я на поднимаемом мной сейчас шлюзе установил 5.5.1, в результате чего он ничего не считает, в логи сыплет следующее:

Code: Select all

06.08.2010 16:03:53.2623 storage:1 [WARN]: SQL Load data: Malformed packet
06.08.2010 16:03:53.2626 storage:1 [WARN]: mysql show command failed: Lost connection to MySQL server during query
06.08.2010 16:03:53.2627 storage:1 [WARN]: mysql show command failed: MySQL server has gone away
06.08.2010 16:03:53.2627 storage:1 [WARN]: Failed load data into sql for oids try "debug storage"
Включил опцию

Code: Select all

debug storage
Логи стали разнообразнее

Code: Select all

06.08.2010 16:15:08.1836 processor:0 [WARN]: SQL Load data: Malformed packet
|storage: SHOW WARNINGS
06.08.2010 16:15:08.1844 processor:0 [WARN]: mysql show command failed: Lost connection to MySQL server during query
|storage: SHOW ERRORS
06.08.2010 16:15:08.1845 processor:0 [WARN]: mysql show command failed: MySQL server has gone away
06.08.2010 16:15:08.1845 processor:0 [WARN]: Failed load data into sql for summary try "debug storage"
|storage: ObtainDbData query: 'SELECT unit_oid, policy_oid, t_from, prefix, bytes_in, bytes_out FROM summary WHERE                      (t_from=1280599200 AN
06.08.2010 16:15:08.1846 processor:0 [ERR]: mysql select failed: MySQL server has gone away
|storage: mysql DB:1 summary table access problem
|storage: mysql DB:1 opened [netams] for events
06.08.2010 16:15:08.1870 main:0 [WARN]: SQL Load data: Malformed packet
|storage: SHOW WARNINGS
06.08.2010 16:15:08.1875 main:0 [WARN]: mysql show command failed: Lost connection to MySQL server during query
|storage: SHOW ERRORS
06.08.2010 16:15:08.1876 main:0 [WARN]: mysql show command failed: MySQL server has gone away
Откатывать муську не хочу, поэтому думаю стоит покопать в сторону PostgreSQL.
Я не злопамятный, я просто часто ковыряю логи
Post Reply

Return to “Сетевые технологии”