Это старая версия документа.


Установка ABillS на CentOS

Исходная: минимальная установка CentOS 6.xx/7.xx.
Для установки достаточно иметь версию CentOS-а с Minimal ISO: https://www.centos.org/download/

Переходим в режим root

# sudo su

Дополнительная конфигурация системы

Если нет опыта настройки SELinux, отключаем:

Обновляем систему и ставим дополнительные пакеты:

# yum update -y
# yum install -y wget gcc make nano perl ntp ntpdate

В файле конфига изменяем SELINUX=enforcing на SELINUX=disabled (Если не знаете что делать потом с SELINUX)

# nano /etc/selinux/config 
# reboot

Подключаем epel репозиторий

# yum install -y epel-release

Если не получилось установить пакет, пользуемся этой инструкцией

Скачиваем ABillS

На момент написания статьи актуальная версия 0.75.110 (Сходите сюда и проверьте).

# cd /usr
# wget https://sourceforge.net/projects/abills/files/abills/0.75/abills-0.75.110.tgz
# tar zxvf abills-0.75.110.tgz
# cp /usr/abills/libexec/config.pl.default /usr/abills/libexec/config.pl

Изменяем конфигурационный файл /usr/abills/libexec/config.pl

#DB configuration 
$conf{dbhost}='localhost';        # Можно не менять 
$conf{dbname}='abills';           # Можно не менять
$conf{dbuser}='abills';           # Можно не менять 
$conf{dbpasswd}='sqlpassword';    # Желательно изменить
$conf{ADMIN_MAIL}='info@your.domain'; # Нужно изменить

# используется для шифрования паролей администраторов и пользователей.
$conf{secretkey}="test12345678901234567890"; # Можно не менять

При изменении значения в $conf{secretkey} поменяйте его также в файле /usr/abills/db/abills.sql

Установка MySQL:

*CentOS 7.xx (MariaDB)

Подключаем репозиторий

# yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

Percona установит временный пароль рута, поэтому надо проделать некоторые хитрые манипуляции. Очищаем лог

[ -f /var/log/mysqld.log ] && echo '' > /var/log/mysqld.log

Устанавливаем

# yum -y install Percona-Server-server-57 Percona-Server-devel-57

Запускаем и останавливаем, чтоб инициализировать базу

# systemctl start mysql
# systemctl stop mysql

Запускаем без проверки пароля

# sudo -u mysql /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --validate-password=OFF

Получаем пароль из /var/log/mysql.log

# MYSQL_TEMPRORARY_ROOT_PASSWORD=`cat /var/log/mysqld.log | grep generated | awk '{print($11)}'`

Очищаем пароль

# mysqladmin -u root --password="${MYSQL_TEMPRORARY_ROOT_PASSWORD}" -h localhost password ""

Находим PID и убиваем процесс

# kill `cat /var/run/mysqld/mysqld.pid`

Запускаем

# systemctl start mysql

Добавляем в автозагрузку

# systemctl is-enabled mysql || systemctl enable mysql

Установка модулей Perl:

Запускаем скрипт установки зависимостей Perl

# cd /usr/abills/misc/ && perl perldeps.pl rpm -batch

Облегчаем себе жизнь в будущем

# yum -y install perl-App-cpanminus

Если какие-то модули не установились, можно запустить

# cpanm <ИмяМодуля>

Например у меня не установился Imager::QRCode, запускаю:

# cpanm Imager::QRCode

Установка и настройка Apache

Устанавливаем

# yum -y install httpd httpd-devel httpd-tools

Создаём сертификат (можно использовать значения по умолчанию)

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

Устанавливаем VirtualHost abills

# cp /usr/abills/misc/apache/abills_httpd.conf /etc/httpd/conf.d/

Открываем порт:
# firewall-cmd --zone=public --add-port=9443/tcp --permanent
# firewall-cmd --reload

Запускаем apache

# systemctl start httpd.service

Пропишем в автозагрузку

# systemctl enable httpd.service

Установка и настройка Freeradius

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

# yum -y install gdbm gdbm-devel install perl-ExtUtils-Embed gcc

Ищем куда установились библиотеки perl

# find /usr/lib64/ | grep libperl.so

Этот файл находится в /usr/lib64/perl5/CORE/

Устанавливаем сам Freeradius

# cd /tmp
# wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.9.tar.gz
# tar zxvf freeradius-server-2.2.9.tar.gz
# cd freeradius-server-2.2.9

Здесь используем ранее найденную папку с библиотекой (/usr/lib64/perl5/CORE/)

# ./configure --prefix=/usr/local/freeradius --with-rlm-perl-lib-dir=/usr/lib64/perl5/CORE --with-dhcp --with-openssl=no > /dev/null
# make && make install

Копируем конфигурационные скрипты (выполнять построчно):

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

Меняем в файле radiusd.conf

# nano /usr/local/freeradius/etc/raddb/radiusd.conf


prefix = /usr/local/freeradius
user = freerad
group = freerad

Благодаря модулю sql, можно хранить сервера доступа в базе данных (всё равно необходим перезапуск радиуса после добавления/изменения серверов, но не надо править clients.conf).
Очищаем список серверов доступа из /usr/local/freeradius/etc/raddb/clients.conf (чтоб не было дупликатов из-за записей в базе)

# echo '' > /usr/local/freeradius/etc/raddb/clients.conf
# cp /usr/abills/misc/freeradius/v2/sql.conf /usr/local/freeradius/etc/raddb/

Заполняем нужные нам параметры соединения с БД

# nano /usr/local/freeradius/etc/raddb/sql.conf
sql {
        database = "mysql"
        driver = "rlm_sql_${database}"
        server = "localhost"
        #port = 3306
        login = "abills"
        password = "sqlpassword"
        radius_db = "abills"
        
# В самом конце файла
        '%secretkey%' меняем на 'test12345678901234567890'

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

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

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

  #  /usr/sbin/radiusd -X

или

  # radiusd -X

Если нет ошибок, включаем radiusd в автозагрузку:
Делаем ссылку на скрипт запуска в каталог /etc/init.d

# ln -s /usr/local/freeradius/sbin/rc.radiusd /etc/init.d/radiusd

Вставляем в конец первого комментария /etc/init.d/radiusd (описание программы, под«# Copyright…», вставляем комментарием):

# nano /etc/init.d/radiusd
#   chkconfig: - 58 74
#   description: radiusd is service access provider Daemon.

Даем права на запись в каталог run:

# chown freerad:freerad /usr/local/freeradius/var/run/radiusd/

Проверяем:

# service radiusd start
# ps ax | grep rad

В списке запущенных процесов ищем наш /usr/local/freeradius/bin/radiusd

Включаем в автозапуск:

# chkconfig radiusd on

Важно В CentOS 7.2 Для корректной работы, необходимо добавить сервис в файрвол

# firewall-cmd --permanent --zone=public --add-service=radius

Периодические процесы

Вносим в cron периодические процессы /etc/crontab. Данные программы занимаются контролем состояния сессий (billd), месячной и дневной абонплатой, тарифных планов по расписанию (periodic)

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

Если нет файла, устанавливаем:

# yum -y install crontab

Установка и настройка accel-ppp:

Тестирование

Тестирование Freeradius:

# cd /usr/local/freeradius/bin
# ./radtest test 123456 127.0.0.1:1812 0 secretpass 0 127.0.0.1

Настройка серверов доступа

В интерфейсе администратора надо сконфигурировать сервера доступа NAS (Network Access Server).

Выбираем свой в меню справа.