Abills

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск
Вернуться в раздел руководства

Содержание

[править] Установка и настройка ABillS + Mikrotik на Gentoo Linux.

В данном документе описан опыт установки биллинговой системы Abills с использованием Mikrotik в качестве NAS.

[править] Версии ПО

Конфигурация систем:

Linux: i686/gcc-4.1.1/glibc-2.5-r4/gentoo-sources-2.6.21
Mikrotik: 2.9.27

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

abills-0.36b
apache-2.2.4-r12 
mysql-5.0.26-r2
kernel-2.6.21
freeradius-1.1.6
perl-5.8.8-r2

[править] Web Server

[править] Установка apache2.

Проверяем доступную версию (у меня apache-2.2.4-r12): # emerge -pv apache

Установка: # emerge apache

Правим /etc/conf.d/apache2

Файл: /etc/conf.d/apache2
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D PHP5 -D PERL"


Файл: /etc/apache2/httpd.conf
ServerName <имя вашего сервера>:<порт>

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>
    AddHandler cgi-script .cgi
    Options Indexes ExecCGI FollowSymLinks
    AllowOverride none
    DirectoryIndex index.cgi
    Order allow,deny
    Allow from all

<Files ~ "\.(db|log)$">
    Order allow,deny
    Deny from all
 </Files>
</Directory>

## Admin interface ##

<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>

[править] mod_perl/Perl modules

Устанавливаем mod_perl: # emerge mod_perl
Устанавливаем модули Perl через cpan-shell:

# su root
# perl -MCPAN -e shell 
install DBI      
install DBD::mysql    
install Digest::MD5 
install Digest::MD4 
install Crypt::DES 
install Digest::SHA1 
install Bundle::libnet 
install Time::HiRes 
quit 

или их можно установить через emerge

# emerge DBI DBD-mysql Digest-MD5 Digest-MD4 Crypt-DES Digest-SHA1 perl-core/libnet

Так-же все модули доступны на http://www.cpan.org

[править] Mysql

В моем примере сервер баз-данных раcполагается на одной машине c Abills, но при желании его можно вынести на другую машину.

[править] Установка mysql.

Проверяем доступную версию (у меня mysql-5.0.26-r2): # emerge -pv mysql
Устанавливаем из портажей: # emerge mysql

[править] Настройка mysql.

Задаем на каком адресе будет доступен сервер (127.0.0.1 - в случае если биллинг и база данных на одной ЭВМ)

Файл: /etc/mysql/my.cnf
bind-address     =     127.0.0.1 

Запускаем сервер:
# /etc/init.d/mysql start Создаем пользователя и базу в mysql для abills:

use mysql;
INSERT INTO user (Host, User, Password) 
  VALUES ('localhost','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, 
  Lock_tables_priv, Create_tmp_table_priv) 
VALUES ('localhost', 'abills', 'abills', 'Y', 'Y', 'Y', 'Y', 'Y', 
  'Y', 'Y', 'Y', 'Y', 'Y');
CREATE DATABASE abills;
flush privileges;

Загружаем таблицы в базу:
# mysql -D abills < /usr/abills/abills.sql

[править] Radius Server

[править] Установка freeradius.

Проверяем доступную версию (у меня freeradius-1.1.6 ): # emerge -pv freeradius
Устанавливаем из портажей: # emerge freeradius

[править] Настройка freeradius.

Редактируем radiusd.conf :

Файл: /etc/raddb/radiusd.conf
bind_address = <IP биллинг сервера>

authorize {
  preprocess
#  chap
#  counter
#  attr_filter
#  eap
#  suffix
  files
# etc_smbpasswd
# sql
# mschap
}

Редактируем /etc/raddb/users :

Файл: /etc/raddb/users
DEFAULT Auth-Type = Accept
  Exec-Program-Wait = "/usr/abills/libexec/rauth.pl"

Редактируем /etc/raddb/acct_users :

Файл: /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"

Редактируем /etc/raddb/clients.conf :

Файл: /etc/raddb/clients.conf
client <адрес NAS> {
   secret = <пароль radius сервера>
   shortname = vpn-pool0
}

Подключаем словари в /etc/raddb/dictionary :

Файл: /etc/raddb/dictionary
$INCLUDE        /usr/share/freeradius/dictionary
$INCLUDE        /usr/share/freeradius/dictionary.mikrotik

В /usr/share/freeradius должны лежать словари.

[править] Проверка radiusd.conf

# check-radiusd-config -level 345 radiusd on Если в конфигурационном файле ошибок не обнаружено, то запускаем radius сервер:
# /etc/init.d/radiusd start

[править] NAS Server

В качестве сервера доступа мы будем использовать Mikrotik (не ниже 2.9.27). Учетные записи созданные в mikrotik имеют больший приоритет, чем пользователи в базе.

[править] Mikrotik.

Задаем адрес radius сервера и конфигурируем чтобы Mikrotik отсылал запросы для авторизации на radius:

/ppp profile set default local-address=<адрес NAS> 
/interface pptp-server server set enabled=yes authentication=chap 
/radius add address=<адрес radius сервера> secret=<пароль> service=ppp 
/ppp aaa set accounting=yes use-radius=yes interim-update=300 

[править] Проверка связи NAS с radius.

# radtest test xzxzxz x.x.x.x:1812 0 radsecret 0 y.y.y.y
где:
text - логин в базе биллинга.
xzxzxz - пароль пользователя test.
x.x.x.x:1812 - адрес radius сервера.
radsecret - пароль радиус сервера.
y.y.y.y - адрес NAS сервера.
Если все сделано правильно то вы увидите примерно следующее:

Sending Access-Request of id 193 to x.x.x.x port 1812
        User-Name = "test"
        User-Password = "xzxzxz"
        NAS-IP-Address = y.y.y.y
        NAS-Port = 0
        Framed-Protocol = PPP
rad_recv: Access-Accept packet from host x.x.x.x:1812, id=193, length=79
        Acct-Interim-Interval = 300
        Session-Timeout = 43200
        Mikrotik-Xmit-Limit = 1048576
        Framed-IP-Address = 10.10.3.99
        Mikrotik-Recv-Limit = 1048576
        Framed-IP-Netmask = 255.255.255.255
        Mikrotik-Rate-Limit = "64k"

а в файле логов /usr/abills/var/log/abills.log будет:

2007-10-06 23:29:00 LOG_INFO: AUTH [test] NAS: 2 (y.y.y.y) GT: 0.11944

[править] Hangup.

Hangup - сброс пользователя с NAS, если его депозит <= значению кредита. Hangup для mikrotik'a работает через radius команду на сброс соединения.
Настраиваем удаленное выполнение команд на Mikrotik:
# /usr/abills/misc/sslcerts.sh ssh admin_ssh
Далее, созданный сертификат нужно загрузить на NAS:

# cd /usr/abills/Certs/
# ftp y.y.y.y
Connected to y.y.y.y (y.y.y.y).
220 MikroTik FTP server (MikroTik 2.9.xz) ready
Name (y.y.y.y:root): admin
Password:
230 User admin logged in
Remote system type is UNIX.
ftp>
ftp> put id_dsa.pub
local: id_dsa.pub remote: id_dsa.pub
200 PORT command successful
150 Opening ASCII mode data connection for '/id_dsa.pub'
226 ASCII transfer complete
699 bytes sent in 1e-04 secs (6.8e+03 Kbytes/sec)
ftp> exit

после чего создадим отдельного пользователя.
В консоле Mikrotik пишем:

# user add name=admin_ssh group=write

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

 
# user ssh-keys import file=id_dsa.pub 
user: admin_ssh

Проверяем связку:
# ssh -l admin_ssh -i /usr/abills/Certs/id_dsa.pub y.y.y.y "/system identity print"

[править] Abills

[править] Распаковка.

Скачиваем пакет http://sourceforge.net/projects/abills/ и распаковываем в /usr/abills:

# tar -zxvf abills-x.y.z.tgz
# cp -Rf abills /usr/
# cp /usr/abills/libexec/config.pl.default /usr/abills/libexec/config.pl

Abills ведет свои логи в /usr/abills/var/log/abills.log Если у вас его нет, то создайте его.

[править] Конфигурирование.

Файл конфигурации - /usr/abills/libexec/config.pl

Файл: /usr/abills/libexec/config.pl
# DB configuration 
$conf{dbhost}='localhost';
$conf{dbname}='abills'; 
$conf{dblogin}='abills';
$conf{dbpasswd}='sqlpassword'; 
$conf{ADMIN_MAIL}='info@your.domain'; 
$conf{USERS_MAIL_DOMAIN}="your.domain";
# Используется для шифрования паролей администраторов и пользователей.
$conf{secretkey}="test12345678901234567890";
# Проверять депозит по текущим сесиям, при достижении 0 сбрасывать с линии
$conf{periodic_check}=’yes’; 
# Количество периодов непришедших Alive пакетов после которого сесия автоматом попадает в Zap таблицу
$conf{ERROR_ALIVE_COUNT}=3;

Вносим в crontab периодические процессы:
# crontab -e

*/5  *      *    *     *   root   /usr/abills/libexec/billd -all
1     0     *    *     *   root    /usr/abills/libexec/periodic daily
1     0     *    *     *   root    /usr/abills/libexec/periodic monthly

[править] Web interface.

Устанавливаем права на запись в /usr/abills/cgi-bin для веб-сервера:
# chown -Rf apache /usr/abills/cgi-bin Если в вашей системе имя пользователя не apache, то замените на соответствующее имя.
Запускаем apache:
# /etc/init.d/apache2 start Заходим в WEB - http://<IP вашего сервера>/abills/admin/
Логин администратора по умолчанию abills пароль abills Добавляем NAS сервер:
System configuration -> NAS

IP - адрес NAS
Name - Mikrotik
Type - mikrotik:Mikrotik(http://www.mikrotik.com/)
Authorization - SQL
'''RADIUS Parameters (,)'''
Acct-Interim-Interval=300


--Fu7ur3 06:51, 27 сентября 2007 (UTC)

Источник — «http://ru.gentoo-wiki.com/Abills»
Личные инструменты