Настройка биллинговой системы abills + VPN + radius + RLMPerl + mysql: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Закачка дистрибутива Abills)
(Постнастройка Abills)
 
(не показаны 43 промежуточные версии этого же участника)
Строка 1: Строка 1:
Вот пришлось перейти на другую Ось. Поэтому перепишу статью, с учетом новых версий abills и Ubuntu 10.04 server<br />
+
Вот пришлось перейти на другую Ось. Поэтому перепишу статью, с учетом новых версий abills 0.54 и Ubuntu 10.04 server<br />
 
За основу взяты статьи [http://www.volmed.org.ru/wiki/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BB%D0%BB%D0%B8%D0%BD%D0%B3%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_abills_%2B_VPN_%2B_radius_%2B_mysql#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_.D0.B4.D0.BB.D1.8F_freeradius_2..2A Настройка биллинговой системы abills + VPN + radius + mysql] и естественно, [http://abills.net.ua/wiki/doku.php/abills:docs:manual:install_ubuntu:ru Установка ABillS + Ubuntu + FreeRadius2 + RLMPerl]<br />
 
За основу взяты статьи [http://www.volmed.org.ru/wiki/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B1%D0%B8%D0%BB%D0%BB%D0%B8%D0%BD%D0%B3%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_abills_%2B_VPN_%2B_radius_%2B_mysql#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_.D0.B4.D0.BB.D1.8F_freeradius_2..2A Настройка биллинговой системы abills + VPN + radius + mysql] и естественно, [http://abills.net.ua/wiki/doku.php/abills:docs:manual:install_ubuntu:ru Установка ABillS + Ubuntu + FreeRadius2 + RLMPerl]<br />
 
Итак начнем.
 
Итак начнем.
Строка 6: Строка 6:
 
<pre>$ sudo apt-get update
 
<pre>$ sudo apt-get update
 
$ sudo apt-get dist-upgrade</pre>
 
$ sudo apt-get dist-upgrade</pre>
 +
И перезагружаем систему
  
 
===Устанавливаем пакеты===
 
===Устанавливаем пакеты===
 
<pre>sudo apt-get install mysql-server mysql-client libmysqlclient-dev apache2 apache2-doc apache2-mpm-prefork \
 
<pre>sudo apt-get install mysql-server mysql-client libmysqlclient-dev apache2 apache2-doc apache2-mpm-prefork \
 
apache2-utils libexpat1 ssl-cert cvs libdbi-perl libdbd-mysql-perl libdigest-md4-perl \
 
apache2-utils libexpat1 ssl-cert cvs libdbi-perl libdbd-mysql-perl libdigest-md4-perl \
libdigest-sha-perl libcrypt-des-perl libperl-dev make </pre>
+
libdigest-sha-perl libcrypt-des-perl libperl-dev make pptpd</pre>
 +
 
 
===Создаем недостающие каталоги и меняем права:===
 
===Создаем недостающие каталоги и меняем права:===
 
<pre># mkdir -p /usr/abills/var/log
 
<pre># mkdir -p /usr/abills/var/log
Строка 18: Строка 20:
 
# chown -Rf www-data:www-data /usr/abills/backup</pre>
 
# chown -Rf www-data:www-data /usr/abills/backup</pre>
 
==Закачка дистрибутива Abills==
 
==Закачка дистрибутива Abills==
Тк далее в настройках будут ссылки на этот дистрибутив, то для последовательного изложения, нужно его выкачать<br />
 
 
Идем на страницу [http://sourceforge.net/projects/abills/ загрузки] и скачиваем последнюю версию Abills, на данный момент Abills-0.54.
 
Идем на страницу [http://sourceforge.net/projects/abills/ загрузки] и скачиваем последнюю версию Abills, на данный момент Abills-0.54.
 
<pre>
 
<pre>
Строка 24: Строка 25:
 
# tar -xvzf abills-0.54.tgz</pre>
 
# tar -xvzf abills-0.54.tgz</pre>
  
==PPTPD демон==
+
==PPTP==
 
<pre># mv /etc/ppp/pptpd-options /etc/ppp/pptpd-options.old</pre>
 
<pre># mv /etc/ppp/pptpd-options /etc/ppp/pptpd-options.old</pre>
 
Создаем файл /etc/ppp/pptpd-options со следующим содержимым:  
 
Создаем файл /etc/ppp/pptpd-options со следующим содержимым:  
Строка 39: Строка 40:
 
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
 
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
 
require-mppe-128
 
require-mppe-128
defaultroute
+
nodefaultroute
  
 
#plugin radius.so
 
#plugin radius.so
Строка 45: Строка 46:
 
#debug
 
#debug
 
</pre>
 
</pre>
Более детальное описание опций здесь - http://mppe-mppc.alphacron.de/  
+
Более детальное описание опций здесь - http://open-life.org/blog/1288.html
 +
 
 +
==PPTPD==
 +
Правим файл /etc/pptpd.conf :
 +
<pre>ppp /usr/sbin/pppd
 +
option /etc/ppp/pptpd-options
 +
#debug
 +
# stimeout 10
 +
# noipparam
 +
logwtmp
 +
bcrelay eth0
 +
localip ***.***.***.*** # Здесь IP адрес интерфейса вашего pptpd сервера, например, 192.168.20.1
 +
#remoteip 192.168.0.234-238,192.168.0.245 # Закоментировать, назначается
 +
  #радиусом
 +
</pre>
 +
:Редактируем файл /etc/ppp/chap-secret
 +
<pre># Secrets for authentication using CHAP
 +
# client        server  secret                  IP addresses
 +
vova    *      vova            192.168.200.5</pre>
 +
:Перезапускаем pptpd демон и пробуем войти по VPN c Win машины с авторизацией CHAP,  или MS-CHAP V2 c шифрацией трафика с именем vova и паролем vova. Если все ок, снимаем ремарки со строк
 +
<pre>plugin radius.so
 +
plugin radattr.so</pre> в файле options.pptpd и идем дальше.
 +
 
 +
==Настройка Iptables (фаервола)==
 +
Хотя настройка фарвола это совсем другая история (см [[Настройка фаервола | тут]] ), но для проверки, как работает инет через данную систему, привожу тут несколько правил, которые помогут проверить работу всей системы.
 +
<pre>
 +
#!/bin/sh
 +
#
 +
# Сначала сбросим все правила, которые были до этого
 +
/etc/init.d/iptables stop
 +
###########################################################################
 +
#
 +
# Configuration options.
 +
#
 +
#
 +
# Internet Configuration.
 +
#
 +
INET_IP="213.54.25.11"          # Арес интерфейса, который смотрит в интернет
 +
LAN_VPN_RANGE="192.168.10.0/24" # Диапазон адресов VPN сети, имеющей доступ
 +
                                # в инет
 +
# IPTables Configuration.
 +
#
 +
# Путь, где находится iptables.
 +
IPTABLES="/usr/local/sbin/iptables"
 +
 
 +
# Включаем форвардинг
 +
echo "1" > /proc/sys/net/ipv4/ip_forward
 +
$IPTABLES -P INPUT ACCEPT
 +
$IPTABLES -P OUTPUT ACCEPT
 +
$IPTABLES -P FORWARD ACCEPT
  
'''Примечание:''' в последнее время я пришел к выводу, что MPPE и MPPC в домашней сети не такая уж и полезная фича. Ресурсов отъедает прилично. По этому если вы строите NAS на недостаточно производительном железе, подумайте, нужно ли оно вам. Возможно лучшим выходом будет отключить обязательное шифрование в виндовом клиенте.
+
# Делаем NAT
 +
$IPTABLES -t nat -A POSTROUTING  -s $LAN_VPN_RANGE -j SNAT --to-source $INET_IP
 +
</pre>Ну вот и все. Этого достаточно для проверки. Но на рабочем сервере такое использование я бы очень не рекомендовал.
 +
==Perl modules==
 +
Для работы системы нужны модули.
 +
<pre>DBI
 +
DBD::mysql
 +
Digest-MD5 для Chap авторизации
 +
Digest-MD4 для MS-Chap авторизации
 +
Crypt-DES для MS-Chap авторизации
 +
Digest-SHA1 для MS-ChapV2 авторизации
 +
libnet Нужен только при авторизации из UNIX passwd
 +
Time-HiRes Нужен только для тестирования скорости выполнения авторизации,
 +
акаунтинга, и страниц веб интерфейса.
 +
DB_File
 +
</pre>
 +
Очень удобно эти модули загрузить или обновить с сайта [http://www.cpan.org | www.cpan.org] или установка с консоли. Вот способ установки:
 +
<pre># cd /root
 +
# perl -MCPAN -e shell
 +
o conf prerequisites_policy ask
 +
install    DBI     
 +
install    Digest::MD5
 +
install    Digest::MD4
 +
install    Crypt::DES
 +
install    Digest::SHA1
 +
install    Bundle::libnet
 +
install    Time::HiRes
 +
quit
 +
</pre>
 +
==Настройка Абилс==
 +
<pre>cp /usr/abills/libexec/config.pl.default /usr/abills/libexec/config.pl</pre>
 +
Удаляем старые параметры и добавляем новые
 +
<pre>$conf{dbpasswd}='sdfesfa'; # Пароль базы данных
 +
$conf{secretkey}="sdfadsfcv3ad2"; # Ключ, использующийся для шифрования паролей в базе данных
 +
$conf{dbcharset}='utf8';
 +
$conf{default_charset}='utf8';
 +
$conf{MAIL_CHARSET}='utf8';
 +
$conf{RADIUS2}=1;</pre>
 +
Для того, чтобы можно было осуществлять hangup подключенного пользователя необходимо добавить в файл /etc/sudoers:
 +
<pre>www-data  ALL = NOPASSWD: /usr/abills/misc/pppd_kill</pre>
  
 
==Настройка вебсервера APACHE==
 
==Настройка вебсервера APACHE==
 
<pre># cp /usr/abills/misc/apache/abills_httpd.conf /etc/apache2/sites-enabled/</pre>
 
<pre># cp /usr/abills/misc/apache/abills_httpd.conf /etc/apache2/sites-enabled/</pre>
 +
В файле /etc/apache2/sites-enabled/abills_httpd.conf меняем путь до логов с /var/log/http/  на /var/log/apache2/
 +
 +
 
Создаем сертификат
 
Создаем сертификат
 
<pre># /usr/abills/misc/certs_create.sh apache</pre>
 
<pre># /usr/abills/misc/certs_create.sh apache</pre>
Отвечаем на вопросы, задаваемые скриптом</br>
+
Отвечаем на вопросы, задаваемые скриптом<br />
 
Запускаем установленные модули для апача:
 
Запускаем установленные модули для апача:
 
<pre>
 
<pre>
Строка 62: Строка 154:
 
Перезапускаем apache:
 
Перезапускаем apache:
 
<pre># /etc/init.d/apache2 restart</pre>
 
<pre># /etc/init.d/apache2 restart</pre>
 +
 +
==Настройка Mysql==
 +
Создаем файл user_abills.sql
 +
<pre>
 +
use mysql;
 +
INSERT INTO user (Host, User, Password)
 +
VALUES ('localhost','abills', password('sdfesfa'));
 +
 +
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, Create_view_priv,
 +
Show_view_priv, Execute_priv)
 +
VALUES ('localhost', 'abills', 'abills', 'Y', 'Y', 'Y', 'Y', 'Y',
 +
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
 +
 +
CREATE DATABASE abills DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci;
 +
flush privileges;</pre>
 +
Где '''sdfesfa''' - пароль для пользователя '''abills''' для доступа к базе данных abills. Данные параметры должны совпадать с параметрами в настроечным файлом '''usr/abills/libexec/config.pl'''
 +
<pre>mysql --default-character-set=utf8 -u root -p < user_abills.sql</pre>
 +
Меняем ключ шифрования на тот что задали в конфигурационном файле
 +
<pre># cat /usr/abills/db/abills.sql | sed s/test12345678901234567890/sdfadsfcv3ad2/ > /usr/abills/abills_secure.sql</pre>
 +
Добавляем БД в Mysql
 +
<pre>mysql --default-character-set=utf8 -u root -p -D abills < /usr/abills/abills_secure.sql</pre>
 +
 +
==Установка RADIUS==
 +
Устанавливаем нужные пакеты
 +
<pre>$ sudo apt-get install libmysqlclient-dev libmysqlclient16 libgdbm3 libgdbm-dev radiusclient1</pre>
 +
<pre># ln -s /usr/lib/libperl.so.5.14 /usr/lib/libperl.so
 +
# ln -s /usr/lib/libperl.so.5.14.2 /usr/lib/libperl.so.5.14</pre>
 +
Radius устанавливаем из исходников<br />
 +
Выкачиваем последнюю версию радиуса.
 +
<pre>wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.0.tar.bz2
 +
tar zxvf freeradius-server-2.2.0.tar.bz2
 +
cd freeradius-server-2.2.0
 +
./configure --prefix=/usr/local/freeradius --with-rlm-perl-lib-dir=/usr/lib/
 +
make && make install
 +
ln -s /usr/local/freeradius/sbin/radiusd /usr/sbin/radiusd
 +
</pre>
 +
Файл для автозапуска  /etc/init.d/freeradius
 +
<pre>
 +
#!/bin/sh
 +
# Start/stop the FreeRADIUS daemon.
 +
 +
### BEGIN INIT INFO
 +
# Provides:          freeradius
 +
# Required-Start:    $remote_fs $network $syslog
 +
# Should-Start:      $time mysql slapd postgresql samba krb5-kdc
 +
# Required-Stop:    $remote_fs $syslog
 +
# Default-Start:    2 3 4 5
 +
# Default-Stop:      0 1 6
 +
# Short-Description: Radius Daemon
 +
# Description:      Extensible, configurable radius daemon
 +
### END INIT INFO
 +
 +
set -e
 +
 +
. /lib/lsb/init-functions
 +
 +
PROG="freeradius"
 +
PROGRAM="/usr/sbin/radiusd"
 +
PIDFILE="/var/run/radiusd/radiusd.pid"
 +
DESCR="FreeRADIUS daemon"
 +
 +
if [ -r /etc/default/$PROG ]; then
 +
  . /etc/default/$PROG
 +
fi
 +
 +
test -f $PROGRAM || exit 0
 +
 +
# /var/run may be a tmpfs
 +
if [ ! -d /var/run/radiusd ]; then
 +
  mkdir -p /var/run/radiusd
 +
  chown freerad:freerad /var/run/radiusd
 +
fi
 +
 +
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
 +
 +
ret=0
 +
 +
case "$1" in
 +
        start)
 +
                log_daemon_msg "Starting $DESCR" "$PROG"
 +
                start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $PROGRAM -- $FREERADIUS_OPTIONS || ret=$?
 +
                log_end_msg $ret
 +
                exit $ret
 +
                ;;
 +
        stop)
 +
                log_daemon_msg "Stopping $DESCR" "$PROG"
 +
                if [ -f "$PIDFILE" ] ; then
 +
                  start-stop-daemon --stop --retry=TERM/30/KILL/5 --quiet --pidfile $PIDFILE || ret=$?
 +
                else
 +
                  log_action_cont_msg "$PIDFILE not found"
 +
                  ret=0
 +
                fi
 +
                log_end_msg $ret
 +
                ;;
 +
        restart)
 +
                $0 stop
 +
                $0 start
 +
                ;;
 +
        reload|force-reload)
 +
                log_daemon_msg "Reloading $DESCR" "$PROG"
 +
                if [ -f "$PIDFILE" ] ; then
 +
                  start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE || ret=$?
 +
                else
 +
                  log_action_cont_msg "$PIDFILE not found"
 +
                  ret=0
 +
                fi
 +
                log_end_msg $ret
 +
                ;;
 +
        *)
 +
                echo "Usage: $0 start|stop|restart|force-reload|reload"
 +
                exit 1
 +
                ;;
 +
esac
 +
 +
exit 0
 +
</pre>
 +
Делаем запускаемым
 +
<pre># chmod +x /etc/init.d/freeradius</pre>
 +
Добавляем автозапуск
 +
<pre>update-rc.d freeradius defaults</pre>
 +
===Radiusclient===
 +
В  клиенте не хватает нескольких библиотек для работы. Я делал так выкачал с www.samba.org/ppp дистрибутив ppp-2.4.5.tar.gz. Распаковал в /usr/local/src
 +
<pre># ./configure
 +
# make</pre>
 +
Далее переписываем содержимое каталога '''/usr/local/src/ppp-2.4.5/pppd/plugins/radius/etc''' в каталог '''/etc/radiusclient/''', кроме файла  '''/etc/radiusclient/radiusclient.conf'''
 +
 +
Правим файл /etc/radiusclient/radiusclient.conf:
 +
<pre>authserver      127.0.0.1
 +
acctserver      127.0.0.1
 +
</pre>
 +
В файл /etc/radiusclient/servers вносим IP адрес радиус-сервера и соответствующий ему пароль см '''Настройка Freeradius''' (Файл  '''/usr/local/freeradius/etc/raddb/clients.conf''')
 +
<pre>127.0.0.1          radsecret</pre>
 +
===Настройка библиотек для Радиусов.===
 +
Для нормальной работы с NAS на осноаве pppd необходимо добавить в файл словарей freeradius’а /usr/local/freeradius/etc/raddb/dictionary и /etc/radiusclient/dictionary следующие строки (между колонками дб табуляции):
 +
<pre># Limit session traffic
 +
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
 +
# Connection Speed Limit
 +
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
 +
</pre>
 +
===Настройка Freeradius===
 +
<pre># cp /usr/abills/misc/freeradius/v2/radiusd.conf /usr/local/freeradius/etc/raddb/radiusd.conf
 +
# rm /usr/local/freeradius/etc/raddb/sites-enabled/*
 +
# cp /usr/abills/misc/freeradius/v2/users_perl /usr/local/freeradius/etc/raddb/users
 +
# cp /usr/abills/misc/freeradius/v2/default_rlm_perl /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
 +
# cp /usr/abills/misc/freeradius/v2/perl /usr/local/freeradius/etc/raddb/modules/</pre>
 +
Меняем в конфиге радиуса<br />
 +
Файл '''/usr/local/freeradius/etc/raddb/radiusd.conf'''
 +
<pre>prefix = /usr/local/freeradius
 +
 +
user = freerad
 +
group = freerad
 +
</pre>
 +
Файл  '''/usr/local/freeradius/etc/raddb/clients.conf'''
 +
<pre>
 +
client 127.0.0.1 {
 +
  secret = radsecret
 +
  shortname = shortname
 +
}</pre>
 +
Создание user и group если freeradius ранее не был установлен то без этого не стартует
 +
<pre>
 +
# groupadd freerad
 +
# useradd -g freerad -s /bash/bash freerad
 +
# chown -R freerad:freerad /usr/local/freeradius/etc/raddb
 +
# chown freerad /usr/abills/var/log/abills.log</pre>
 +
стартуем в режиме отладки
 +
<pre>#  /usr/local/freeradius/sbin/radiusd -X</pre>
 +
если после старта выполучаете ошибка
 +
<pre>symbol lookup error: /usr/lib/perl/5.10/auto/Cwd/Cwd.so: undefined symbol: Perl_Gthr_key_ptr</pre>
 +
тогда нужно дополнительно подгрузить perl библиотеку
 +
<pre>LD_PRELOAD=/usr/lib/libperl.so  /usr/local/freeradius/sbin/radiusd -X</pre>
 +
 +
==Постнастройка Abills==
 +
Меняем права, для работы построителя графиков.
 +
<pre>#chown www-data /usr/abills/cgi-bin/admin</pre>
 +
Вносим в cron периодические процессы /etc/crontab
 +
<pre>
 +
*/5  *      *    *    *  root  /usr/abills/libexec/billd -all
 +
1    0    *    *    *  root    /usr/abills/libexec/periodic daily
 +
1    1    *    *    *  root    /usr/abills/libexec/periodic monthly
 +
</pre>
 +
 +
Веб интерфейс администратора: https://your.host:9443/admin/<br />
 +
Логин администратора по умолчанию '''abills''' пароль '''abills'''
 +
 +
Веб интерфейс для пользователей: https://your.host:9443/
 +
 +
В интерфейсе администратора прежде всего надо сконфигурировать сервера доступа NAS (Network Access Server). <br />
 +
Переходим в меню<br />
 +
'''System configuration→NAS'''<br />
 +
'''Параметры'''
 +
<pre>IP 127.0.0.1 
 +
Название (произвольно, напр. - NAS Server)
 +
Radius NAS-Identifier Идентификатор сервера (можно не вписывать)
 +
Опис Описание сервера (Произв)
 +
Type pppd:pppd + Radius plugin (linux)
 +
Authorization SQL
 +
Alive 60
 +
 +
IP:PORT         удалить
 +
Пользователь:          удалить 
 +
Пароль:                удалить
 +
RADIUS Parameters Acct-Interim-Interval=60
 +
</pre>
 +
После заведения сервера доступа добавте ему пул адресов '''IP POOLs'''.
 +
{| border=1
 +
|'''FIRST IP'''||Первый адрес в пуле
 +
|-
 +
|'''COUNT'''||Количество адресов
 +
|}
 +
Одному серверу доступа может принадлежать несколько пулов адресов.
 +
 +
Создание тарифного плана<br />
 +
Меню<br />
 +
'''System configuration→Internet→Tarif Plans'''
 +
 +
Регистрация пользователя
 +
'''Customers→Users→Add'''
 +
 +
Заведение сервиса Internet на пользователя.
 +
'''Customers→Users→Information→Services→Internet'''
 +
 +
==Проверка==
 +
Для проверки правильно ли настроен сервис нужно запустить утилиту radtest указав логин и пароль существующего пользователя. <br />
 +
Логин: test Пароль: 123456
 +
<pre>
 +
# /usr/local/freeradius/sbin/radtest test 123456 127.0.0.1:1812 0 radsecret 0 127.0.0.1</pre>
 +
Если всё правильно настроено, в журнале ошибок '''/Отчёт/Internet/Ошибка/''' должна появиться строка
 +
<pre>2005-02-23 12:55:55 LOG_INFO: AUTH [test] NAS: 1 (xxx.xxx.xxx.xxx) GT: 0.03799</pre>
 +
Если Вы увидите другие ошибки смотрите в [http://abills.net.ua/wiki/doku.php/abills:docs:modules:dv:ru#d0_be_d1_88_d0_b8_d0_b1_d0_ba_d0_b8 список ошибок]. Если журнал ошибок пуст значит неправильно настроено взаимодействие с RADIUS сервером.
 +
 +
==Шейпер==
 +
Что бы включить шейпер, создаем файл скрипт '''/etc/ppp/ip-up.local''' и пишем в него:
 +
<pre>
 +
AWK=/usr/bin/awk;
 +
  TC=/sbin/tc
 +
  IFNAME=$1
 +
 
 +
  if [ -f /var/run/radattr.${IFNAME} ]; then
 +
    USER_NAME=`${AWK}  '/User-Name/ {print $2}'  /var/run/radattr.${IFNAME}`
 +
 
 +
    /usr/abills/libexec/linkupdown pppd up ${IFNAME} ${USER_NAME} $4 LINUX_NEW_MODEL=1
 +
  fi;
 +
</pre>
 +
Файл '''/etc/ppp/ip-down.local'''
 +
<pre>
 +
AWK=/usr/bin/awk;
 +
  TC=/sbin/tc
 +
  IFNAME=$1
 +
 
 +
  if [ -f /var/run/radattr.${IFNAME} ]; then
 +
    USER_NAME=`${AWK}  '/User-Name/ {print $2}'  /var/run/radattr.${IFNAME}`
 +
 
 +
    /usr/abills/libexec/linkupdown pppd down ${IFNAME} ${USER_NAME} $4 LINUX_NEW_MODEL=1
 +
fi;
 +
</pre>

Текущая версия на 11:32, 31 октября 2013

Вот пришлось перейти на другую Ось. Поэтому перепишу статью, с учетом новых версий abills 0.54 и Ubuntu 10.04 server
За основу взяты статьи Настройка биллинговой системы abills + VPN + radius + mysql и естественно, Установка ABillS + Ubuntu + FreeRadius2 + RLMPerl
Итак начнем.

Система

Обновляем систему

$ sudo apt-get update
$ sudo apt-get dist-upgrade

И перезагружаем систему

Устанавливаем пакеты

sudo apt-get install mysql-server mysql-client libmysqlclient-dev apache2 apache2-doc apache2-mpm-prefork \
apache2-utils libexpat1 ssl-cert cvs libdbi-perl libdbd-mysql-perl libdigest-md4-perl \
libdigest-sha-perl libcrypt-des-perl libperl-dev make pptpd

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

# mkdir -p /usr/abills/var/log
# touch /usr/abills/var/log/abills.log
# chown -Rf www-data:www-data /usr/abills/cgi-bin
# chown -Rf www-data:www-data /usr/abills/Abills/templates
# chown -Rf www-data:www-data /usr/abills/backup

Закачка дистрибутива Abills

Идем на страницу загрузки и скачиваем последнюю версию Abills, на данный момент Abills-0.54.

# cp abills-0.54.tgz /usr
# tar -xvzf abills-0.54.tgz

PPTP

# mv /etc/ppp/pptpd-options /etc/ppp/pptpd-options.old

Создаем файл /etc/ppp/pptpd-options со следующим содержимым:

mtu 1490
mru 1490
ms-dns 172.16.130.1             # ip адресс DNS сервера
ipcp-accept-local
ipcp-accept-remote
lcp-echo-failure 30
lcp-echo-interval 5
auth
# Require MPPE 128-bit encryption
require-mschap-v2
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
require-mppe-128
nodefaultroute

#plugin radius.so
#plugin radattr.so
#debug

Более детальное описание опций здесь - http://open-life.org/blog/1288.html

PPTPD

Правим файл /etc/pptpd.conf :

ppp /usr/sbin/pppd
option /etc/ppp/pptpd-options
#debug
# stimeout 10
# noipparam
logwtmp
bcrelay eth0
localip ***.***.***.*** # Здесь IP адрес интерфейса вашего pptpd сервера, например, 192.168.20.1
#remoteip 192.168.0.234-238,192.168.0.245 # Закоментировать, назначается
				 	  #радиусом
Редактируем файл /etc/ppp/chap-secret
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
vova    *       vova            192.168.200.5
Перезапускаем pptpd демон и пробуем войти по VPN c Win машины с авторизацией CHAP, или MS-CHAP V2 c шифрацией трафика с именем vova и паролем vova. Если все ок, снимаем ремарки со строк
plugin radius.so
plugin radattr.so

в файле options.pptpd и идем дальше.

Настройка Iptables (фаервола)

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

#!/bin/sh
#
# Сначала сбросим все правила, которые были до этого
/etc/init.d/iptables stop
###########################################################################
#
# Configuration options.
#
#
# Internet Configuration.
#
INET_IP="213.54.25.11"          # Арес интерфейса, который смотрит в интернет
LAN_VPN_RANGE="192.168.10.0/24" # Диапазон адресов VPN сети, имеющей доступ
                                # в инет
# IPTables Configuration.
#
# Путь, где находится iptables.
IPTABLES="/usr/local/sbin/iptables"

# Включаем форвардинг
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

# Делаем NAT
$IPTABLES -t nat -A POSTROUTING  -s $LAN_VPN_RANGE -j SNAT --to-source $INET_IP

Ну вот и все. Этого достаточно для проверки. Но на рабочем сервере такое использование я бы очень не рекомендовал.

Perl modules

Для работы системы нужны модули.

DBI 	
DBD::mysql	
Digest-MD5	для Chap авторизации
Digest-MD4	для MS-Chap авторизации
Crypt-DES 	для MS-Chap авторизации
Digest-SHA1	для MS-ChapV2 авторизации
libnet 	Нужен только при авторизации из UNIX passwd
Time-HiRes	Нужен только для тестирования скорости выполнения авторизации,
 		акаунтинга, и страниц веб интерфейса.
DB_File

Очень удобно эти модули загрузить или обновить с сайта | www.cpan.org или установка с консоли. Вот способ установки:

# cd /root 
# perl -MCPAN -e shell 
o conf prerequisites_policy ask 
install    DBI      
install    Digest::MD5 
install    Digest::MD4 
install    Crypt::DES 
install    Digest::SHA1 
install    Bundle::libnet 
install    Time::HiRes 
quit

Настройка Абилс

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

Удаляем старые параметры и добавляем новые

$conf{dbpasswd}='sdfesfa'; # Пароль базы данных
$conf{secretkey}="sdfadsfcv3ad2"; # Ключ, использующийся для шифрования паролей в базе данных
$conf{dbcharset}='utf8';
$conf{default_charset}='utf8';
$conf{MAIL_CHARSET}='utf8';
$conf{RADIUS2}=1;

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

www-data   ALL = NOPASSWD: /usr/abills/misc/pppd_kill

Настройка вебсервера APACHE

# cp /usr/abills/misc/apache/abills_httpd.conf /etc/apache2/sites-enabled/

В файле /etc/apache2/sites-enabled/abills_httpd.conf меняем путь до логов с /var/log/http/ на /var/log/apache2/


Создаем сертификат

# /usr/abills/misc/certs_create.sh apache

Отвечаем на вопросы, задаваемые скриптом
Запускаем установленные модули для апача:

# a2enmod ssl
# a2enmod rewrite
# a2enmod suexec
# a2enmod include

Перезапускаем apache:

# /etc/init.d/apache2 restart

Настройка Mysql

Создаем файл user_abills.sql

use mysql;
INSERT INTO user (Host, User, Password) 
VALUES ('localhost','abills', password('sdfesfa'));

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, Create_view_priv,
Show_view_priv, Execute_priv) 
VALUES ('localhost', 'abills', 'abills', 'Y', 'Y', 'Y', 'Y', 'Y', 
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

CREATE DATABASE abills DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci;
flush privileges;

Где sdfesfa - пароль для пользователя abills для доступа к базе данных abills. Данные параметры должны совпадать с параметрами в настроечным файлом usr/abills/libexec/config.pl

mysql --default-character-set=utf8 -u root -p < user_abills.sql

Меняем ключ шифрования на тот что задали в конфигурационном файле

# cat /usr/abills/db/abills.sql | sed s/test12345678901234567890/sdfadsfcv3ad2/ > /usr/abills/abills_secure.sql

Добавляем БД в Mysql

mysql --default-character-set=utf8 -u root -p -D abills < /usr/abills/abills_secure.sql

Установка RADIUS

Устанавливаем нужные пакеты

$ sudo apt-get install libmysqlclient-dev libmysqlclient16 libgdbm3 libgdbm-dev radiusclient1
# ln -s /usr/lib/libperl.so.5.14 /usr/lib/libperl.so
# ln -s /usr/lib/libperl.so.5.14.2 /usr/lib/libperl.so.5.14

Radius устанавливаем из исходников
Выкачиваем последнюю версию радиуса.

wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.0.tar.bz2
tar zxvf freeradius-server-2.2.0.tar.bz2
cd freeradius-server-2.2.0
./configure --prefix=/usr/local/freeradius --with-rlm-perl-lib-dir=/usr/lib/
make && make install
ln -s /usr/local/freeradius/sbin/radiusd /usr/sbin/radiusd

Файл для автозапуска /etc/init.d/freeradius

#!/bin/sh
# Start/stop the FreeRADIUS daemon.

### BEGIN INIT INFO
# Provides:          freeradius
# Required-Start:    $remote_fs $network $syslog
# Should-Start:      $time mysql slapd postgresql samba krb5-kdc
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Radius Daemon 
# Description:       Extensible, configurable radius daemon
### END INIT INFO

set -e

. /lib/lsb/init-functions

PROG="freeradius"
PROGRAM="/usr/sbin/radiusd"
PIDFILE="/var/run/radiusd/radiusd.pid"
DESCR="FreeRADIUS daemon"

if [ -r /etc/default/$PROG ]; then
  . /etc/default/$PROG
fi

test -f $PROGRAM || exit 0

# /var/run may be a tmpfs
if [ ! -d /var/run/radiusd ]; then
  mkdir -p /var/run/radiusd
  chown freerad:freerad /var/run/radiusd
fi

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

ret=0

case "$1" in
        start)
                log_daemon_msg "Starting $DESCR" "$PROG"
                start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $PROGRAM -- $FREERADIUS_OPTIONS || ret=$?
                log_end_msg $ret
                exit $ret
                ;;
        stop)
                log_daemon_msg "Stopping $DESCR" "$PROG"
                if [ -f "$PIDFILE" ] ; then
                  start-stop-daemon --stop --retry=TERM/30/KILL/5 --quiet --pidfile $PIDFILE || ret=$?
                else 
                  log_action_cont_msg "$PIDFILE not found"
                  ret=0
                fi
                log_end_msg $ret
                ;;
        restart)
                $0 stop
                $0 start
                ;;
        reload|force-reload)
                log_daemon_msg "Reloading $DESCR" "$PROG"
                if [ -f "$PIDFILE" ] ; then
                  start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE || ret=$?
                else 
                  log_action_cont_msg "$PIDFILE not found"
                  ret=0
                fi
                log_end_msg $ret
                ;;
        *)
                echo "Usage: $0 start|stop|restart|force-reload|reload"
                exit 1 
                ;;
esac

exit 0

Делаем запускаемым

# chmod +x /etc/init.d/freeradius

Добавляем автозапуск

update-rc.d freeradius defaults

Radiusclient

В клиенте не хватает нескольких библиотек для работы. Я делал так выкачал с www.samba.org/ppp дистрибутив ppp-2.4.5.tar.gz. Распаковал в /usr/local/src

# ./configure
# make

Далее переписываем содержимое каталога /usr/local/src/ppp-2.4.5/pppd/plugins/radius/etc в каталог /etc/radiusclient/, кроме файла /etc/radiusclient/radiusclient.conf

Правим файл /etc/radiusclient/radiusclient.conf:

authserver      127.0.0.1
acctserver      127.0.0.1

В файл /etc/radiusclient/servers вносим IP адрес радиус-сервера и соответствующий ему пароль см Настройка Freeradius (Файл /usr/local/freeradius/etc/raddb/clients.conf)

127.0.0.1          radsecret

Настройка библиотек для Радиусов.

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

# Limit session traffic
 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
 # Connection Speed Limit
 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

# cp /usr/abills/misc/freeradius/v2/radiusd.conf /usr/local/freeradius/etc/raddb/radiusd.conf
# rm /usr/local/freeradius/etc/raddb/sites-enabled/*
# cp /usr/abills/misc/freeradius/v2/users_perl /usr/local/freeradius/etc/raddb/users
# cp /usr/abills/misc/freeradius/v2/default_rlm_perl /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
# cp /usr/abills/misc/freeradius/v2/perl /usr/local/freeradius/etc/raddb/modules/

Меняем в конфиге радиуса
Файл /usr/local/freeradius/etc/raddb/radiusd.conf

prefix = /usr/local/freeradius

user = freerad
group = freerad

Файл /usr/local/freeradius/etc/raddb/clients.conf

client 127.0.0.1 {
   secret = radsecret
   shortname = shortname
}

Создание user и group если freeradius ранее не был установлен то без этого не стартует

# groupadd freerad
# useradd -g freerad -s /bash/bash freerad
# chown -R freerad:freerad /usr/local/freeradius/etc/raddb
# chown freerad /usr/abills/var/log/abills.log

стартуем в режиме отладки

#  /usr/local/freeradius/sbin/radiusd -X

если после старта выполучаете ошибка

symbol lookup error: /usr/lib/perl/5.10/auto/Cwd/Cwd.so: undefined symbol: Perl_Gthr_key_ptr

тогда нужно дополнительно подгрузить perl библиотеку

LD_PRELOAD=/usr/lib/libperl.so  /usr/local/freeradius/sbin/radiusd -X

Постнастройка Abills

Меняем права, для работы построителя графиков.

#chown www-data /usr/abills/cgi-bin/admin

Вносим в cron периодические процессы /etc/crontab

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

Веб интерфейс администратора: https://your.host:9443/admin/
Логин администратора по умолчанию abills пароль abills

Веб интерфейс для пользователей: https://your.host:9443/

В интерфейсе администратора прежде всего надо сконфигурировать сервера доступа NAS (Network Access Server).
Переходим в меню
System configuration→NAS
Параметры

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

После заведения сервера доступа добавте ему пул адресов IP POOLs.

FIRST IP Первый адрес в пуле
COUNT Количество адресов

Одному серверу доступа может принадлежать несколько пулов адресов.

Создание тарифного плана
Меню
System configuration→Internet→Tarif Plans

Регистрация пользователя Customers→Users→Add

Заведение сервиса Internet на пользователя. Customers→Users→Information→Services→Internet

Проверка

Для проверки правильно ли настроен сервис нужно запустить утилиту radtest указав логин и пароль существующего пользователя.
Логин: test Пароль: 123456

# /usr/local/freeradius/sbin/radtest test 123456 127.0.0.1:1812 0 radsecret 0 127.0.0.1

Если всё правильно настроено, в журнале ошибок /Отчёт/Internet/Ошибка/ должна появиться строка

2005-02-23 12:55:55 LOG_INFO: AUTH [test] NAS: 1 (xxx.xxx.xxx.xxx) GT: 0.03799

Если Вы увидите другие ошибки смотрите в список ошибок. Если журнал ошибок пуст значит неправильно настроено взаимодействие с RADIUS сервером.

Шейпер

Что бы включить шейпер, создаем файл скрипт /etc/ppp/ip-up.local и пишем в него:

AWK=/usr/bin/awk;
  TC=/sbin/tc
  IFNAME=$1
  
  if [ -f /var/run/radattr.${IFNAME} ]; then
    USER_NAME=`${AWK}  '/User-Name/ {print $2}'  /var/run/radattr.${IFNAME}`
  
    /usr/abills/libexec/linkupdown pppd up ${IFNAME} ${USER_NAME} $4 LINUX_NEW_MODEL=1
  fi;

Файл /etc/ppp/ip-down.local

AWK=/usr/bin/awk;
  TC=/sbin/tc
  IFNAME=$1
  
  if [ -f /var/run/radattr.${IFNAME} ]; then
    USER_NAME=`${AWK}  '/User-Name/ {print $2}'  /var/run/radattr.${IFNAME}`
  
    /usr/abills/libexec/linkupdown pppd down ${IFNAME} ${USER_NAME} $4 LINUX_NEW_MODEL=1
fi;