Авторизация через Radius на Mikrotik с подстановкой локальной группы

в 10:33, , рубрики: mikrotik, сетевое администрирование, системное администрирование, метки: , ,

Всем доброго дня! Я работаю начинающим сетевым администратором в крупной федеральной компании со смешанной сетью, cisco, mikrotik, juniper.
И вот однажды появилась следующая задача.

Исходные данные:

1. Есть региональный системный администратор, у которого в подчинении несколько системных администраторов. У каждого системного администратора есть РУ — региональный узел, где головными устройствами стоят 2 Mikrotik 1100ahx2 и cisco c3550, по магазинам — MikroTik RB751G-2HnD.
2. На каждом Микротике заведена локальная группа с именем, совпадающем с городом: Омск — OMS, Кемерово — KMR, с полными правами на Микротик.

Задача:

Сделать авторизацию регионального администратора через Radius только в пределах своей зоны ответственности, допустим OMS и KMR.

Задача есть, пробуем выполнять.
Настраиваем Radius на Микротике:

/radius add service=login address=10.0.x.10 secret=xxx disabled=no
/user aaa set use-radius=yes

Устанавливаем FreeRadius на Linux, у меня был Debian: apt-get install freeradius
У меня подсеть на Микротиках 172.16.0.0/12,
пишем в /etc/freeradius/clients.conf

client 172.16.0.0/12 {
secret = xxx
shortname = Network_Devices
}

Затем, не забываем /etc/freeradius/dictionary

VENDOR Mikrotik 14988

BEGIN-VENDOR Mikrotik

ATTRIBUTE Mikrotik-Recv-Limit 1 integer
ATTRIBUTE Mikrotik-Xmit-Limit 2 integer
ATTRIBUTE Mikrotik-Group 3 string
ATTRIBUTE Mikrotik-Wireless-Forward 4 integer
ATTRIBUTE Mikrotik-Wireless-Skip-Dot1x 5 integer
ATTRIBUTE Mikrotik-Wireless-Enc-Algo 6 integer
ATTRIBUTE Mikrotik-Wireless-Enc-Key 7 string
ATTRIBUTE Mikrotik-Rate-Limit 8 string
ATTRIBUTE Mikrotik-Realm 9 string
ATTRIBUTE Mikrotik-Host-IP 10 ipaddr
ATTRIBUTE Mikrotik-Mark-Id 11 string
ATTRIBUTE Mikrotik-Advertise-URL 12 string
ATTRIBUTE Mikrotik-Advertise-Interval 13 integer
ATTRIBUTE Mikrotik-Recv-Limit-Gigawords 14 integer
ATTRIBUTE Mikrotik-Xmit-Limit-Gigawords 15 integer
ATTRIBUTE Mikrotik-Wireless-PSK 16 string
ATTRIBUTE Mikrotik-Total-Limit 17 integer
ATTRIBUTE Mikrotik-Total-Limit-Gigawords 18 integer
ATTRIBUTE Mikrotik-Address-List 19 string
ATTRIBUTE Mikrotik-Wireless-MPKey 20 string
ATTRIBUTE Mikrotik-Wireless-Comment 21 string
ATTRIBUTE Mikrotik-Delegated-IPv6-Pool 22 string

# MikroTik Values

VALUE Mikrotik-Wireless-Enc-Algo No-encryption 0
VALUE Mikrotik-Wireless-Enc-Algo 40-bit-WEP 1
VALUE Mikrotik-Wireless-Enc-Algo 104-bit-WEP 2
VALUE Mikrotik-Wireless-Enc-Algo AES-CCM 3
VALUE Mikrotik-Wireless-Enc-Algo TKIP 4

END-VENDOR Mikrotik

Все, теперь нам нужно создать пользователя в /etc/freeradius/users:

regSA User-password :=12345
Auth-Type = CHAP,
Mikrotik-Group := OMS

Перезапускаем FreeRadius и пробуем зайти на омские Микротики. Все работает.
Авторизация через Radius на Mikrotik с подстановкой локальной группы
Но теперь пробуем зайти на кемеровские. Получаем группу read, с правами только на чтение. В чем дело? Смотрим лог на Микротике и видим:
Авторизация через Radius на Mikrotik с подстановкой локальной группы
В активных пользователях:
Авторизация через Radius на Mikrotik с подстановкой локальной группы
Ты забыл прописать группу для Кемерова, скажете вы. Прописываем:

regSA User-password :=12345
Auth-Type = CHAP,
Mikrotik-Group := OMS, KMR

Рестартим freeradius. Пробуем, получаем тоже самое. Получается, что для одного пользователя мы можем указать только одну группу. Потому что при авторизации всегда берется первая указанная. Тупик? Нет, пара часов гугла, исследование FreeRadius и нахожу выход.
В radiusd.conf есть обработчик post-auth, решаю попробовать использовать его.
Пишем:

post-auth {
if (User-Name == «regSA») { проверяем имя пользователя
if (NAS-IP-Address =~ /172.22.(2(2[4-9]|[3-4][0-9]|5[0-5])).([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))/) { и проверяем IP
update reply {
Mikrotik-Group := «OMS» если все сошлось, то выдаем микротику группу, которая на нем есть
}
}
if (NAS-IP-Address =~ /172.20.(6[4-9]|[7-8][0-9]|9[0-5]).([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))/) {
update reply {
Mikrotik-Group := «KMR»
}
}
}

} закрываем весь post-auth

NAS-IP-Address — это IP адрес с которого прилетает запрос на авторизацию. Используется регулярка, но так как я с ними на ВЫ, то использовал для генерации сайт www.analyticsmarket.com/freetools/ipregex
Теперь в /etc/freeradius/users: убираем группу, как абсолютно лишний для нас атрибут

regSA User-password :=12345
Auth-Type = CHAP

После рестарта FreeRadius понимаем, что у нас все работает, что на омские микротики регионал попадает с группой OMS, на кемеровские — с KMR.

Почему нельзя было в users поставить Mikrotik-Group := «full»? Можно было, но тогда региональный сисадмин получил доступ ко всем Микротикам по всей России, что конечно же нехорошо. Такие права есть только у избранных.

Автор: xyyx

Источник

Поделиться

* - обязательные к заполнению поля