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

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Настройка Mysql)
(Настройка Freeradius)
Строка 272: Строка 272:
 
client 127.0.0.1 {
 
client 127.0.0.1 {
 
   secret = radsecret
 
   secret = radsecret
   shortname = shorrname
+
   shortname = shortname
 
}</pre>
 
}</pre>
 
Создание user и group если freeradius ранее не был установлен то без этого не стартует
 
Создание user и group если freeradius ранее не был установлен то без этого не стартует

Версия 15:20, 15 января 2013

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

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

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

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

Более детальное описание опций здесь - http://mppe-mppc.alphacron.de/

PPTPD

pptpd, (подпольная кличка - PopTop) можете взять из своего дистрибутива

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

ppp /usr/sbin/pppd
option /etc/ppp/options.pptpd
#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;

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

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

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

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

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

 
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"

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 || 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=$?
                  log_end_msg $ret
                else
                  log_action_cont_msg "$PIDFILE not found"
                  log_end_msg 0
                fi
                ;;
        restart|force-reload)
                $0 stop
                $0 start
                ;;
        *)
                echo "Usage: $0 start|stop|restart|force-reload"
                exit 1
                ;;
esac

exit 0
<pre>
Делаем запускаемым
<pre># chmod +x /etc/init.d/freeradius

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

update-rc.d freeradius defaults

Настройка 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/

Меняем в конфиге радиуса
Файл 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

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

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