Project

General

Profile

Модуль Управления коммутационным оборудованием по протоколу RADIUS » History » Version 4

Maxim Mamontov, 10/15/2015 08:52 AM
Комментарий по добавлению словарей аттрибутов во FReeRADIUS.

1 1 Vladimir Pavljuchenkov
h1. Модуль Управления коммутационным оборудованием по протоколу RADIUS
2
3
Модуль должен иметь возможность предоставлять функционал для реализации управления коммутационным оборудованием по протоколу RADIUS, посредством взаимодействия с коммутационным оборудованием.
4
Для этого модуль должен предоставлять возможности:
5
* взаимодействия с RADIUS-серверами, как промежуточным звеном, между ACP и коммутационным оборудованием
6
* получения от RADIUS-серверов информации, необходимой для идентификации Абонента (MAC-адрес Абонента, IP-адрес коммутационного оборудования, к которому подключен Абонент, пароль Абонента)
7
* предоставления RADIUS-серверам информации, необходимой для аутентификации, авторизации и аккаунтинга (ААА) посредством коммутационного оборудования
8
9
Модуль должен реализовывать возможности ААА для следующих технологий:
10
* MAC-Based Access Control / MAC Address Authentication
11
* IGMP Access Control
12
* -802.1X-
13
14
h2. API
15
16
Взаимодействие между сервером RADIUS и АСР происходит посредством _Программного интерфейса (API)_, который представляет из себя клиент-серверное взаимодействие посредством "JSON":http://en.wikipedia.org/wiki/JSON.
17
Взаимодействие между сервером RADIUS и коммутационным оборудованием происходит посредством протокола RADIUS в реализации сервера "FreeRADIUS":http://freeradius.org/ с использованием модуля rlm_stg, к этому серверу.
18
19
h2. MAC-Based Access Control / MAC Address Authentication
20
21
Реализация MAC-Based Access Control / MAC Address Authentication (MBA/MAA) происходит посредством получения RADIUS-сервером от коммутационного оборудования информации, необходимой для аутентификации Абонента, и получением от АСР,
22
информации необходимой для авторизации Абонента.
23
Суть технологии в назначении VLAN ID, 802.1p приоритета и bandwidth assignment на основе MAC адреса посредством взаимодействия коммутационного оборудования с ACP.
24
25
*MAC-Based Access Control*
26
27
В коммутаторах D-Link реализовано два режима работы MBA — _port-based_ и _host-based_. Режим _port-based_ работает в отношении порта коммутатора (аутентифицируется и авторизуется весь порт целиком), _host-based_ работает в отношении конкретного MAC адреса (аутентифицируется и авторизуется конкретный MAC адрес).
28
При _port-based_ режиме работают все возможности управления (назначение VLAN, указание 802.1p метки и bandwidth assigment для трафика).
29
При _host-based_ работает только управлением VLAN ID. Указание 802.1p не работает так приоритет задается для всего порта, а bandwidth assigment не работает, так как полисер работает на уровне порта.
30
31
Технология поддерживает Guest VLAN, при которой неизвестный для ACP/коммутатора MAC адрес помещается в отдельный VLAN.
32
33
Также на коммутаторах реализован failover. В случае если RADIUS-сервер недоступен и на коммутаторе есть информация о MAC адресе, может быть использована локальная БД коммутатора для аутентификации и авторизации абонента.
34
При использовании failover'а нужно держать локальную базу коммутатора синхронизированной с базой ACP (посредством SNMP).
35
36
Информация о MAC адресах может быть получена, как от ACP через RADIUS, так и из локальной БД на самом коммутаторе.
37
При аутентификации/авторизации через локальную БД коммутатора на его порту не может быть более 128 записей о MAC адресах для каждого порта коммутатора, то есть всего 128 х количество портов коммутатора.
38
При аутентификации/авторизации через RADIUS на порту коммутатора не может быть больше 512 записей о MAC адресах. В случае использование failover - не более 128, так как при превышении количества записей о MAC адресах для локальной БД следует разсинхронизация.
39
40
Реализация MBA поддерживает настраиваемые таймауты:
41
* Aging Time — это таймаут, в течении которого MAC адрес считается авторизированным. Диапазон значений: 1-1440 минут, шаг: 1 минута
42
* Hold Time — это таймаут, между двумя авторизациями, в случае если предыдущая была не успешной. По сути это таймаут, через который MAC адрес сможет выйти из Guest VLAN. Диапазон значений: 1-300 секунд, шаг: 1 секунда
43
44
Отдельно стоит отметить, что абоненты, находящиеся в одном порту коммутатора, могут находится в разных VLAN.
45
46
!>https://fouzes.com.ua/redmine/attachments/32/mba.png!
47
48
*Аутентификация.*
49
При появлении MAC-адреса Абонента на коммутационном оборудовании на RADIUS-сервер придет запрос, содержащий MAC адрес Абонента, пароль (единый для коммутатора) и IP-адрес коммутационного оборудования:
50
> Access-Request packet from host 172.18.6.253 port 8021, id=212, length=97
51
> 	User-Name = "64315095FAF8" (MAC адрес Абонента)
52
> 	User-Password = "default" (пароль)
53
> 	NAS-IP-Address = 172.18.6.253 (IP-адрес коммутационного оборудования)
54
> 	NAS-Identifier = "D-Link"
55
> 	NAS-Port-Type = Virtual
56
> 	Service-Type = NAS-Prompt-User
57
> 	Calling-Station-Id = "64-31-50-95-FA-F8"
58
59
+MAC-адрес Абонента+ - это MAC-адрес сетевого оборудования Абонента, посредством которого ему оказывается Услуга.
60
+Пароль Абонента+ — условный момент, необходимый для реализации взаимодействия между коммутационным оборудованием и RADIUS-сервером по протоколу RADIUS.
61
Пароль будет единым для всех Абонентов, получающих Услугу через одно и тоже коммутационное оборудование.
62
Максимально возможная длина пароля — 16 символов.
63
+IP-адрес коммутационного оборудования+ — IP-адрес, с которого придет запрос на RADIUS-сервер.
64
65
*Авторизация.*
66
После получения запроса от коммутационного оборудования RADIUS-сервер должен предоставить полученную им информацию ACР, которая должна на основе этой информации:
67
* однозначно идентифицировать Абонента
68
* принять решение о возможности (или ее отсутствии) предоставить Абоненту Услугу на основе финансовой, административной, либо другой информации, доступной АСР
69
70
Далее АСР должна предоставить RADIUS-серверу информацию в какой VLAN следует поместить Абонента для предоставления Услуги (в случае если ее можно предоставить), или 
71
предоставить RADIUS-серверу информацию, что Услуга не может быть оказана (в случае если Услугу нельзя предоставить)
72
73
RADIUS-сервер, после получения от АСР информации, должен ответить на запрос, пришедший ранее с коммутационного оборудования, вставив в ответ информацию о VLAN Абонента
74
(в случае, когда Услуга должна быть Абоненту оказана), либо отказать в аутентификации на коммутационном оборудовании Абоненту.
75
> Access-Accept of id 34 to 172.18.6.253 port 8021
76
> 	Dlink-Ingress-Bandwidth-Assignment := 2000
77
> 	Dlink-Egress-Bandwidth-Assignment := 3000
78
>       Dlink-VLAN-ID := "4005"
79
> 	802-1p = 5
80
81
В случае успешной аутентификации и авторизации, Абонент будет аутентифирован на коммутационном оборудовании и авторизирован (помещен во VLAN _(Dlink-VLAN-ID)_, в котором ему будет оказана Услуга), а также, опционально, на порт коммутационного оборудования, куда подключен Абонент, будет назначен соответствующий приоритет _(802-1p)_ для исходящих из порта пакетов _(802.1p)_ и ограничение входящей _(Dlink-Ingress-Bandwidth-Assignment)_ и исходящей _(Dlink-Egress-Bandwidth-Assignment)_ скорости _(Bandwidth Control)_.
82
В случае не успешной аутентификации, Абонент не будет аутентифицирован на коммутационном оборудовании и, соответственно, будет не авторизован (помещен в Гостевой VLAN, в котором ему будет доступна только Парковая страница).
83
84
*Конфигурация.*
85
Пример настройки FreeRADIUS-сервера:
86
<pre>
87
192.168.5.3 modules # cat stg
88
stg {
89
       address = unix:/var/run/stg.sock
90
}
91
92
93
192.168.5.3 raddb # cat dictionary
94
#(TODO: Edge-Core, вроде он использует словарь Cisco - проверить)
95
96
97
freeradius # cat dictionary.edge-core?
98
</pre>
99 4 Maxim Mamontov
100
FreeRADIUS автоматически не загружает все доступные словари, они должны быть явно подключены с помощью директивы $INCLUDE. Например:
101
102
<pre>
103
root@temp-laptop:~# grep dlink /usr/share/freeradius/dictionary
104
$INCLUDE dictionary.dlink
105
</pre>
106
107 1 Vladimir Pavljuchenkov
_address = 192.168.5.160_ - IP адрес ACP
108
_port = 9090_ - порт, для взаимодействия между RADIUS сервером и ACP посредством Apache Thrift
109
110
* для динамических клиентов
111
<pre>
112
192.168.5.3 sites-enabled # cat clients
113
# Define a network where clients may be dynamically defined.
114
client dynamic {
115
        ipaddr = 10.0.0.0 # IP Adress
116
        netmask = 24 # Netmask. /32 for IPv4 is prohibited.
117
        lifetime = 0 # Lifetime is "0", the dynamic client is never deleted. Restart server to delete client.
118
        dynamic_clients = isp_server # Define the virtual server used to discover dynamic clients.
119
}
120
121
authorize {
122
        isp
123
        pap
124
}
125
126
authenticate {
127
        isp
128
        pap
129
}
130
131
post-auth {
132
        isp
133
}
134
135
preacct {
136
        isp
137
}
138
139
accounting {
140
        isp
141
}
142
143
# This is the virtual server referenced above by "dynamic_clients".
144
server isp_server {
145
        authorize { # The only contents of the virtual server is the "authorize" section.
146
                update control {
147
                        FreeRADIUS-Client-IP-Address = "%{Packet-Src-IP-Address}" # Echo the IP address of the client.
148
                        FreeRADIUS-Client-Require-MA = no # require_message_authenticator
149
                        FreeRADIUS-Client-Secret = "test" # secret
150
                        FreeRADIUS-Client-Shortname = "%{Packet-Src-IP-Address}" # shortname
151
                        FreeRADIUS-Client-NAS-Type = "other" # nastype
152
                }
153
                #Client was defined properly. New client is ignored, if does NOT return "ok".
154
                ok
155
        }
156
}
157
</pre>
158
_ipaddr = 10.0.0._0 и _netmask = 24_ - адресное пространство коммутаторов
159
160 3 Maxim Mamontov
Параметр FreeRADIUS-Client-Secret называется shared secret. С помощью него шифруется секретная информация при коммуникации с клиентом, в частности — User-Password. Если значение этого поля не совпадает с тем что использовано в клиенте в User-Password на приемной стороне будет мусор.
161
162
Модуль типа аутентификации (PAP/CHAP/etc.) нужно подключать после модуля isp в секциях authorize и authenticate. В секции authorize он по полученному от isp Cleartext-Password установит аттрибут Auth-Type, который в секции authenticate будет использован для корректной проверки пароля.
163 1 Vladimir Pavljuchenkov
164
* для статических клиентов
165
<pre>
166
TODO
167
</pre>
168
169
Пример настройки коммутационного оборудования:
170
171
* D-Link
172
<pre>
173
# RADIUS
174
config radius add 1 192.168.5.3 key test
175
176
# MAC-based_Access_Control
177
178
enable mac_based_access_control
179
config mac_based_access_control authorization attributes radius enable
180
create mac_based_access_control guest_vlanid <VLANID>
181
config mac_based_access_control guest_vlan ports <PORTS RANGE>
182
config mac_based_access_control ports <PORTS RANGE> state enable
183
config mac_based_access_control ports <PORTS RANGE> state disable
184
config mac_based_access_control ports <PORTS RANGE> max_users 128
185
config mac_based_access_control ports <PORTS RANGE> aging_time 1440
186
config mac_based_access_control ports <PORTS RANGE> block_time 300
187
config mac_based_access_control ports <PORTS RANGE> mode <host_based/port_based>
188
config mac_based_access_control method radius
189
config mac_based_access_control password default
190
</pre>
191
Замечание: Все VLAN'ы, в которых должны оказаться абоненты в случае успешной авторизации, должны быть заранее созданы на коммутаторе, т.к. реализация MBA у D-Link не создает VLAN'ы, а лишь назначает их на порты.
192
VLAN'ы на портах могут быть трех состояниях: _trunk_ - VLAN выдан с тегом, _access_ - VLAN выдан без тега, _forbidden_ - VLAN не может быть выдан на этот порт
193
194
* Edge-Core
195
<pre>
196
TODO
197
Пока что положу это тут
198
"IGMP Access у него нет, реализация MBA не подразумевает port-based режим, зато есть фишечка сo static mac-address, они авторизованы по умолчанию.
199
Ну и более богатые настройки через RADIUS, можно не только rate limit и 802.1p, но и QoS политику повесить на порт, и назначить кучу вланов, указав как именно выданы на порт."
200
</pre>
201
202
h2. IGMP Access Control
203
204
Реализация IGMP Access Control происходит посредством получения RADIUS-сервером от коммутационного оборудования информации, необходимой для аутентификации запроса подписки на IGMP-группу, и последующего аккаутинга этой подписки в случае успешной аутентификации.
205
206
*Аутентификация.*
207
При появлении IGMP пакета на коммутационном оборудовании на RADIUS-сервер придет запрос, содержащий MAC-адрес Абонента, пароль Абонента и IP-адрес коммутационного оборудования, номер порта коммутационного оборудования, IP-адрес IGMP-группы:
208
> Access-Request packet from host 172.16.37.131 port 4973, id=101, length=103
209
> 	User-Name = "5404A65C4A7D"
210
> 	User-Password = "5404A65C4A7D"
211
> 	NAS-IP-Address = 172.16.37.131
212
> 	NAS-Identifier = "172.16.37.131"
213
> 	NAS-Port-Type = Virtual
214
> 	Service-Type = Framed-User
215
> 	Framed-Protocol = PPP
216
> 	NAS-Port = 5
217
> 	Framed-IP-Address = 239.0.0.21
218
219
+MAC адрес Абонента+ - это MAC адрес сетевого оборудования Абонента, посредством которого ему оказывается Услуга.
220
+Пароль Абонента+ — условный момент, необходимый для реализации взаимодействия между коммутационным оборудованием и RADIUS-сервером по протоколу RADIUS.
221
Пароль соответствует MAC-адресу Абонента.
222
+IP-адрес коммутационного оборудования+ — IP-адрес, с которого придет запрос на RADIUS-сервер.
223
+Порт коммутационного оборудования+ — порт, куда включен Абонент.
224
IP-адрес IGMP-группы — IP-адрес канала, который хочет просмотреть (на который хочется подписаться) Абонент.
225
226
На основе ответа от RADIUS-сервера Абоненту будет отказано в подписке на IGMP-группу, либо Абонент будет подписан на нее.
227
228
*Аккаунтинг.*
229
230
В случае успешной аутентификации, Абонент будет подписан на IGMP-группу, (продолжен после того, как поднимется форум Длинка :)) Что характерно форум Длинка опять лежит =)))
231
232
h2. Developer notes
233
234
h3. Things to watch out
235
236
API FreeRADIUS ветки 2.x.x зависит от наличия/отсутствия NDEBUG:
237
<pre>
238
struct auth_req {                                                               
239
#ifndef NDEBUG                                                                  
240
        uint32_t                magic; /* for debugging only */                 
241
#endif                                                                          
242
        RADIUS_PACKET           packet; 
243
</pre>
244 2 Maxim Mamontov
245
radiusd в „боевом“ режиме сперва инстанцирует и инициализирует все модули, потом форкается. Если модуль при инициализации создает нить — нить умирает при форке вместе с родителем. По этому все нити нужно создавать on-demand.