Настройка биллинговой системы abills + VPN + radius + RLMPerl + mysql
Вот пришлось перейти на другую Ось. Поэтому перепишу статью, с учетом новых версий 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;