В документе описывается создания дополнительного сервера доступа (Network Access Server - NAS) с его собственными правилами авторизации и аккаунтинга.
Базовый модуль авторизации **Auth.pm** (Abills/mysql/Auth.pm).
Базовый модуль аккаунтинга **Acct.pm** (Abills/mysql/Acct.pm).
Если у Вас появилась необходимость поменять правила авторизации или аккаунтинга для системы можно просто создать дополнительный NAS и применять к нему Ваши собственные правила авторизации или аккаунтинга.
Для примера создадим новый NAS **ppp_test**
* Для начала создадим модуль авторизации:
package Test_auth;
#Test Auth module
use strict;
use parent 'dbcore';
$VERSION = 7.00;
my $db;
my $CONF;
my $debug=0;
#****************************************
# Init
#****************************************
sub new {
my $class = shift;
($db, $CONF) = @_;
my $self = { };
bless($self, $class);
return $self;
}
#****************************************
# Auth function
#
# auth($RAD, $NAS)
# $RAD - Request Rad pairs
#
# $NAS - Nas information object
#
# Return $auth_code, Rad_pairs_hash_ref
# $auth_code
# 0 - Allow
# 1 - Deny
#****************************************
sub auth {
my $self = shift;
my ($RAD, $NAS, $attr)=@_;
#Response Rad pairs
my %RAD_PAIRS = (
'Framed-IP-Address' => '192.168.111.10'
);
return 0, \%RAD_PAIRS;
}
1 |
Модуль аккаунтинга можно взять уже имеющийся в системе и скопировать его в новый файл:
# cd Abills/mysql/
# cp Acct.pm Test_acct.pm
Открываем новые файлы и меняем названия пакетов:
**Test_acct.pm** в первой строке
package Acct;
меняем на
package Test_acct;
После этого добавляем в config.pl
Описание сервера:
$conf{nas_servers} = {
'test_nas' => 'PPP test NAS server'
}; |
Правила авторизации после строки %AUTH = ();
%AUTH = ();
$AUTH{test_nas} = 'Test_auth'; |
Правила аккаунтинга после строки %ACCT = ();
%ACCT = ();
$ACCT{test_nas} = 'Test_acct'; |
Все новый NAS сервер создан
После этого можно вносить любые изменения в Ваши новые модули для авторизации или аккаунтинга
Для сброса сессий нового сервера доступа нужно добавить файл работы с сервером доступа в каталог /usr/abills/libexec/nas. Название файла должно совпадать с названием типа сервера доступа.
Пример файла обработки сброса сессии
#
# Example nas hangup
#
sub hangup_dell {
my ($NAS, $PORT, $attr) = @_;
print "Hangup!!!!\n";
return 0;
}
1 |
Атворизации
cd /usr/abills/libexec ./radtest.sh auth -rad |
результат
Sent Access-Request Id 59 from 0.0.0.0:18393 to 127.0.0.1:1812 length 74
User-Name = "test"
User-Password = "123456"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1
Message-Authenticator = 0x00
Cleartext-Password = "123456"
Received Access-Accept Id 59 from 127.0.0.1:1812 to 0.0.0.0:18393 length 69
Mikrotik-Rate-Limit = "64k"
Session-Timeout = 1420276
Mikrotik-Address-List = "CUSTOM_SPEED"
Acct-Interim-Interval = 90
Framed-IP-Address = 192.168.1.87
|
Акаунтинга
cd /usr/abills/libexec ./radtest.sh acct Start -rad |
Тестирование с собственным файлом пар авторизации
Service-Type = Framed-User
Framed-Protocol = PPP
NAS-Port = 11
NAS-Port-Type = Virtual
User-Name = "test"
Calling-Station-Id = "192.168.1.2"
Called-Station-Id = "192.168.1.60"
CHAP-Challenge = 0x8f9bfc69494cee7d4c96f775e4a8eae6
CHAP-Password = 0x01d32129dcd05f58901364e1cb200fb47d
NAS-Identifier = "MikroTik"
NAS-IP-Address = 192.168.1.60
|
Запуск команды
./radtest.sh auth -rad -rad_file auth.mikrotik |
Проверить получение запроса можно через дебаг радиуса
radiusd -X |