Установка ABillS : Ubuntu

Версия системы под которую писалась инструкция Ubuntu Server 16.04

При установке выбраны только опции:

  • standart system utilities
  • OpenSSH Server

Работаем в консоли, переходим в режим root:

# sudo su

Сначала обновим систему и пакеты

# apt-get update -yq && apt-get upgrade -yq && apt-get dist-upgrade -yq

Перезагрузились и устанавливаем пакеты MySQL, apache2 и библиотеки perl

apt-get install -yq mysql-server mysql-client libmysqlclient-dev apache2 apache2-utils libexpat1 ssl-cert

Скачивание 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

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

  mkdir /var/log/httpd/
  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
  touch /usr/abills/var/log/sql_errors
  chown nobody /usr/abills/var/log/sql_errors
  chmod 666 /usr/abills/var/log/sql_errors

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

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

/etc/init.d/apache2 restart

Настройка MySQL

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

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

mysql --default-character-set=utf8 -u root -p -D abills < /usr/abills/db/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 modules

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

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

Улучшаем себе жизнь в будущем:

# apt-get install -yq cpanminus

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

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

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

# cpanm Digest::SHA1

Установка RADIUS

устанавливаем нужные библиотеки для сборки freeradius

apt-get install -yq libmysqlclient-dev libgdbm3 libgdbm-dev make gcc

# find /usr/lib/ | grep libperl.so /usr/lib/x86_64-linux-gnu/libperl.so.5.22 /usr/lib/x86_64-linux-gnu/libperl.so.5.22.1

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

ln -s /usr/lib/x86_64-linux-gnu/libperl.so.5.22 ​/usr/lib/x86_64-linux-gnu/libperl.so

Скачиваем Freeradius версии 2.2.9

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
./configure --prefix=/usr/local/freeradius --with-rlm-perl-lib-dir=/usr/lib/x86_64-linux-gnu/ \
 --with-dhcp=yes --with-openssl=no > /dev/null
make && make install

ln -s /usr/local/freeradius/sbin/radiusd /usr/sbin/radiusd

Файл для автозапуска,- создаем и вставляем в него следующий текст

# nano /etc/init.d/radiusd
#!/bin/sh
# Start/stop the FreeRADIUS daemon.

### BEGIN INIT INFO
# Provides:          radiusd
# 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="radiusd"
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

Включаем в автозагрузку

chmod +x /etc/init.d/radiusd
update-rc.d radiusd defaults
update-rc.d radiusd enable

Устанавливаем конфигурационные файлы ABillS:

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/

Меняем в конфиге радиуса

  # 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
# mkdir /var/run/radiusd/
# chown -R freerad:freerad /var/run/radiusd/

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

#  radiusd -X

Если запустилось без ошибок, запускаем

# service radiusd start

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

Вносим в /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


и даем доступ на ведение лога ошибок

# touch /usr/abills/var/log/sql_errors && chmod 666 /usr/abills/var/log/sql_errors

Добавляем линки на gzip и mysqldump для создания бэкапов базы:

# ln -s /bin/gzip /usr/bin/gzip
# ln -s /usr/bin/mysqldump /usr/local/bin/mysqldump



Веб интерфейс администратора: (IP адрес можно узнать с помощью ip a)
https://your.host:9443/admin/

Логин администратора по умолчанию abills пароль abills

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

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

Параметры

IP IP адрес NAS сервера
Name Название
Radius NAS-Identifier Идентификатор сервера (можно не вписывать)
Describe Описание сервера
Type Тип сервера. В зависимости от типа по разному обрабатываются запросЫ на авторизацию
Authorization Тип авторизации.
SYSTEM - При хранении паролей в UNIX базе (/etc/passwd)
SQL - при хранении паролей SQL базе (MySQL, PosgreSQL)
Alive Период отправки Alive пакетов
Disable Отключить
:Manage: Секция менеджмента NAS сервера
IP:PORT IP адрес и порт для контроля соединения. Например, для отключения пользователя из веб-интерфейса
User Пользователь для контроля
Password Пароль
RADIUS Parameters Дополнительные параметры которые передаются NAS серверу после успешной авторизации.

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

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

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

Создание тарифного плана
Меню
Настройка→Интернет→Тарифные планы

Регистрация пользователя
Клиенты→Логины→Добавить пользователя

Заведение сервиса Internet на пользователя.
Клиенты→Логины→Сервисы→Интернет

Проверка

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

# apt-get install freeradius-utils 

Логин: test Пароль: 123456

# radtest test 123456 127.0.0.1:1812 0 secretpass 0 127.0.0.1

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

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

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

Дополнительно