Группа «САМОВАРчик»

Компьютерные и информационные проекты

2009-02-11 13:23:34 #1: niikto

Самоварчик
Здесь с: 2008-08-25
Мнений: 1558
Вебсайт

Установка и настройка биллинговой системы ABillS на Debian GNU/Linux

Официальная страница проекта http://abills.asmodeus.com.ua/wiki/doku.php

Цели и задачи, которые мы хотим достичь

Используя операционную систему GNU/Linux, и не покупая мощный сервер, делаем из стандартного или даже старого компьютера шлюз с биллингом
Устанавливаем свободную и бесплатную биллинговую систему ABillS, экономим деньги и время
Авторизация по CHAP или PAP (если есть люди, которые сделали авторизацию по MS-CHAP-2, то отпишитесь пожалуйста)

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

Тарификация по времени
Тарификация по трафику
Периодические отчисления (месячная и дневная абонентская плата)
Возможность раздельной и совместной тарификации по времени и трафику
Ограничение доступа в интернет по времени суток
Callback
Система скидок
Установка минимальной цены сессии
Работа с неограниченным количеством NAS серверов
Авторизация по SQL базе данных или по системной UNIX базе паролей
Авторизация по PAP, CHAP, MS-CHAP, MS-CHAPv2+MPPE (CHAP, MS-CHAP, MS-CHAPv2 при сохранении паролей в SQL базе)
Шифрование трафика MPPE
IEEE 802.1x
Авторизация PPPoE по MAC адресу
Авторизация PPTP по IP адресу (для MPD по IP и MAC одновременно)
Изменение тарифного плана или снятие денег со счета по расписанию
Классификация трафика (внутренний, внешний, бесплатный) (Только для VPN, Ipnet)
Ограничение скорости в зависимости от вида трафика и времени суток (Только для VPN)
Создание месячных предоплаченых по трафику пакетов
Дневные, недельные и месячные лимиты по трафику и времени
Отчёты по работе системы и состоянию счетов за любой период времени
Генерация и отправка администратору годовых и месячных отчётов по работе системы
WEB интерфейс управления системой с возможностью настройки прав доступа
Лог действий администратора, менеджера
Ограничение сессий по количеству общего (in+out) трафика (для exppp, mpd, pppd + RADIUS plugin (Linux))

Несъёмный минимум для подключений к NAS серверам (Tarif Plans → Credit Tresshold)
Выписка счётов из пользовательского интерфейса
Обратная связь
Система предоплаченых карт.
!VoIP - GNU Gatekeeper, Asterisk
Система пополнения через платёжные системы ~Webmoney.ru и RUpay.ru
Squid монитор
SNMP монитор и набор утилит для работы с NAS серверами.
Система рассылки сообщений для пользователей.
Распространяется по лицензии GNU GPL 2

Версии пакетов

Abills 0.34
freeradius_1.1.2-2
mysql 5.0.24a-4
Apache 2.0.55
pppd 2.4.4
pptpd 1.3.0
radiusclient1 0.3.2
Linux 2.6.17 - которое шло вместе с Debian GNU/Linux

Установка freeradius

В качестве дистрибутива я использовал Debian GNU/Linux Testing 'Etch' (20061002). Но когда вы его ставите, то он не знает о 2 и 3-ем дисках. Поэтому добавьте их.

Код:

aptitude install freeradius

Настройка freeradius

Добавляем в файл /etc/freeradius/users. Все остальное комментируем.

Код:

DEFAULT Auth-Type = Accept
                Exec-Program-Wait = "/usr/abills/libexec/rauth.pl"

Добавляем в файл /etc/freeradius/acct_users

Код:

#Перед Exec-Program должен быть пробел
#Если от каждого аккаунтинг-запроса в памяти оставались зомби-процессы racct.pl, то замените в файле acct_users Exec-Program на Exec-Program-Wait
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"

Делаем замену файле /etc/freeradius/clients.conf

Было

Код:

client 127.0.0.1 {
        secret          = testing123
        shortname       = localhost

Стало

Код:

client localhost {
   secret = radsecret #Пароль для доступа к радиусу
   shortname = shortname

Создаем функции для преавторизации и поставторизации. И добавляем порт. Добавляем в файл /etc/freeradius/radiusd.conf

Код:

port = 1812

modules {

exec pre_auth {
    wait = yes
    program = "/usr/abills/libexec/rauth.pl pre_auth"
    input_pairs = request
    output_pairs = config
}

exec post_auth {
    wait = yes
    program = "/usr/abills/libexec/rauth.pl post_auth"
    input_pairs = request
    output_pairs = config
}

Комментируем строки mschap и eap в разделе authorize в файле /etc/freeradius/radiusd.conf

Код:

authorize {
  pre_auth 
  preprocess
  #mschap 
  suffix 
  files 
}

Для оповещения о неавторизированых пользователях правим секцию post-auth в файле /etc/freeradius/radiusd.conf

Было

Код:

#       Post-Auth-Type REJECT {
#               insert-module-name-here
#       }

Стало

Код:

         Post-Auth-Type REJECT {
                 post_auth
        }

Для нормальной работы с NAS на основе pppd необходимо добавить в файл словарей freeradius’а /etc/freeradius/dictionary следующие строки:

Код:

# Ограничение трафика сессии
ATTRIBUTE       Session-Octets-Limit                        227     integer
# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
ATTRIBUTE       Octets-Direction                               228     integer
# Ограничение скорости соединения
ATTRIBUTE       PPPD-Upstream-Speed-Limit           230     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit      231     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-1        232     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-1   233     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-2        234     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-2   235     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-3        236     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-3   237     integer

Проверка конфигурационных файлов freeradius

check-radiusd-config -level 345 radiusd on

Если все правильно, то: Radius server configuration looks OK.

При отладке останавливаем freeradius, и запускаем freeradius -X

Установка MySQL

aptitude install mysql-server

Настройка MySQL

Так я и не понял где нужно создавать файл pre_abills.sql, похоже что в любом месте.

Создаем файл pre_abills.sql: touch pre_abills.sql

Редактируем pre_abills.sql

Код:

use mysql;
INSERT INTO user (Host, User, Password) VALUES ('%','abills',password('sqlpassword'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Index_priv, Alter_priv) VALUES ('localhost', 'abills', 'abills', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
CREATE DATABASE abills;

где sqlpassword - пароль mysql-пользователя abills, необходимый для доступа к базе данных abills

Создаём пользователя и базу:

mysql -u root -p < pre_abills.sql

Появиться 'Enter password:' - просто нажать Enter

mysqladmin flush-privileges;

Web server

Для работы web-интерфейса требуется установить и настроить web сервер.

Установка Apache2

aptitude install apache2

Добавляем в /etc/apache2/apache2.conf строку

Код:

ServerName "имя сервера"

Меняем кодироку на нужну вам здесь /etc/apache2/conf.d/charset

Добавляем поддержку mod_rewrite.

ln -s /etc/apache2/mods-available/rewrite.load  /etc/apache2/mods-enabled/rewrite.load

Скачиваем abills c http://sourceforge.net/projects/abills/

Распаковываем в папку /usr

Копируем содержимое /usr/abills/misc/abills_httpd.conf в /etc/apache2/httpd.conf

И перезапускаем сервер cat /usr/abills/misc/abills_httpd.conf echo >> /etc/apache2/httpd.conf /etc/init.d/apache2 restart

Права WEB-сервера уже понижены. Запускается от пользователя www-data

Perl modules

Нам нужны следующие модули:

Код:

  * DBI              (libdbi-perl -- ~Perl5 database interface by Tim Bunce)
  * DBD::mysql  (libdbd-mysql-perl -- A ~Perl5 database interface to the ~MySQL database) (В системе есть версия 3.0007-1, а на сайте cpan.org 4.00. Будем пробывать поочередно)
  * Digest-MD4      (libdigest-md4-perl -- MD4 Message Digest for Perl)
  * Crypt-DES     (libcrypt-des-perl -- Perl DES encryption module)
  * Digest-SHA1    (libdigest-sha1-perl -- NIST SHA-1 message digest algorithm)
  * libnet              (libnet-perl -- Implementation of Internet protocols for Perl)
  * Time::HiRes   (В системе этот пакет вируальный)

Установка пакетов, которые есть в базе Debian. Пишем скриптик.

Код:

aptitude install libdbi-perl libdbd-mysql-perl libdigest-md4-perl libdigest-sha1-perl libnet-perl libcrypt-des-perl

Настройка ABillS

ABillS мы уже скачали. Теперь правим конфиги.

В папке /usr/abills/libexec/ копируем файл config.pl.default в config.pl cp /usr/abills/libexec/config.pl.default /usr/abills/libexec/config.pl

Правим config.pl

Код:

#Check periodic deposit and session. hangup after get negative result (Проверять депозит по текущим сесиям, при достижении 0 сбрасывать с 
#линии)
$conf{periodic_check}='yes';

Загружаем структуру таблиц в базу:

mysql -D abills < abills.sql

Для того, чтобы можно было осуществлять hangup подключенного пользователя необходимо добавить в файл /etc/sudoers.

sudo при установке выдал ошибку зависимостей. поэтому скачиваем и устанавливаем sudo из исходников

Код:

apache   ALL = NOPASSWD: /usr/abills/misc/pppd_kill

Вносим в cron периодическую проверку. Редактируем /etc/crontab

Код:

 \*/1 *  *  *  *   root    /usr/abills/libexec/billd -all
 1    0  *  *  *   root    /usr/abills/libexec/periodic daily
 1    0  1  *  *   root    /usr/abills/libexec/periodic monthly
#ежедневное автоматическое резервное копирование базы данных
 1    3  *  *  *   root     /usr/abills/libexec/periodic backup

Создаем недостающие каталоги:

mkdir /usr/abills/backup chown www-data /usr/abills/backup

Устанавливаем права на чтение и запись WEB-cервером для файлов WEB-интерфейса

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

Устанавливаем snmpwalk. И проверяем, на мести ли он.

aptitude install snmp which snmpwalk > /usr/bin/snmpwalk

Проверяем где находиться gzip:

which gzip > /bin/gzip

Проверяем где находиться mysqldump:

which mysqldump  /usr/bin/mysqldump

Правим пути в ~/usr/abills/Abills/defs.conf

Код:

$SNMPWALK = '/usr/bin/snmpwalk';
$GZIP = '/bin/gzip';
$MYSQLDUMP = '/usr/bin/mysqldump';

Еще: freeradius будет ругаться, что у вас нет логов abills, поэтому мы это исправляем. touch /usr/abills/var/log/abills.log chmod 777 /usr/abills/var/log/abills.log - здесь вы можете меня поправить какие права дать файлу abills.log

Проверка: Открываем веб интерфейс - http://your.host/abills/admin/ Логин администратора по умолчанию - abills , пароль - abills. От имени этого администратора будут выполняться различные операции в автоматическом режиме, например снятие абонплаты в начале месяца, по этому удалять его не нужно, нужно только изменить пароль на более безопасный. Для реальных администраторов необходимо завести свои аккаунты и назначить им необходимые права: Система > Администраторы

А теперь поздравления от axl: "Тот кто выполнил все предыдущие пункты и увидел вебинтерфейс заслужил первую бутылку пива. Дальнейшее описание специфично именно для GNU/Linux-систем с pppd."

Pppd и pptpd

Проверяем, если у нас модули ppp. Модуль мелкософтого шифрования и сжатия (ppp_mppe_mppc) мне не нужен да и в системе его нет

Код:

# modprobe ppp_async
# modprobe ppp_generic
# modprobe ppp_mppe_mppc
FATAL: Module ppp_mppe_mppc not found.
# modprobe ppp_synctty
# modprobe pppoe

Утанавливаем pptpd:

aptitude install pptpd

Редактируем /etc/ppp/options

Код:

+chap

Редактируем /etc/ppp/pptpd-options

Код:

#require-mppe-128
#require-mschap-v2
plugin radius.so
plugin radattr.so
debug
ms-dns ***.***.***.***  # Здесь укажите IP адрес DNS сервера, который
                        # будет сообщаться подключившемуся клиенту

Редактируем /etc/pptpd.conf

Код:

ppp /usr/sbin/pppd
option /etc/ppp/pptpd-options
debug
bcrelay eth0
localip ***.***.***.*** # Здесь IP адрес вашего сервера в локальной сети

Radiusclient

Устанавливаем radiusclient:

aptitude install radiusclient1

Редактируем /etc/radiusclient/radiusclient.conf

Код:

authserver      127.0.0.1
acctserver      127.0.0.1

В файл /etc/radiusclient/servers вносим IP адрес радиус-сервера и соответствующий ему пароль

Код:

127.0.0.1          radsecret

Конфигурирование NAS

Теперь необходимо сконфигурировать NAS. Заходим в web-интерфейс администратора http://your.host/abills/admin/ Логин - abills, пароль - abills. Идем: Система → Сервер доступа Создаем новый NAS с необходимыми параметрами. В нашем случае:

Код:

IP                      ***.***.***.*** (Указываем ip сервера, смотрящего в локалку) 
Название                (произвольно, напр. - vpn1)
Radius NAS-Identifier   Идентификатор сервера (можно не вписывать)
Опис                    Описание сервера (Произв)
Type                    pppd:pppd + Radius plugin (linux)
Authorization           SQL
Alive                   60 
Disable                 
IP:PORT                 
User
Password
RADIUS Parameters       Acct-Interim-Interval=60

Значение Alive и значение параметра Acct-Interim-Interval нужно выбирать одинаковым. Осталось создать тарифные планы и завести юзеров.

P.S.: У меня и не получилось чтоб abills прерывал сессии при балансе 0 и считал трафик в онлайн режиме. Если кто-нибуть знает это сделеать чтоб работало, то отпишитесь пожалуста.



источник: http://omsk.lug.ru/cgi-bin/moin.py/Abills

Неактивен

 

Board footer

Powered by PunBB + PE

Valid XHTML Valid CSS

[ Generated in 0.135 seconds, 7 queries executed ]