У меня есть Радиус, работающий с AD + Google OTP, работает нормально. То, что я пытаюсь сделать сейчас, — это указать «пользователь-клиент-ADgroup» в политике и/или unlang в файле post-auth.
Как это работает сегодня:
- клиент выполняет запрос
- Radius отправляет первую половину пароля в AD
- Radius отправляет вторую половину пароля в Google OTP
- Если оба возвращаются хорошо, то авторизация прошла успешно
- Пост-аутентификация выполняет некоторую проверку, является ли пользователь членом ADgroup -> назначить класс -> принять
- ИЛИ, если не является частью ADgroup -› отклонить
В части, с которой мне нужна помощь, у меня более 30 сайтов с оборудованием на каждом. Мы различаем наших пользователей в зависимости от доступа к сайту. Например. NetworkAdmin01 имеет доступ к site01, но не к site02. Поэтому единственный способ, которым я могу думать об этом:
Каждый сайт имеет свой виртуальный сервер (VS)
У каждого клиента установлен атрибут виртуального сервера
В каждом VS есть unlang после аутентификации, например:
if (LDAP-Group == "NetworkAdmins_site01") { [do something] (update control, update reply, etc..) else reject
Эта установка потребует, чтобы на Radius работало более 30 VS, и это неуправляемо.
Если бы мне удалось запустить это в течение нескольких VS (разделенных в зависимости от поставщика оборудования), я хочу в пост-авторизации предоставить/назначить на основе;
if (%{client:shortname} =~ /regex/) #grab the portion of the variable between "." (site01)
if (LDAP-Group =~ /regex/) # grab the portion of the variable after last "_" (site01)
if (%{0} == %{1}) {
if (LDAP-Group == NetworkAdmins_site01) {
update reply {
Juniper-Local-User-Name := "admins_group"
}
}
else {
update control {
Auth-type := "Reject"
}
}
}
}
}