Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

С версии SoftWLC 1.18 механизм архивации пользовательского аккаунтинга реализуется при помощи набора shell-скриптов, запускаемых при помощи утилиты cron, включенных в пакет eltex-radius-db.

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

Партиционирование выполняется не по месяцам, а по неделям, что позволяет хранить в БД меньшее количество данных.

Архивация данных выполняется еженедельно.

Настройка автоматического запуска

Настройка автоматического запуска не требуется т.к. при установки пакета, выполнение скрипта добавляется в cron сразу.

Добавление запуска скрипта можно проверить, просмотрев содержимое файла /etc/cron.d/eltex-radius-db :

Без форматирования
root@vagrant-ubuntu-trusty-64:/home/vagrant# cat /etc/cron.d/eltex-radius-db 
# Launch every Monday
0 0 * * 1 root /usr/lib/eltex-radius-db/three_years_radacct_wrap.sh
Примечание

При необходимости изменения времени запуска скрипта, следует исправить cron-последовательность в файле /etc/cron.d/eltex-radius-db, после чего перезапустить сервис cron.

Создание партиций

В предыдущих версиях партицирование таблицы radacct выполнялось по месяцам. Для этого регулярно запускался скрипт, создающий партицию на месяц вперед.

В текущей версии партиции создаются понедельно. Для создания новых партиций используется скрипт /etc/cron.daily/radius-db-partitions, запускаемый ежедневно и проверяющий наличие партиции на следующую неделю, если партиции нет, то она создается.

При первой установке eltex-radius-db автоматически создаются партиции за предыдущие 3 года и на одну будущую неделю (относительно текущего серверного времени).

При обновлении с версий freeradius-eltex-db < 3.2.0, будет производиться преобразование базы данных. Это действие может занимать длительное время.

При обновлении с более поздних версий, старые партиции, разбитые по месяцам останутся без изменений, а новые будут создаваться с недельными интервалами.

Конфигурационные файлы

/etc/eltex-radius-db/manager-login

Файл содержит логин и пароль для подключения к БД.

Информация

Скрипт рассчитан на выполнение на одном сервере с базой данных, поэтому адрес сервера БД по умолчанию не указывается.

/etc/eltex-radius-db/three_years_radacct

Файл содержит настройки работы монитора.

Блок кода
languagebash
title/etc/eltex-radius-db/three_years_radacct
collapsetrue
#Directory to store the accounting archives.
ARCHIVE_DIR="/var/ems-backup/radius/csv/"
#Storage time in the database is calculated in weeks. At the end of the storage period, the data will be deleted from the database.
PART_WEEK=26
#Archives storage time, in the $ARCHIVE_DIR directory, is calculated in weeks. At the end of the storage period, the archives will be deleted from the directory.
ARCHIVE_WEEK=156
#Administrator's e-mail, to which will be sent the notifications of the errors, occurred while script execution.
NOTIFICATION_ADDR=
#------------------------------Uploading via rsync protocol-------------------------------------------------------------
#Activation of the mechanism for uploading data to remote storage via rsync protocol.
RSYNC_REMOTE=N
#The remote storage address for rsync upload.
RSYNC_REMOTE_HOST=192.168.0.1
#The port for the rsync connection.
RSYNC_REMOTE_PORT=22
#The user name for the rsync connection.
RSYNC_REMOTE_USER=admin
#The user password for the rsync connection.
RSYNC_REMOTE_PASSWORD=password
#The path to save archives to a remote location.
RSYNC_REMOTE_PATH="/var/ems-backup/radius/csv/"
#------------------------------Uploading via ftp protocol---------------------------------------------------------------
#Activation of the mechanism for uploading data to remote storage via ftp protocol.
FTP_REMOTE=N
#The remote storage address for uploading via ftp.
FTP_REMOTE_HOST=192.168.0.1
#The port for uploading via ftp.
FTP_REMOTE_PORT=21
#The user name for uploading via ftp.
FTP_REMOTE_USER=admin
#The user password for uploading via ftp.
FTP_REMOTE_PASSWORD=password
#The path to save archives to a remote location.
FTP_REMOTE_PATH="/var/ems-backup/radius/csv/"

...

26

...

E-mail администратора, на который будут отправляться уведомления об ошибках работы скрипта.

Примечание

Для отправки уведомлений по почте необходимо установить и настроить пакеты mailutils ssmtp. В данном руководстве есть инструкция по их настройке.

Информация

В версии mailutils 1:2.99.99-1ubuntu2 и выше поддерживается одновременная отправка нескольким получателем. Для этого в конфигурации они должны быть перечислены через проблем, в двойных кавычках. Например: "example@mail.org example2@mail.org".

Автоматическая выгрузка данных в удаленное хранилище

Помимо архивации и ротации аккаунтинга, скрипт способен автоматически выполнять выгрузку архивированных данных на удаленные сервера. Выгрузка реализована при помощи протоколов rsync и ftp.

Настройка выгрузки данных по протоколу rsync

Примечание

Для работы этой функции на сервере должны быть установлены пакеты rsync и sshpass.

...

Настройка выгрузки данных по протоколу FTP

Примечание

Для работы этой функции используется утилита lftp, которая должна быть предустановлена на сервере.

...

Журналирование работы скриптов

Логи работы скриптов сохраняются в каталоге /var/log/eltex-radius-db/.

Ротация логов настраивается в файле /etc/logrotate.d/radacct.

...

languagejs
collapsetrue

...

stylesquare

В eltex-radius есть возможность проксирования на сторонний сервер. По умолчанию только запросов авторизации и только на один сервер. В статье описана настройка проксирования авторизации и аккаунтинга, на один и более серверов.

Конфигурация по умолчанию

...

Общие настройки проксирования находятся в файле /etc/eltex-radius/local.conf и выглядят так:

Блок кода
languageapplescript
themeRDark
titleчасть конфигурационного файла /etc/eltex-radius/local.conf
# Proxying
proxy_auth=0
proxy_domain_regex="^(.+\.)?enterprise\.root$"
proxy_host="127.0.0.1"
proxy_port=18121
proxy_secret="eltex"
  • proxy_auth  – статус проксирования, 0 или 1, по умолчанию 0, выключено;
  • proxy_domain_regex – регулярное выражение, по которому определяются запросы авторизации и в каких доменах они будут проксированы (для проксирования всех запросов можно установить значение: "^(.+\.)?root$");
  • proxy_host – адрес сервера, на который будут проксироваться запросы;
  • proxy_port – порт сервера;
  • proxy_secret – секрет, заданный для сервера eltex-radius на сервере, на который будет осуществляться проксирование.
Подсказка

В такой конфигурации eltex-radius будет выступать в роли NAS.


Более тонкие настройки находятся в файле /etc/eltex-radius/proxy.conf и выглядят следующим образом:

Блок кода
languageapplescript
themeRDark
titleНастройки по умолчанию
collapsetrue
# -*- text -*-
##
## proxy.conf -- proxy radius and realm configuration directives
##

proxy server {
	default_fallback = no
}

home_server auth_proxy {
	type = auth
	ipaddr = "${proxy_host}"
	port = "${proxy_port}"
	secret = "${proxy_secret}"

	response_window = 20

	#
	#  Start "zombie_period" after this many responses have
	#  timed out.
	#
#	response_timeouts = 1
	zombie_period = 40
	revive_interval = 120

	status_check = status-server
	check_interval = 30
	check_timeout = 4
	num_answers_to_alive = 3
	max_outstanding = 65536
}

home_server_pool auth_proxy_failover {
	type = fail-over
	home_server = auth_proxy
}

realm auth_proxy {
	auth_pool = auth_proxy_failover
}

realm LOCAL {
	#  If we do not specify a server pool, the realm is LOCAL, and
	#  requests are not proxied to it.
}

#realm "~(.*\.)*example\.net$" {
#      auth_pool = my_auth_failover
#}

# Proxy SSID (for example to eltex-eap-tls) #139679
home_server auth_ssid {
	type = auth
	ipaddr = "${proxy_ssid_host}"
	port = "${proxy_ssid_port}"
	secret = "${proxy_ssid_secret}"

	response_window = 20

    #response_timeouts = 1
	zombie_period = 40
	revive_interval = 120

	status_check = status-server
	check_interval = 30
	check_timeout = 4
	num_answers_to_alive = 3
	max_outstanding = 65536
}

home_server_pool auth_ssid_failover {
    type = fail-over
    home_server = auth_ssid
}

realm auth_ssid {
    auth_pool = auth_ssid_failover
}


Проксирование авторизации на сторонний RADIUS-сервер

...

Рассмотрим самый простой случай проксирования запросов авторизации на один сторонний RADIUS-сервер.

Для этого нужно отредактировать файл /etc/eltex-radius/local.conf следующим образом:

Блок кода
languageapplescript
themeRDark
titleчасть конфигурационного файла /etc/eltex-radius/local.conf
# Proxying
proxy_auth=1
proxy_domain_regex="^(.+\.)?enterprise\.root$"
proxy_host="10.10.10.11"
proxy_port=1812
proxy_secret="topsecret"

В такой конфигурации все запросы авторизации в иерархии доменов enterprise.root будут проксироваться на сервер с адресом 10.10.10.11 на порт 1812, при этом в качестве secret будет использована фраза topsecret.

Примечание

Аккаунтинг в такой конфигурации будет по прежнему обрабатываться локально, т. е. eltex-radius.

Редактирование /etc/eltex-radius/proxy.conf в этом случае не требуется.

Проксирование авторизации и аккаунтинга на сторонний RADIUS-сервер

...

Для проксирования аккаунтинг-запросов также, как и запросов авторизации необходимо внести изменения в файле /etc/eltex-radius/proxy.conf.

В секции home_server изменить значение параметра type на auth+acct:

Блок кода
languageapplescript
themeRDark
home_server auth_proxy {
        weeklytype = auth+acct
      rotate 24 ipaddr = "${proxy_host}"
     dateext   port = "${proxy_port}"
   dateformat -%Y-%m-%d    secret = "${proxy_secret}"

 dateyesterday       response_window = extension .log20

        #
        #  Start "zombie_period" after this many responses have
        #  timed out.
        missingok#
#       response_timeouts notifempty= 1
       nocreate }zombie_period 
/var/log/eltex-radius-db/create_partitions.log {
= 40
        revive_interval = 120

      size 10k status_check = status-server
     weekly   check_interval = 30
   rotate 50    check_timeout = 4
  missingok      num_answers_to_alive = 3
notifempty        max_outstanding nocreate= }

Настройка отправки уведомлений по почте

Для отправки уведомлений по почте используются пакеты mailutils ssmtp (из стандартных репозиториев Ubuntu). Краткая инструкция по установке и настройке:

...

65536
}

В секции realm auth proxy заменить параметр auth_pool на pool, значение оставить тем же:

Блок кода
languageapplescript
themeRDark
realm auth_proxy {
		pool = auth_proxy_failover
}

А также, в файле /etc/eltex-radius/servers/default в секцию preacct после preprocess добавить строку proxy_auth:

Блок кода
languagebash
themeRDark
apt-get install mailutils ssmtp

В конфигурационном файле /etc/ssmtp/ssmtp.conf нужно указать данные для подключения к smtp серверу, например:

Без форматирования
mailhub=192.168.1.1
AuthUser=tester@example.loc
AuthPass=password
UseTLS=NO
UseSTARTTLS=YES

В конфигурационном файле /etc/ssmtp/revaliases нужно указать адрес отправителя, например:

Без форматирования
root:tester@example.loc:192.168.1.1:25

Перезапуск процессов не требуется.

Для проверки отправки можно использовать консольную команду:

Блок кода
languagebash
themeRDark
echo "Это тестовое письмо из консоли" | ssmtp -v -s test-destination@example.loc

Выборка данных при создании архива

При создании архивов, данные выгружаются по условию:

Без форматирования
(starttime <= end and starttime >= start) or (stoptime <= end and stoptime >= start)

start - время начала выборки;

end - время завершения выборки;

starttime - время получения пакета radacct-start, обозначающего начало сессии пользователя;

stoptime - время получения пакета radacct-stop, обозначающего конец сессии пользователя.

Такое правило выборки позволяет сохранить данные о сессиях, не успевших завершиться полностью в момент создания архива (не имеющих метку stoptime). Такая сессия будет завершена в будущем и полная информация о ней попадет в архив, в котором она завершилась.

preacct {
        preprocess
        proxy_auth
        acct_counters64
        acct_unique
        acct_ciscoavpair

        # Parse common cisco-avp ('domain' for example)
        common_ciscoavpair
       rewrite_called_station_id

       if (${pcrf_enabled} == 0) {
           fill_ap_domain
           fill_ssid_security
       }

       files
}

Проксирование авторизации и аккаунтинга на группу сторонних RADIUS-серверов

...

Этот вариант требует значительной модификации конфигурационных файлов. Будет рассмотрено проксирование на 2 сторонних RADIUS-сервера, но предложенным методом можно масштабировать и далее.

Отредактировать /etc/eltex-radius/local.conf, добавив индивидуальные параметры host, port и secret для каждого из серверов, на которые осуществляется проксирование:

Блок кода
languageapplescript
themeRDark
# Proxying
proxy_auth=1
proxy_domain_regex="^(.+\.)?root$"

proxy1_host="10.10.10.11"
proxy1_port=1812
proxy1_secret="topsecret"

proxy2_host="10.10.10.12"
proxy2_port=1812
proxy2_secret="topsecret"

Согласно этим настройкам модифицировать /etc/eltex-radius/local.conf. Для каждого сервера должна быть добавлена и описана секция home_server с уникальным именем.

Все home_server должны быть добавлены в пул home_server_pool, который, в свою очередь, должен быть указан в realm auth_proxy. Так как проксировать предполагается и аккаунтинг, и авторизацию - параметр, указывающий на пул, должен называться pool.

Блок кода
languageapplescript
themeRDark
home_server auth_proxy1 {
        type = auth+acct
        ipaddr = "${proxy1_host}"
        port = "${proxy1_port}"
        secret = "${proxy1_secret}"

        response_window = 20

        #
        #  Start "zombie_period" after this many responses have
        #  timed out.
        #
#       response_timeouts = 1
        zombie_period = 40
        revive_interval = 120

        status_check = status-server
        check_interval = 30
        check_timeout = 4
        num_answers_to_alive = 3
        max_outstanding = 65536
}

home_server auth_proxy2 {
        type = auth+acct
        ipaddr = "${proxy2_host}"
        port = "${proxy2_port}"
        secret = "${proxy2_secret}"

        response_window = 20

        zombie_period = 40
        revive_interval = 120

        status_check = status-server
        check_interval = 30
        check_timeout = 4
        num_answers_to_alive = 3
        max_outstanding = 65536
}


home_server_pool auth_proxy_failover {
        type = fail-over
        home_server = auth_proxy1
        home_server = auth_proxy2
}

realm auth_proxy {
        pool = auth_proxy_failover
}

В файле /etc/eltex-radius/servers/default в секцию preacct после preprocess добавить строку proxy_auth, как описано в предыдущем разделе.

Информация

Приведенная конфигурация настраивает проксирвоание в режиме failover, что задается параметром type в секции home_server_pool. Также доступен режим балансировки нагрузки между серверами, о чем подробнее можно узнать по второй ссылке из раздела Источники.

Отключение проверки status-server встречного сервера

...

При работе проксирования по умолчанию работает механизм проверки статуса встречного сервера . Если до сервера, на который идет проксирование, пропала на некоторое время связь, а потом восстановилась, то требуется, чтобы этот сервер ответил на запрос status-server - только после этого проксирование возобновится.

В ходе эксплуатации может возникнуть ситуация, при которой встречный сервер не умеет отвечать на status-server, либо он не настроен должным образом. В таком случае, есть возможность отключить эту проверку на проксирующем сервере.

Для этого нужно внести следующие изменения в конфигурацию:

В файле /etc/eltex-radius/proxy.conf:
в разделе home_server auth_proxy установить:
                 значение status_check = none, по умолчанию выставлено status-server
                 значение revive_interval = 60,  по умолчанию 120

в разделе home_server_pool auth_proxy_failover установить:
                 значение type = fail-over, по умолчанию выставлено load-balance

После чего, необходимо перезапустить сервис командой: 

Блок кода
languagebash
themeRDark
service eltex-radius restart

В итоге: в случае прерывания связи между серверами, после восстановления связности сервис станет доступен в течении 60 секунд.

Источники

...

  1. https://wiki.freeradius.org/version4/upgrade/proxy
  2. https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x/raddb/proxy.conf