Страница 1 из 1

Abills(Ipn модуль)-Ip биллинг

Добавлено: 2010-03-15 23:57:47
dreamond
В общем была у меня задумка сделать подсчет трафика на основе ipcad или trafd в связке с Abills но вот в данный момент я уже замучился ковыряться- видимо мои знаний самоучки тупо не хватает. Тем не менее пока надежда самому настроить не угасла решил в точности писать для самого себя инструкцию, к-й хочется поделиться что бы хотя бы не потерялась в туне дней.
Поехали:
Имеем машинку с 2 интерфейсами и freeBSD 7.2 с пересобранным ядром с опциями + включенный Nat

Код: Выделить всё

options			IPFIREWALL
options			IPFIREWALL_VERBOSE
options			IPFIREWALL_VERBOSE_LIMIT=5
options			IPFIREWALL_FORWARD
options			IPDIVERT 
options			IPFIREWALL_DEFAULT_TO_ACCEPT
1 -ставим Abills
качаем архив отсюда http://sourceforge.net/projects/abills/ и ставим, обращаю ваше внимание на то что ставиться она из архива, если будут ставить из портов то у вас путь установки /usr/abills изменится на другой

Код: Выделить всё

tar zxvf abills-0.xx.tgz
cp -Rf abills /usr/
cp /usr/abills/libexec/config.pl.default /usr/abills/libexec/config.pl
2 - ставим MySQL

Код: Выделить всё

cd /usr/ports/databases/mysql155-server
make && make install && rehash
добавляем его в автозагрузку и стартуем

Код: Выделить всё

echo 'mysql_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/mysql-server start
проверяем запуск

Код: Выделить всё

ps axw | grep mysql
дожно быть похоже на это:

Код: Выделить всё

6210 p0 RV 0:00,00 grep mysql (csh)
6188 p1- S 0:00,02 /bin/sh /usr/local/bin/mysqld_safe
--defaults-extra-file=/var/db/mysql/my.cnf -- user=mysql --datadir=/var
6206 p1- S 0:00,94 /usr/local/libexec/mysqld
--defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/ 
3- ставим Apache2.2 из портов

Код: Выделить всё

cd /usr/ports/www/apache22 
make
# выбираем mod_rewrite в менюшке и ставим

Код: Выделить всё

make install
4- ставим Perl modules
  • DBI
    DBD-mysql
    Digest-MD5 для Chap авторизации
    Digest-MD4 для MS-Chap авторизации
    Crypt-DES для MS-Chap авторизации
    Digest-SHA1 для MS-ChapV2 авторизации
    Time-HiRes Нужен только для тестирования скорости выполнения авторизации, аккаунтинга, и страниц веб-интерфейса

Код: Выделить всё

cd /usr/ports/databases/p5-DBI && make && make install
cd /usr/ports/databases/p5-DBD-mysql55 && make && make install			
cd /usr/ports/security/p5-Digest-MD5 && make && make install
cd /usr/ports/security/p5-Digest-MD4 && make && make install
cd /usr/ports/security/p5-Crypt-DES && make && make install
cd /usr/ports/security/p5-Digest-SHA1 && make && make install
cd /usr/ports/devel/p5-Time-HiRes && make && make install
по поводу DBD-mysql- будте внимательны! у меня mysql версии 155 потому и именно эту версию модуля я ставлю если у вас другая версия MySQL просто измените цифру (к примеру не 155 а 151)

5- ставим Radius из портов (у меня встал 1.1.8 )

Код: Выделить всё

cd /usr/ports/net/freeradius

Код: Выделить всё

make # в менюшке надо выбрать поддержку DB MySQL
make install
6- настраиваем MySQL: создаем пользователя и БД
создадим файл pre_abills.sql в каталоге /usr/abills со следующим содержимым:

Код: Выделить всё

use mysql;
INSERT INTO user (Host, User, Password) VALUES ('_ваш_сервер_','root',password('_придумайте_свой_пароль_'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Index_priv, Alter_priv) VALUES ('_ваш_сервер_', 'abills', 'root', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
CREATE DATABASE abills DEFAULT CHARSET=cp1251;
теперь подгрузим его в MySQL

Код: Выделить всё

mysql -u root -p < pre_abills.sql 
пароль для root в MySQL отсутствует по этому на приглашение ввести пароль смело жмем Enter

Код: Выделить всё

mysqladmin flush-privileges
теперь подгрузим SQL таблицы Abills запустив из каталога /usr/abills следующую комманду

Код: Выделить всё

mysql --default-character-set=cp1251 -D abills < abills.sql
и зададим пароль администратора (root) БД, такойже как и password('_придумайте_свой_пароль_') из файла pre_abills.sql

Код: Выделить всё

/usr/local/bin/mysqladmin -u root password '_придумайте_свой_пароль_'

7 - настраеваем Apache 2.2
создадим папку /var/log/httpd

Код: Выделить всё

mkdir /var/log/httpd
открываем /usr/local/apache22/httpd.conf

Код: Выделить всё

mcedit /usr/local/etc/apache22/httpd.conf
в конце файла просто пишем

Код: Выделить всё

Include /usr/abills/misc/apache/abills_httpd.conf
исправляем в файле /usr/abills/misc/apache/abills_httpd.conf строчку <VirtualHost _default_:9443>
было

Код: Выделить всё

<VirtualHost _default_:9443>
стало

Код: Выделить всё

<VirtualHost *:9443>
добавляем Apache2.2 в автостарт

Код: Выделить всё

echo 'apache22_enable="YES"' >> /etc/rc.conf
После этого надо загрузить модуль accf_http без которго apache в FreeBSD работать не будет, без него при попытке запуска будет ошибка типа httpready error.
Загрузим модуль

Код: Выделить всё

kldload accf_http
и добавим его в автостарт

Код: Выделить всё

echo 'accf_http_load="YES"' >> /etc/rc.conf
с генерируем SSL
если вы не собираетесь использовать SSL то закомментируйте в /usr/abills/misc/apache/abills_httpd.conf строчки от <IfModule ssl_module> до </IfModule> тем самым отключив модуль SSL

Код: Выделить всё

/usr/abills/misc/certs_create.sh apache
проверим синтаксис файла /usr/local/etc/apache22/httpd.conf

Код: Выделить всё

/usr/local/sbin/apachectl configtest
если все впорядке стартуем апач, если нет то смотрим строчку в которой найдена ошибка

Код: Выделить всё

/usr/local/etc/rc.d/apache22 start
перезагрузимся

Код: Выделить всё

shutdown -r now
проверим запуск апача

Код: Выделить всё

ps axw | grep http
должно быть что то вроде этого

Код: Выделить всё

# 1033  ??  Ss     0:00.20 /usr/local/sbin/httpd -DNOHTTPACCEPT
# 1034  ??  I      0:00.01 /usr/local/sbin/httpd -DNOHTTPACCEPT
# 1035  ??  S      0:00.01 /usr/local/sbin/httpd -DNOHTTPACCEPT
# 1036  ??  I      0:00.01 /usr/local/sbin/httpd -DNOHTTPACCEPT
# 1037  ??  I      0:00.01 /usr/local/sbin/httpd -DNOHTTPACCEPT
# 1038  ??  I      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
# 1053  ??  I      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
# 1068  p4  RL+    0:00.00 grep http
а также заглянем по адресу http://ip_severa и любуемся милой сердцу надписью
It works!
если апач всеж таки не стартует или стартует, но как то не так смотрим записи в

Код: Выделить всё

/var/log/messages
/var/log/httpd-error.log
8- настраиваем freeradius
в файле /usr/local/etc/raddb/users все строки комментируем, и в конец вставляем эту (По-умолчанию авторизовыватся через скрипт):

Код: Выделить всё

DEFAULT Auth-Type = Accept
  Exec-Program-Wait = "/usr/abills/libexec/rauth.pl"
Далее правим /usr/local/etc/raddb/acct_users просто вставив это в конец (запуск скриптов на события радиуса):

Код: Выделить всё

DEFAULT Acct-Status-Type == Start
   Exec-Program = "/usr/abills/libexec/racct.pl"
DEFAULT Acct-Status-Type == Alive
   Exec-Program = "/usr/abills/libexec/racct.pl"
DEFAULT Acct-Status-Type == Stop
   Exec-Program = "/usr/abills/libexec/racct.pl"
В файл /usr/local/etc/raddb/clients.conf нужно вписать IP адрес или имя NAS сервера с которого будут поступать данные для радиуса и пароль доступа. ( я использовал 127.0.0.1)

Код: Выделить всё

client 127.0.0.1 {	
   secret = _пароль_
   shortname = _имя_сервера_freeradius_
}
В файле /usr/local/etc/raddb/radiusd.conf нужно закомментировать использование модулей 'chap' и 'mschap' в разделе 'authorize'

Код: Выделить всё

authorize {
  preprocess
#  chap
#  counter
#  attr_filter
#  eap
#  suffix
  files
# etc_smbpasswd
# sql
# mschap
}
Добавляем radiusd в автостарт

Код: Выделить всё

echo 'radiusd_enable="YES"' >> /etc/rc.conf
перезагрузимся

Код: Выделить всё

shutdown -r now
9- настраиваем Abills
Правим конфигурационный файл системы /usr/abills/libexec/config.pl

Код: Выделить всё

mcedit /usr/abills/libexec/config.pl
изменяя значения переменных исходя из собственных условий

Код: Выделить всё

#DB configuration 
$conf{dbhost}='_имя_вашего_сервера_';		# тот что вы указывали в файле pre_abills.sql
$conf{dbname}='abills';					# имя базы из pre_abills.sql
$conf{dbuser}='root';						# я указывал именно root'a, но это изза откровенно слабых познаний в MySQL, вообще в офф.документации подразумевается любой пользователь но у меня с др. именем всегда получалось что Acces denied при приподключении к базе. Решил не много схитрить но по сути этот путь не корректен.
$conf{dbpasswd}='sqlpassword'; 				# из pre_abills.sql 
$conf{ADMIN_MAIL}='info@your.domain'; 		# я тут вообще ничего менял
$conf{USERS_MAIL_DOMAIN}="your.domain";	# я тут вообще ничего менял
$conf{secretkey}="test12345678901234567890";# если вдруг надумаете сменить то отредактируйте его также в abills.sql
$conf{dbcharset}='cp1251';					# не забудте прописать сюда "cp1251" по умолчанию там пусто
Вносим в /etc/crontab периодические процессы

Код: Выделить всё

*/5	*	*	*	*	root	/usr/abills/libexec/billd -all
1 0	*	*	*	root	/usr/abills/libexec/periodic daily
1 1	*	*	*	root	/usr/abills/libexec/periodic monthly
создадим папки для логов и бэкапов и установим права на чтение и запись вебсервером для файлов веб интерфейса

Код: Выделить всё

mkdir /usr/abills/var/ /usr/abills/var/log
mkdir /usr/abills/backup
chown www /usr/abills/cgi-bin 
chown www /usr/abills/cgi-bin/admin 
chown www /usr/abills/Abills/templates
chown -Rf www /usr/abills/backup
перезагрузимcя

Код: Выделить всё

shutdown -r now
здесь я советую зайти под юзером abills (пароль: abills) на страничку билинга http://IPsever:9443/admin и проверить как оно вообще там работает

C ЭТОГО МОМЕНТА Я В ПОСЛЕДУЮЩИХ ДЕЙСТВИЯХ НЕ УВЕРЕН


10- подключение Ipn
ставим Sudo

Код: Выделить всё

cd /usr/ports/security/sudo && make && make install
создадим ссылки в самом ABillS

Код: Выделить всё

cd /usr/abills/libexec/
ln -s ../Abills/modules/Ipn/trafdstats trafdstats
ln -s ../Abills/modules/Ipn/traffic2sql traffic2sql
Загрузим таблицы Ipn в базу.

Код: Выделить всё

 mysql -D abills < /usr/abills/db/Ipn.sql
создадим папку /usr/abills/var/log/ipn

Код: Выделить всё

mkdir /usr/abills/var/log/ipn
Добавиv в секцию "@MODULES' файла /usr/abills/libexec/config.pl строчку а также конфиг для Ipn в /usr/abills/libexec/config.pl

Код: Выделить всё

#Ipn configuration
$conf{IPN_DETAIL}=1;
$conf{IPN_DETAIL_MIN_SIZE}=1024;
$conf{IPN_STATIC_IP}=1;.
$conf{IPN_FILTER}="/usr/abills/misc/ipn_filter.sh";	# у меня почему то именно в этой папке хотя в офф.документации не в misс а libexec
$conf{IPN_DETAIL_CLEAN_PERIOD}=30;
$conf{IPN_USERMENU}=1;.
$conf{IPN_DEPOSIT_OPERATION}=1;.
$conf{IPN_FW_FIRST_RULE}=20000;.
$conf{IPN_FW_START_RULE}="/usr/local/bin/sudo /sbin/ipfw -q delete %NUM";
$conf{IPN_FW_START_RULE}="/usr/local/bin/sudo /sbin/ipfw -q add %NUM allow ip from %IP to any";
$conf{IPN_FW_START_RULE}="/usr/local/bin/sudo /sbin/ipfw -q add %NUM allow ip from any to %IP.";
$conf{IPN_FW_STOP_RULE}="/usr/local/bin/sudo /sbin/ipfw -q delete %NUM";
$conf{IPN_FW_STOP_RULE}="/usr/local/bin/sudo /sbin/ipfw -q add %NUM deny ip from %IP to any";
$conf{IPN_FW_STOP_RULE}="/usr/local/bin/sudo /sbin/ipfw -q add %NUM deny ip from any to %IP";
$conf{IPN_FW_RULE_UID}=1;
перезагрузимcя

Код: Выделить всё

shutdown -r now
11- зарегестрируем NAS сервер в системе Abills через web интерфейс, взято отсюда http://abills.net.ua/wiki/doku.php/abil ... stall_1:ru
Открываем веб интерфейс http://your.host:9443/admin/
Логин администратора по умолчанию abills пароль abillS
Прежде всего надо сконфигурировать сервера доступа NAS (Network Access Server).
Переходим в меню System configuration>NAS
Параметры
IP IP адрес NAS сервера
Name Название
Radius NAS-Identifier Идентификатор сервера (можно не вписывать)
Describe Описание сервера
Type Тип сервера. В зависимости от типа по разному обрабатываются запросЫ на авторизацию
Authorization
SYSTEM - При хранении паролей в UNIX базе (/etc/passwd)
SQL - при хранении паролей SQL базе (MySQL, PosgreSQL) # я выбирал SQL
Alive Период отправки Alive пакетов
Disable Отключить
:Manage: Секция менеджмента NAS сервера
IP:PORT IP адрес и порт для контроля соединения. Например, для отключения пользователя из веб-интерфейса
User Пользователь для контроля
Password Пароль
RADIUS Parameters Дополнительные параметры которые передаются NAS серверу после успешной авторизации.
После заведения сервера доступа добавте ему пул адресов IP POOLs.
FIRST IP Первый адрес в пуле
COUNT Количество адресов


12- ставим Ipcad

Код: Выделить всё

cd /usr/ports/net-mgmt/ipcad/ && make && make install
13- настраиваем Ipcad

Код: Выделить всё

mcedit /usr/local/etc/ipcad.conf
и правим до такого состояния

Код: Выделить всё

# Интерфейс для сбора статистики
interface _ваш_внутренний_интерфейс_;

# детализация по портам 
#capture-ports enable;

# Агрегировать порты, уменьшает размер базы детализации 
#aggregate 1024-65535    into 65535;     /* Aggregate wildly */
#aggregate 3128-3128     into 3128;      /* Protect these ports */
#aggregate 150-1023      into 1023;      /* General low range */

# Експортирование статистики на адрес 127.0.0.1 порт 9996
# netflow export destination 127.0.0.1 9996;
# netflow export version 5;       # NetFlow export format version {1|5}
# netflow timeout active 30;      # Timeout when flow is active, in minutes
# netflow timeout inactive 15;    # Flow inactivity timeout, in seconds
# netflow engine-type 73;         # v5 engine_type; 73='I' for "IPCAD"
# netflow engine-id 1;            # Useful to differentiate multiple ipcads.
dumpfile = ipcad.dump;
chroot = /var/ipcad/;
pidfile = ipcad.pid; 
rsh enable at 127.0.0.1;
memory_limit = 16m; 
занесем запуск скрипта обработки статистики в /etc/crontab

Код: Выделить всё

*/5 *   *   *   *   root    /usr/abills/libexec/traffic2sql _ID_вашего_NAS_сервера_ flowdir=/usr/abills/var/log/ipn/ 
автостарт

Код: Выделить всё

echo 'ipcad_enable="YES"' >> /etc/rc.conf
папка для логнов и дампов ipcad

Код: Выделить всё

mkdir /var/ipcad/
14- Настройка sudo, для запуска правил фаервола от имени пользователя, под которым работает WEB сервер.

Код: Выделить всё

mcedit /usr/local/etc/sudoers
пишем

Код: Выделить всё

#Allow ipfw operation without password for webserver user
www   ALL = NOPASSWD: /sbin/ipfw
КОНЕЦ

В общем заставить заработать у меня не получилось но прямая причина этому банальная нехватка знаний или хотя бы понимания.

PS это проба пера
PPS у кого есть мысли где чего подправить и как до делать я только рад
PPPS настоятельно советую пользоваться снэпшотами если тестируете систему на виртуалке
PPPPS to Terminus - приношу свои извинения, косячек вышел

Re: Abills(Ipn модуль)-Ip биллинг

Добавлено: 2010-04-18 9:56:33
jinaro
Вот у меня та же проблема настойки взял с офф.сайта абиллса и тоже не работает...кто разбирается можете помочь?

Re: Abills(Ipn модуль)-Ip биллинг

Добавлено: 2011-08-17 15:00:28
Eradicator
Коллеги, кто нить, вообще видел абиллс с рабочей статистикой? Гуглю уже неделю, ни один способ меня пока не спас. =(