Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Версия для которой писалась документация 

Code Block
languagebash
Debian 8.6.0
Debian 9.5.0
Debian 10
Debian 11
Debian 12

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

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

  • SSH Server

  • Standart system utilities

Переходим в режим root. (Используя пароль, который вводили при установке)

Code Block
languagebash
su

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

Code Block
languagebash
cd /usr
wget https://netix.dl.sourceforge.net/project/abills/abills/1.00/abills-1.00.05.tgz
tar zxvf abills-1.00.05.tgz
cp /usr/abills/libexec/config.pl.default /usr/abills/libexec/config.pl

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

Code Block
languageperl
#DB configuration 
$conf{dbhost}='localhost';
$conf{dbname}='abills'; 
$conf{dbuser}='abills';
$conf{dbpasswd}='sqlpassword'; #измените на свой пароль
$conf{ADMIN_MAIL}='info@your.domain'; 
$conf{USERS_MAIL_DOMAIN}="your.domain";
# используется для шифрования паролей администраторов и пользователей.
$conf{secretkey}="test12345678901234567890";

Значение $conf{secretkey} рекомендуется заменить с "test12345678901234567890" на случайную длинную строку.
При изменении значения в $conf{secretkey} после установки, не забудьте изменить эту строку в mods-enabled/sql для FreeRadius.

Настройка сопутствующего ПО

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

Code Block
languagebash
apt-get update -yq && apt-get upgrade -yq
apt-get install libperl-dev  gcc make -yq


MySQL

Debian 8.xx

Code Block
languagebash
apt-get install -yq mariadb-server libmysqlclient-dev

Debian 9.xx

Code Block
languagebash
apt-get install -yq mariadb-server libmariadbclient-dev libmariadbclient-dev-compat

Создаём пользователя и базу.

Code Block
languagebash
mysql --default-character-set=utf8 -u root

В консоли mysql делаем : 

Code Block
languagesql
GRANT ALL ON abills.* TO `abills`@localhost IDENTIFIED BY "sqlpassword";  -- вместо sqlpassword подставляем своё значение из $conf{dbpasswd}
CREATE DATABASE abills DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci;
flush privileges;
quit;

Загружаем таблицы в базу.

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

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

Code Block
languagebash
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 -D abills < /usr/abills/db/abills.sql


Web Server

Apache

Установка Apache

Code Block
languagebash
apt-get install -yq apache2

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

Code Block
languagebash
/usr/abills/misc/certs_create.sh apache

Копируем готовый конфиг Apache в папку внешних конфигураций apache.

Apache 2.4

Code Block
languagebash
cp /usr/abills/misc/apache/abills_httpd.conf /etc/apache2/sites-enabled/

Включаем модули для апача:

Code Block
languagebash
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include
a2enmod cgid
a2enmod headers

Создаем файл лога ошибок Abills

Code Block
languagebash
mkdir /var/log/httpd
service apache2 restart


Perl modules

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

Code Block
languagebash
cd /usr/abills/misc/ && perl perldeps.pl apt-get -batch

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

Code Block
languagebash
apt-get install -yq cpanminus

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

Code Block
languagebash
cpanm <ИмяМодуля>

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

Code Block
languagebash
cpanm Digest::SHA1


FreeRadius

Установка

На все предупреждения ./configure кроме rlm_perl и rlm_sql_mysql можно не обращать внимания. 
На удаленном сервере установите libmysqlclient и libmysqlclient-dev

Проверка PERL


Code Block
languagebash
titleПроверка версии Perl
apt-get install libperl-dev -yq
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


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

Code Block
languagebash
ln -s /usr/lib/x86_64-linux-gnu/libperl.so.5.22 /usr/lib/x86_64-linux-gnu/libperl.so


Code Block
languagebash
apt-get install -yq gcc make libtalloc-dev
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
./configure --prefix=/usr/local/freeradius --with-rlm-perl-lib-dir=/usr/lib/x86_64-linux-gnu/ \
 --with-rlm-sql-mysql-lib-dir=/var/lib/mysql/ --with-dhcp=yes --with-openssl=no > /dev/null
make && make install

Настройка

Code Block
languagebash
cd /usr/abills
rm /usr/local/freeradius/etc/raddb/sites-enabled/*
cp misc/freeradius/v3/mods-enabled/perl /usr/local/freeradius/etc/raddb/mods-enabled/perl
cp misc/freeradius/v3/mods-enabled/sql /usr/local/freeradius/etc/raddb/mods-enabled/sql
cp misc/freeradius/v3/sites-enabled/abills_default /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
cp misc/freeradius/v3/sites-enabled/control-socket /usr/local/freeradius/etc/raddb/sites-enabled/control-socket
cp misc/freeradius/v3/users /usr/local/freeradius/etc/raddb/users
ln -s /usr/local/freeradius/bin/* /usr/bin/
ln -s /usr/local/freeradius/sbin/* /usr/sbin/

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

Code Block
languagebash
nano /etc/init.d/radiusd


Code Block
languagebash
collapsetrue
#!/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="/usr/local/freeradius/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


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

Меняем в конфиге радиуса /usr/local/freeradius/etc/raddb/radiusd.conf

Code Block
languagebash
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 (чтоб не было дубликатов из-за записей в базе)

Code Block
languagebash
echo '' > /usr/local/freeradius/etc/raddb/clients.conf

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

Code Block
languagebash
nano /usr/local/freeradius/etc/raddb/mods-enabled/sql


Code Block
languagebash
sql {
        database = "mysql"
        driver = "rlm_sql_${database}"
        server = "localhost"
        #port = 3306
        login = "abills"
        password = "sqlpassword"  #вместо sqlpassword подставляем своё значение из $conf{dbpasswd}
        radius_db = "abills"
        
# В самом конце файла
        '%secretkey%' меняем на ваше значение, которое записано в $conf{secretkey}

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

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

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

Code Block
languagebash
/usr/sbin/radiusd -X

или

Code Block
languagebash
radiusd -X

Проверяем через другую консоль:

Code Block
languagebash
radtest test 123456 127.0.0.1:1812 0 secretpass 0 127.0.0.1

Дополнительная настройка и тестирование RADIUS


На всякий случай оставлю здесь: Кажется настроил, но никто не может подключиться

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

Code Block
languagebash
service radiusd start


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

Открытие фаервола для RADIUS пакетов

iptables -A ufw-user-input -p udp --dport 1812 -j ACCEPT
iptables -A ufw-user-input -p udp --dport 1813 -j ACCEPT

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

Вносим периодические процессы

Code Block
languagebash
title/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


Code Block
languagebash
titleи даем доступ на ведение лога SQL ошибок
mkdir -p /usr/abills/var/log
touch /usr/abills/var/log/sql_errors && chmod 666 /usr/abills/var/log/sql_errors

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

Code Block
languagebash
ln -s /bin/gzip /usr/bin/gzip
ln -s /usr/bin/mysqldump /usr/local/bin/mysqldump

Права на файлы и каталоги

Code Block
chown -Rf www-data /usr/abills/cgi-bin /usr/abills/Abills/templates /usr/abills/backup /usr/abills/language



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

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

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

Первые шаги

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

Параметры

IP

IP адрес NAS сервера

НазваниеНазвание
Radius NAS-IdentifierИдентификатор сервера (можно не вписывать)
ОписаниеОписание сервера
ТипТип сервера. В зависимости от типа по разному обрабатываются запросы на авторизацию
AliveПериод отправки Alive пакетов
DisableОтключить
:Manage: Секция менеджмента NAS сервера
IP:PORTIP адрес и порт для контроля соединения. Например, для отключения пользователя из веб-интерфейса
UserПользователь для контроля
PasswordПароль
RADIUS ParametersДополнительные параметры которые передаются NAS серверу после успешной авторизации

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

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

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

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

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

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


Проверка

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

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

Code Block
languagebash
/usr/local/freeradius/bin/radtest test 123456 127.0.0.1:1812 0 secretpass 0 127.0.0.1

Если всё правильно настроено, в журнале ошибок Отчёт>Интернет+>Последнее подключение должна появиться строка 

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

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


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