
Практически, большая часть услуг, предоставляемых провайдерами или сервисами, требует присутствия системы автоматизированного учета затраченных ресурсов. Сегодня доступно большое количество биллинг-систем, как платных, так и бесплатных, распространяемых под свободной лицензией. Некоторые из них ориентированы на строго определенный сервис, другие решения многофункциональны. Система биллинга 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.
 Кроме этого, в поставке имеется еще около 20 модулей, подключение которых позволяет нарастить стандартные возможности. Например, 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 | 
 | 
Данные о пользователях записываются в файл /etc/freeradius/users, в нем необходимо подправить соответствующий параметр так, чтобы за это отвечал скрипт ABillS.
 sudo mcedit /etc/freeradius/users | 
DEFAULT Auth-Type = Accept | 
 sudo mcedit /etc/freeradius/acct_users | 
 DEFAULT Acct-Status-Type == Start | 
И, наконец, последний файл, который нас интересует – clients.conf, в нем описываются параметры подключения к NAS. Сюда нужно вписать IP-адрес или имя NAS сервера, с которого будут поступать данные, и пароль для доступа:
 sudo mcedit /etc/freeradius/clients.conf | 
 client localhost { | 
Теперь проверяем правильность заполнения конфигурационного файла:
 check-radiusd-config -level 345 radiusd on | 
Если все нормально, запускаем сервер в режиме отладки «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 | 
Для удобства эти команды можно вынести в текстовый файл и загрузить через консоль. Теперь копируем с сайта проекта последнюю версию ABills, распаковываем:
 cd /usr$ 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 | 
Только по умолчанию он отключен, не забудь включить:
 sudo a2enmod rewrite | 
Для настройки веб-сервера в дистрибутив ABillS входит конфиг /usr/abills/misc/abills_httpd.conf, который подключает нужные каталоги в качестве виртуального сервера. Чтобы его установить, достаточно ввести команду:
 sudo sh -c «cat /usr/abills/misc/abills_httpd.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>
 …
# Интерфейс администратора
  <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 | 
 sudo chown -Rf www-data /usr/abills/cgi-bin | 
Каталог backup предназначен для хранения архива БД, по умолчанию он не создается, но для работы весьма желателен:
 sudo mkdir /usr/abills/backup | 
И перезапускаем апач командой «/etc/init.d/apache2 restart».
Последние настройки
Для корректной работы потребуется несколько Perl модулей, в документации проекта предлагается загружать их с CPAN:
 sudo perl -MCPAN -e shell | 
Вообще нужны не все указанные модули. Так libnet понадобится только в том случае, если планируется использовать базу паролей Unix, а Time-HiRes только для тестирования скорости. Наверняка в репозитарии твоего дистрибутива основные модули тоже есть. В Ubuntu используем команду:
 sudo apt-get install libdbi-perl libdbd-mysql-perl libmd5-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’;
 ХХХХХХХХХХХХХХХХХХX
И в /etc/crontab вставляем код, необходимый для периодического запуска скриптов:
*/5     *      *    *     *   root   /usr/abills/libexec/billd -all На этом настройки ABillS закончены. Для примера попробуем подключить ABillS к PPPoE-серверу, это самый простой, но в то же время и востребованный вариант. Установим пакет pppoe, остальные компоненты уже есть в системе: Проверяем, загружены ли необходимые модули: Если вывод ничего не показывает, загружаем «modprobe pppoe». Записываем в файл /etc/ppp/options строку «plugin rp-pppoe.so». За настройку PPPoE-сервера отвечает файл /etc/ppp/pppoe-server-options, в Ubuntu его нет, поэтому создаем:  logfile /var/log/pppoe.log test * password *
 Запускаем PPPoE сервер: Параметр ‘-I‘ позволяет указать на используемый интерфейс (по дефолту идет eth0), при помощи ‘-L‘ указываем локальный адрес. По умолчанию удаленным компьютерам назначаются адреса в диапазоне начиная с 10.67.15.1, при помощи ‘–R‘ можно назначить начальный адрес из другого диапазона.  authserver localhost:1812 localhost password123
 Теперь, когда все компоненты настроены и проверены, набираем в веб-браузере адрес 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, и имя в «Название«. При необходимости здесь же указываются лимиты по времени и трафику, платежи и прочее. После нажатия на кнопку Добавить появится окно с информацией о клиенте. Текущее состояние показано как «Не активизирован», выбираем справа ссылку Dialup/VPN и в новом окне нажимаем Активация. Чтобы клиент мог подключиться, следует создать пароль и пополнить счет. Нажимаем в левой вкладке ссылку Пароль и вводим его дважды, затем переходим в Оплаты и заносим некоторую сумму на его счет. Для начала лучше провести тестирование подключения нового пользователя при помощи утилиты radtest (как вариант, можно использовать скрипт libexec/radtest.sh, идущий в поставке ABillS). Формат команды проверки такой: radtest testuser testpassword IP-RADIUS:1812 0 radius_secret 0 IP_NAS
 То есть в нашем примере: В журнале /usr/abills/var/log/abills.log должна появиться строка о допуске нового клиента. Теперь можно попробовать соединиться удаленно. У меня все заработало, только когда я подключил дополнительные словари в /etc/freeradius/dictionary: $INCLUDE /usr/share/freeradius/dictionary.microsoft Чтобы клиенты могли выйти в Сеть, следует настроить маскарадинг, проще это сделать, установив пакеты ipmasq и dnsmasq.
 1       0      *    *     *   root   /usr/abills/libexec/periodic daily
 1       0      *    *     *   root   /usr/abills/libexec/periodic monthly
Устанавливаем 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
 
  
sudo mcedit /etc/ppp/pppoe-server-options
 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 и записываем в нее одну строку:
 
 sudo pppoe-server -I eth1 -L 192.168.0.10 -O /etc/ppp/pppoe-server-options
 Пробуем подключиться с удаленной машины, создав новое соединение и использовав указанный логин и пароль. За ходом подключения можно следить, набрав в консоли «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
 acctserver localhost:1813
 И в файл /etc/radiusclient/servers заносим строку для аутентификации подключаемого клиента, она должна совпадать с данными, записанными в файле сервера /etc/freeradius/clients.conf, то есть в нашем случае это:Использование веб-интерфейса ABillS
 И, наконец, создание нового клиента. Здесь также все просто: выбираем Клиенты – Логины – Добавить, вводим логин (например test) и отмечаем флажок «Денежный счет: Создать«.
 
 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
 $INCLUDE /usr/share/freeradius/dictionary.unix
 В результате мы получили готовую систему раздачи интернета, обладающую всеми необходимыми функциями.

