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)
