Настройка авторизации подписки на мультикаст потоки через radius.

Некоторые свичти d-link умеют ограничивать доступ ползователей к мультикаст потокам. Авторизация происходит через радиус сервер. Опишу как это настроить.

Настройка свитча.
У меня под рукой был DGS-3200-10. Настройка на нем не отличается от большинства других моделей этого вендора: 3028,3026,3016,3010, 3528, etc.
Создаем радиус сервер на свитче:
config radius add 1 x.x.x.x key 123 default
Command: show radius

Index 1
IP Address : x.x.x.x
Auth-Port : 1812
Acct-Port : 1813
Timeout : 5
Retransmit : 2
Key : 123

DGS-3200-10:4#
Включаем авторизацию igmp на нужных нам портах:
config igmp access_authentication ports 1 state enable
Проверяем
DGS-3200-10:4#show igmp access_authentication ports all
Command: show igmp access_authentication ports all

Port Authentication State
------ ---------------------
1 Enabled
2 Disabled
3 Disabled
4 Disabled
5 Disabled
6 Disabled
7 Disabled
8 Disabled
9 Disabled
10 Disabled

DGS-3200-10:4#
Это всё что нужно сделать со свитчем.

Radius
Сервер будет брать конфиги для авторизации пользователей из файла, а логи писать в mysql базу.
Ставим вот этот порт: /usr/ports/net/freeradius2
Настраиваем.

radiusd.conf

[root@mon /usr/local/etc/raddb]# cat -s radiusd.conf | grep -v "#"

prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = /var/log
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
name = radiusd

confdir = ${raddbdir}
run_dir = ${localstatedir}/run/${name}

db_dir = ${raddbdir}

libdir = /usr/local/lib/freeradius-2.1.9

pidfile = ${run_dir}/${name}.pid

user = freeradius
group = freeradius

max_request_time = 30

cleanup_delay = 5

max_requests = 1024

listen {
type = auth

ipaddr = *

port = 0

}

listen {
ipaddr = *
port = 0
type = acct
}

hostname_lookups = no

allow_core_dumps = no

regular_expressions = yes
extended_expressions = yes

log {
destination = files

file = ${logdir}/radius.log

syslog_facility = daemon

stripped_names = yes

auth = yes

auth_badpass = yes
auth_goodpass = yes
}

checkrad = ${sbindir}/checkrad

security {
max_attributes = 200

reject_delay = 1

status_server = yes
}

proxy_requests = no
$INCLUDE proxy.conf

$INCLUDE clients.conf

thread pool {
start_servers = 5

max_servers = 32

min_spare_servers = 3
max_spare_servers = 10

max_requests_per_server = 0
}

modules {

$INCLUDE ${confdir}/modules/

$INCLUDE eap.conf

$INCLUDE sql.conf

$INCLUDE sql/mysql/counter.conf
}

instantiate {
exec

expr

expiration
logintime

}

$INCLUDE policy.conf

$INCLUDE sites-enabled/

[root@mon /usr/local/etc/raddb]#
Подключение конфига mysql: $INCLUDE sql.conf

sql.conf
[root@mon /usr/local/etc/raddb]# cat -s sql.conf | grep -v "#"
sql {
database = "mysql"
driver = "rlm_sql_${database}"
server = "localhost"
port = 3306
login = "radius"
password = "mypass"
radius_db = "radius"
acct_table1 = "radacct"
acct_table2 = "radacct"
postauth_table = "radpostauth"
authcheck_table = "radcheck"
authreply_table = "radreply"
groupcheck_table = "radgroupcheck"
groupreply_table = "radgroupreply"
usergroup_table = "radusergroup"
deletestalesessions = yes
sqltrace = yes
sqltracefile = ${logdir}/sqltrace.sql
num_sql_socks = 5
connect_failure_retry_delay = 60
lifetime = 0
max_queries = 0
nas_table = "nas"

$INCLUDE sql/${database}/dialup.conf

}

Здесь нужно настроить параметры подключения к базе и имена таблиц. Для ведения логов(здесь и далее это зовется аккаунтинг) используется таблица “radacct”.
Последней строчкой инклюдится файл где лежат шаблоны sql запросов к базе.
Я его не трогал, меня там всё утраивает.

Создание mysql таблиц в базе данных radius:
/usr/local/etc/raddb/sql/mysql/schema.sql

sites-enabled
Действия при авторизации, аккаунтинге и пр. описываются здесь:
[root@mon /usr/local/etc/raddb/sites-enabled]# cat -s default | grep -v "#"
authorize {

auth_log
files
pap
}

authenticate {
Auth-Type PAP {
pap
}

Auth-Type CHAP {
chap
}

Auth-Type MS-CHAP {
mschap
}

unix
eap
}

preacct {
preprocess
acct_unique
}

accounting {
sql
attr_filter.accounting_response
}

session {

}

post-auth {
exec
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}

pre-proxy {
}

post-proxy {
eap
}

В разделе authorize указываем files – данные для авторизации будут браться из файла /usr/local/etc/raddb/users. В разделе accounting указываем sql – данные аккаунтинга будут записываться в базу данных.

users
Свитч передает радиусу следующие параметры:
User-Name = "0019FDCA3456" //мак пользователя
NAS-IP-Address = x.x.x.x //ip свитча
Acct-Session-Id = "efc3000e1"
NAS-Identifier = "D-Link"
NAS-Port-Type = Virtual
Service-Type = Framed-User
Framed-Protocol = PPP
NAS-Port = 1 // номер порта пользоваетля
Framed-IP-Address = 239.195.0.14 // ip мультикаст группы на которую подписывается пользователь
Acct-Status-Type = Start

Синтаксис файла users для авторизации пользователей:
[root@mon /usr/local/etc/raddb]# cat users
0019FDCA3455 Cleartext-Password := "0019FDCA3456", NAS-Port == 1, Framed-IP-Address =~ "239.195.[02].*", NAS-IP-Address == "10.10.10.6"
0019FDCA3457 Cleartext-Password := "0019FDCA3457", NAS-Port == 2, Framed-IP-Address =~ "239.195.[02].*", NAS-IP-Address == "10.10.10.6"
DEFAULT Auth-Type := Reject

Framed-IP-Address =~ “239.195.[02].*” – это regexp который позволяет подписаться на следующие мультикаст группы:
239.195.0.0/24, 239.195.2.0/24.
Последняя строчка – действие по умолчанию. В данном случае – отказ.
Важно, чтобы каждый пользователь был записан в одной строке файла.

clients.conf
В этом файле описываются клиенты радиус сервера. В нашем случае свитчи.
[root@mon /usr/local/etc/raddb]# cat -s clients.conf | grep -v "#"

client 10.0.0.0/8 {
secret = 123
nastype = other
shortname = D-link
}

[root@mon /usr/local/etc/raddb]#
Здесь нужно указать подсеть свитчей и ключ авторизации secret.

Всё, теперь запускаем radiusd -X и отлаживаемся. Когда отладка закончится, в rc.conf на додобавить строчку radiusd_enable="YES" для автоматического запуска службы.

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s