Четверг, 28.03.2024, 20:37
Приветствую Вас Гость | RSS
Мой сайт
Главная
Регистрация
Вход
Форма входа

Меню сайта

Категории раздела
Об ОС Windows [137]
В категории размещаются статьи, касающщиеся операционных систем от Microsoft.
Об ОС *Nix [198]
В данной категории собраны статьи об ОС семейства Unix/Linux/FreeBSD/...
Справочные материалы [351]
Справка по всему разделу.
Виртуализация и Облака [46]
Networks & Routing [86]
DataBases [22]

Наш опрос
Оцените мой сайт
Всего ответов: 209

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Системное администрирование » Об ОС *Nix

Всесторонний учет Трафика. ABillS

Хакер № 04/08 (112)

Всесторонний учет

Сергей «grinder» Яремчук (grinder@ua.fm, tux.in.ua)

Хакер, номер #112, стр. 112-136-1


 

ABillS: система биллинга для *nix

Значительная часть услуг, предоставляемых провайдерами или сервисами, требует системы автоматизированного учета затраченных ресурсов. Существует большое количество биллинг-систем - как платных, так и бесплатных, распространяемых под свободной лицензией. Некоторые из них ориентированы на строго определенный сервис, другие многофункциональны. Система биллинга ABillS относится к классу программ all-in-one.

Возможности ABillS

Бесплатная биллинговая система ABillS (AsmodeuS Billing System) распространяется по лицензии GNU GPL2, написана на Perl и в процессе работы использует другие OpenSource решения: Apache, MySQL и FreeRADIUS. Информация по продукту и исходные тексты доступны на сайте проекта www.abills.net.ua/wiki/doku.php. При помощи ABillS можно производить учет времени работы и трафика диалап и VPN пользователей с выдачей статистики за любой период времени. Работает с неограниченным количеством NAS серверов (Network Access Server – сервер доступа в Сеть). Способен авторизировать по системной базе паролей UNIX и SQL базе данных. Поддерживаются протоколы PAP, CHAP, MS-CHAP, MS-CHAPv2, EAP и IEEE 802.1x. Для некоторых соединений возможна авторизация по MAC адресу. Заявлена поддержка протокола шифрования данных MPPE.

Кроме того, в поставке имеются еще около двадцати модулей, подключение которых позволяет нарастить стандартные возможности. Например, AGI интерфейс к Asterisk и монитор Squid. Есть модуль управления DHCP сервером и почтовыми ящиками пользователей. Возможен мониторинг количества активных сессий и трафика, проходящего через интерфейс, при помощи MRTG. Реализована консоль управления базой данных. Абонентские платы можно снимать ежедневно, ежемесячно или раз в год, реализована бонусная система. Оплата услуг производится при помощи карт платежей, а подключение к сервисам – при помощи специальных карт. И это еще не все! Именно из-за наличия большого количества функций ABillS считается сложной в настройке системой. Попробуем с ней разобраться.

Установку ABillS можно условно разбить на два этапа. Собственно установка и настройка компонентов системы биллинга, и подключение контролируемых сервисов. Не обязательно все компоненты (Apache, MySQL, FreeRADIUS и ABillS) должны быть установлены на одном компьютере, но для упрощения я буду использовать именно такой вариант. В качестве операционной системы был выбран Ubuntu 7.10. Впрочем, отличия в других системах незначительны.

Установка FreeRADIUS

Начнем с установки FreeRADIUS. Он отвечает за передачу информации между программами-сервисами и системой биллинга, обеспечивая три А (Авторизацию, Аутентификацию, Аккаунтинг). В репозиториях подавляющего большинства дистрибутивов он присутствует, поэтому:

$ sudo apt-get install freeradius radiusclient1

В своей работе FreeRADIUS использует несколько конфигурационных файлов, которые находятся в каталоге /etc/freeradius (в зависимости от вида установки или дистрибутива, это может быть и /etc/raddb). Все их трогать не нужно, достаточно изменить несколько параметров. Начнем с radiusd.conf, в котором производятся общие настройки сервера.

$ sudo mcedit /etc/freeradius/radiusd.conf

# IP-адрес биллинг-сервера

bind_address = 127.0.0.1

# Далее в разделе authorize нужно закомментировать использование модулей chap и mschap

authorize {

preprocess

# chap

# counter

# attr_filter

# eap

# suffix

files

# etc_smbpasswd

# sql

# mschap

}

Данные о пользователях записываются в файл /etc/freeradius/users. В нем необходимо подправить соответствующий параметр так, чтобы за это отвечал скрипт ABillS.

$ sudo mcedit /etc/freeradius/users

DEFAULT Auth-Type = Accept

Exec-Program-Wait = "/usr/abills/libexec/rauth.pl"

Теперь принимаемся за файл acct_users, который содержит настройки учета. В файле обычно задаются скрипты, выполняющиеся в различных состояниях (подключение, работа, отключение). По умолчанию здесь все закомментировано. Открываем в текстовом редакторе и добавляем:

$ sudo mcedit /etc/freeradius/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"

И, наконец, последний файл, который нас интересует – clients.conf, в котором описываются параметры подключения к NAS. Сюда нужно вписать IP-адрес или имя NAS сервера, откуда будут поступать данные и пароль для доступа:

$ sudo mcedit /etc/freeradius/clients.conf

client localhost {

# Слово, применяемое для шифрования соединения (до 31 знака)

secret = password123

# Псевдоним или IP-адрес

shortname = 127.0.0.1

nastype = other

}

Теперь проверяем правильность заполнения конфигурационного файла:

$ check-radiusd-config -level 345 radiusd on

Radius server configuration looks OK.

Если все нормально, запускаем сервер в режиме отладки «radiusd –X» и переходим к следующему шагу.

Настройка MySQL

Далее нам потребуется рабочая СУБД MySQL, поэтому перейдем к ее установке. Если она уже есть, этот шаг можно пропустить.

$ sudo apt-get install mysql-server mysql-client

В процессе инсталляции будет запрошен пароль администратора. По умолчанию MySQL принимает подключения только с локального адреса, то есть в файле /etc/mysql/my.cnf должна быть строка:

bind-address = 127.0.0.1

В нашем случае биллинг и мускул находятся на одном узле, поэтому этого достаточно. Если используется другой сервер, не забудь изменить здесь значение. Запускаем MySQL:

$ sudo /etc/init.d/mysql start

Следующий шаг: в mysql создаем пользователя abills с паролем password и базу данных abills:

$ mysql -u root -p

mysql> use mysql;

Database changed

mysql>INSERT INTO user (Host, User, Password)

VALUES ('localhost','abills', password('password'));

mysql>INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv,

Delete_priv, Create_priv, Drop_priv, Index_priv, Alter_priv,

Lock_tables_priv, Create_tmp_table_priv)

VALUES ('localhost', 'abills', 'abills', 'Y', 'Y', 'Y', 'Y', 'Y',

'Y', 'Y', 'Y', 'Y', 'Y');

mysql>CREATE DATABASE abills;

mysql>flush privileges;

mysql> quit

Для удобства эти команды можно вынести в текстовый файл и загрузить через консоль. Теперь копируем с сайта проекта последнюю версию ABills, распаковываем:

$ cd /usr

$ tar xzvf abills-0.37.tgz

$ cd abills

Внутри находится шаблон таблиц базы данных, загружаем его:

$ mysql -D abills -u root -p < abills/abills.sql

Все, SQL'ные разборки закончены.

Установка Apache

Для корректной работы ABillS апач должен быть собран с поддержкой mod_rewrite, то есть при ручной сборке индейца используем:

$ ./configure --enable-rewrite=shared

При установке из репозитария никаких дополнительных телодвижений не требуется:

$ sudo apt-get install apache2

$ cat /etc/apache2/mods-available/rewrite.load

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

Только по умолчанию он отключен, не забудь включить:

$ sudo a2enmod rewrite

Module rewrite installed; run /etc/init.d/apache2 force-reload to enable.

Для настройки веб-сервера в дистрибутив ABillS входит конфиг /usr/abills/misc/abills_httpd.conf, который подключает нужные каталоги в качестве виртуального сервера. Чтобы его установить, достаточно ввести команду:

$ sudo sh -c "cat /usr/abills/misc/abills_httpd.conf >> \

/etc/apache2/apache2.conf"

Но без правки работать он не будет. На его основе можно создать свой файл:

$ sudo mcedit /etc/apache2/apache2.conf

# Подключаем пользовательский интерфейс

Alias /abills "/usr/abills/cgi-bin/"

<Directory "/usr/abills/cgi-bin">

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP:Authorization} ^(.*)

RewriteRule ^(.*) - [E=HTTP_CGI_AUTHORIZATION:%1]

Options Indexes ExecCGI SymLinksIfOwnerMatch

</IfModule>

...

# Интерфейс администратора

<Directory "/usr/abills/cgi-bin/admin">

AddHandler cgi-script .cgi

Options Indexes ExecCGI FollowSymLinks

AllowOverride none

DirectoryIndex index.cgi

order deny,allow

allow from all

</Directory>

Смотрим, от имени какого пользователя работает веб-сервер, и устанавливаем нужные права доступа на каталоги:

$ grep User /etc/apache2/apache2.conf

User www-data

$ sudo chown -Rf www-data /usr/abills/cgi-bin

$ sudo chown -Rf www-data /usr/abills/Abills/templates

Каталог backup предназначен для хранения архива БД, по умолчанию он не создается, но для работы весьма желателен:

$ sudo mkdir /usr/abills/backup

$ sudo chown -Rf www-data /usr/abills/backup

И перезапускаем апач командой «/etc/init.d/apache2 restart».

Последние настройки

Для корректной работы потребуется несколько Perl модулей, в документации проекта предлагается загружать их с CPAN:

$ sudo perl -MCPAN -e shell

cpan> install DBI

cpan> install DBD::mysql

cpan> install Digest::MD5

cpan> install Digest::MD4

cpan> install Crypt::DES

cpan> install Digest::SHA1

cpan> install Bundle::libnet

cpan> install Time::HiRes

cpan> quit

Скажу, что нужны не все указанные модули. Так, libnet понадобится только, если планируется использовать базу паролей Unix, а Time-HiRes – для тестирования скорости. Наверняка, в репозитарии твоего дистрибутива основные модули тоже есть. В Ubuntu используем команду:

$ sudo apt-get install libdbi-perl libdbd-mysql-perl libmd5-perl \

libdigest-md4-perl libdigest-sha1-perl libcrypt-des-perl

Теперь переходим непосредственно к настройке ABillS. В архиве есть шаблон конфигурационного файла, переименовываем его и приступаем к настройкам:

$ sudo cp /usr/abills/libexec/config.pl.default /usr/abills/libexec/config.pl

Все параметры трогать не будем, только самые необходимые и интересные. Остальные пока можно оставить в значениях по умолчанию.

$ sudo mcedit /usr/abills/libexec/config.pl

# Настройка доступа к БД

$conf{dbhost}='localhost';

$conf{dbname}='abills';

$conf{dbuser}='abills';

$conf{dbpasswd}='password';

$conf{dbtype}='mysql';

# Следующий параметр подписан, как рекомендуемый для MySQL 5, но у меня все работало и без него

#$conf{dbcharset}='cp1251';

# Отправка сообщений

$conf{ADMIN_MAIL}='admin@yourhost.com';

$conf{USERS_MAIL_DOMAIN}='yourhost.com';

# secretkey используется для шифрования паролей администраторов и пользователей;

# в идеале его нужно изменить, но тогда не забудь это сделать и в abills.sql

$conf{secretkey}="test12345678901234567890";

# Проверяем депозиты по текущим сессиям, при достижении негативного баланса обрываем соединение

$conf{periodic_check}='yes';

И в /etc/crontab вставляем код, необходимый для периодического запуска скриптов:

*/5 * * * * root /usr/abills/libexec/billd -all

1 0 * * * root /usr/abills/libexec/periodic daily

1 0 * * * root /usr/abills/libexec/periodic monthly

На этом настройки ABillS закончены.

Устанавливаем PPPoE

Для примера попробуем подключить ABillS к PPPoE-серверу. Это самый простой, но в тоже время и самый востребованный вариант. Установим пакет pppoe, остальные компоненты уже есть в системе:

$ sudo apt-get install pppoe

Проверяем, загружены ли необходимые модули:

$ lsmod | grep ppp

pppoe 15680 2

pppox 4872 1 pppoe

ppp_generic 29332 6 pppoe,pppox

slhc 7552 1 ppp_generic

Если вывод ничего не показывает, загружаем «modprobe pppoe». Записываем в файл /etc/ppp/options строку «plugin rp-pppoe.so». За настройку PPPoE-сервера отвечает файл /etc/ppp/pppoe-server-options, в Ubuntu его нет, поэтому создаем:

$ sudo mcedit /etc/ppp/pppoe-server-options

logfile /var/log/pppoe.log

debug

mtu 1472

mru 1472

auth

login

default-asyncmap

ktune

lcp-echo-interval 20

lcp-echo-failure 2

# Прописываем здесь IP-адрес DNS-сервера, который будет выдаваться клиентам

ms-dns 192.168.1.254

proxyarp

# Пока оставляем эти строки закомментированными

# plugin radius.so

# plugin radattr.so

Для проверки правильности настройки сервера PPPoE создадим тестовую учетную запись. Открываем файл /etc/ppp/chap-secrets и записываем в нее одну строку:

test * password *

Запускаем PPPoE сервер:

$ sudo pppoe-server -I eth1 -L 192.168.0.10 -O /etc/ppp/pppoe-server-options

Параметр '-I' позволяет указать на используемый интерфейс (по дефолту идет eth0). При помощи '-L' указываем локальный адрес. По умолчанию удаленным компьютерам назначаются адреса в диапазоне с 10.67.15.1. При помощи '-R' можно назначить начальный адрес из другого диапазона.

Пробуем подключиться с удаленной машины, создав новое соединение и используя указанный логин и пароль. За ходом подключения можно следить, набрав в консоли «tail -f /var/log/pppoe.log», нужная информация есть и в /var/log/messages.

Если все работает, то подключаем PPPoE-сервер к FreeRADIUS. Для этого снимаем комментарий с указанных выше строк (в /var/log/messages должна присутствовать строка «Plugin radius.so loaded», говорящая о загрузке требуемого модуля). Создаем файл /etc/ppp/radius/radiusclient.conf, в котором будем описывать подключение к серверу.

$ sudo mkdir /etc/ppp/radius

$ sudo mcedit /etc/ppp/radius/radiusclient.conf

authserver localhost:1812

acctserver localhost:1813

И в файл /etc/radiusclient/servers заносим строку для аутентификации подключаемого клиента, она должна совпадать с данными, записанными в файле сервера /etc/freeradius/clients.conf. То есть, в нашем случае это:

localhost password123

Настало время взглянуть на интерфейс ABillS.

Использование веб-интерфейса ABillS

Теперь, когда все компоненты настроены и проверены, набираем в веб-браузере адрес http://localhost/admin и регистрируемся, используя учетную запись и пароль abills/abills. Для удобства сначала локализуем интерфейс. Переходим в «Profile – Language», выбираем Russian и нажимаем Set. Далее, заполняя поля в «Система – Сервер доступа», регистрируем NAS сервер. Все параметры прописывать необязательно. Достаточно указать в «IP» адрес сервера (он должен быть описан в /etc/freeradius/clients.conf), в «Название» – его обозначение. В «Тип» устанавливаем Other NAS server. После нажатия кнопки «Добавить» описание нового сервера появится в таблице, внизу страницы. Нажимаем ссылку IP POOLS и в FIRST IP вводим начало диапазона IP-адресов, а в COUNT – общее количество адресов. Чтобы подключить пользователя, следует вначале создать хотя бы один тарифный план. Переходим в Система - Dialup/VPN - Тарифные планы. Пока все заполнять не нужно, достаточно в «#» ввести номер, отличный от 0, и имя в «Название». При необходимости здесь же указываются лимиты по времени и трафику, платежи и прочее.

И, наконец, создание нового клиента. Здесь также все просто: выбираем Клиенты – Логины – Добавить, вводим логин (например, test) и отмечаем флажок «Денежный счет: Создать». После нажатия на кнопку «Добавить» появится окно с информацией о клиенте. Текущее состояние показано как «Не активизирован», выбираем справа ссылку Dialup/VPN и в новом окне нажимаем «Активация». Чтобы клиент мог подключиться, нужно создать пароль и пополнить счет. Нажимаем в левой вкладке ссылку «Пароль» и вводим его дважды, затем переходим в «Оплаты» и заносим некоторую сумму на счет.

Для начала лучше провести тестирование подключения нового пользователя при помощи утилиты radtest (как вариант, можно использовать скрипт libexec/radtest.sh, идущий в поставке ABillS). Формат команды проверки такой:

radtest testuser testpassword IP-RADIUS:1812 0 radius_secret 0 IP_NAS

То есть, в нашем примере:

$ radtest test password 127.0.0.1:1812 0 password123 0 127.0.0.1

Sending Access-Request of id 126 to 127.0.0.1 port 1812

User-Name = "test"

User-Password = "password"

NAS-IP-Address = 127.0.0.1

NAS-Port = 0

Framed-Protocol = PPP

rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=126, length=38

Session-Timeout = 722541

Framed-IP-Address = 192.168.2.34

Framed-IP-Netmask = 255.255.255.255

В журнале /usr/abills/var/log/abills.log должна появиться строка о допуске нового клиента. Теперь можно попробовать соединиться удаленно. У меня все заработало, только когда я подключил дополнительные словари в /etc/freeradius/dictionary:

$INCLUDE /usr/share/freeradius/dictionary.microsoft

$INCLUDE /usr/share/freeradius/dictionary.unix

Чтобы клиенты могли выйти в Сеть, следует настроить маскарадинг. Проще это сделать, установив пакеты ipmasq и dnsmasq.

В результате мы получили готовую систему раздачи интернета, обладающую всеми необходимыми функциями.

INFO

ABillS позволяет производить учет времени работы и трафика диалап и VPN пользователей с выдачей статистики за любой период времени.

ABillS умеет разделять трафик на три вида (внутренний, внешний, бесплатный) и ограничивать скорости.

Если ABillS показался слишком сложным в настройке, попробуй Stargazer (stargazer.dp.ua).

О том, как поднять простую систему учета трафика в FreeBSD, ты можешь прочитать в ][акере #064, в статье «Подсчитаем каждый байт!».

VIDEO

На прилагаемом к журналу диске ты найдешь видеоролик по установке ABillS.

WWW

Хорошую статью по настройке связки ABillS + Mikrotik на Gentoo Linux найдешь по адресу ru.gentoo-wiki.com/Abills.

Содержание 



Источник: http://www.xakep.ru/magazine/xa/112/136/1.asp
Категория: Об ОС *Nix | Добавил: admin (29.07.2012)
Просмотров: 2094 | Теги: Apache, abills, подсчёт трафика, билинг, Trafic, freeradius | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2024