Установка 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

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

# 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

Настройка

Заливаем БД ABillS (пароль тот же что и в config.pl и sql.conf )

# mysql --default-character-set=utf8 -u root
use mysql;
SET GLOBAL validate_password_policy=0;
GRANT ALL ON abills.* TO `abills`@localhost IDENTIFIED BY "sqlpassword";  
CREATE DATABASE abills DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
flush privileges;
quit;

Добавляем базу данных abills:

# cd /usr/abills/db/
# mysql --default-character-set=utf8 -D abills < abills.sql

Если возникает Invalid default value for 'registration'
Выполняем

# sed -i -e "1 s/^/SET SQL_MODE='NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO';/;" /usr/abills/db/abills.sql
# mysql --default-character-set=utf8 -u root -p -D abills < /usr/abills/db/abills.sql

Установка модулей 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 mod_ssl

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

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

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

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

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

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

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

Здесь используем ранее найденную папку с библиотекой (/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

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

  # rm -f /usr/local/freeradius/etc/raddb/sites-enabled/*
  # cp /usr/abills/misc/freeradius/v3/default_rlm_perl /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
  # cp /usr/abills/misc/freeradius/v3/users_perl /usr/local/freeradius/etc/raddb/users
  # cp /usr/abills/misc/freeradius/v3/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 в автозагрузку:
Скачиваем systemd скрипт

# wget http://abills.net.ua/misc/centos7.radiusd
# mv centos7.radiusd /etc/systemd/system/radiusd.service
# systemctl daemon-reload
# systemctl enable radiusd

Проверяем:

# service radiusd start
# ps ax | grep rad

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

Добавляем сервис в файрвол

# 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

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

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

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

При правильной конфигурации БД и Freeradius, получим

Sending Access-Request of id 200 to 127.0.0.1 port 1812
        User-Name = "test"
        User-Password = "123456"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=200, length=44
        Acct-Interim-Interval = 300
        Session-Timeout = 2122244
        Framed-IP-Address = 10.0.0.182
        Framed-IP-Netmask = 255.255.255.255

Вход в веб интерфейс

Смотрим IP адрес

# ip a

У меня вывело:

[root@centos bin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:7e:c5:ab brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.121/24 brd 192.168.1.255 scope global dynamic enp0s3
       valid_lft 38566sec preferred_lft 38566sec
    inet6 fe80::a00:27ff:fe7e:c5ab/64 scope link
       valid_lft forever preferred_lft forever

Мой локальный адрес:

192.168.1.121

Открываем браузер

https://192.168.1.121:9443/admin/

Логин abills, пароль abills

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

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

Выбираем свой в меню справа (Вверху этой страницы блок Сервера доступа).

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