Всем доброго дня! Я работаю начинающим сетевым администратором в крупной федеральной компании со смешанной сетью, 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 и пробуем зайти на омские Микротики. Все работает.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/e76/f28/a14/e76f28a1443111ac1f3c3ba2deb65be2.png)
Но теперь пробуем зайти на кемеровские. Получаем группу read, с правами только на чтение. В чем дело? Смотрим лог на Микротике и видим:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/71e/e57/00b/71ee5700b03d58b86ccbc3049b37d480.png)
В активных пользователях:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/807/6aa/991/8076aa991311b9de4ab51022ab8b9031.png)
Ты забыл прописать группу для Кемерова, скажете вы. Прописываем:
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»? Можно было, но тогда региональный сисадмин получил доступ ко всем Микротикам по всей России, что конечно же нехорошо. Такие права есть только у избранных.
И вот однажды появилась следующая задача.
Исходные данные:
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 и пробуем зайти на омские Микротики. Все работает.
![](https://habrastorage.org/getpro/habr/post_images/e76/f28/a14/e76f28a1443111ac1f3c3ba2deb65be2.png)
Но теперь пробуем зайти на кемеровские. Получаем группу read, с правами только на чтение. В чем дело? Смотрим лог на Микротике и видим:
![](https://habrastorage.org/getpro/habr/post_images/71e/e57/00b/71ee5700b03d58b86ccbc3049b37d480.png)
В активных пользователях:
![](https://habrastorage.org/getpro/habr/post_images/807/6aa/991/8076aa991311b9de4ab51022ab8b9031.png)
Ты забыл прописать группу для Кемерова, скажете вы. Прописываем:
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»? Можно было, но тогда региональный сисадмин получил доступ ко всем Микротикам по всей России, что конечно же нехорошо. Такие права есть только у избранных.