This is an old revision of the document!
Настройка атрибутов на основе LDAP (Active Directory) групп
На основе принадлежности пользователей к определенным группам AD - удобно раздавать сетевые правила доступа. При этом, в роли NPS Windows Server - решить данную задачу гибко не получится.
Политики NPS работают по принципу “first match”, т.е. мы не сможем суммировать правила для пользователя, состоящего в нескольких разных группах одновременно, ведь сработает только первое совпадение по группам.
Настройка LDAP во freeradius позволяет решить эту проблему достаточно гибко и безопасно. Для этого в данном примере мы будем использовать LDAPS и учётную запись с ограниченными правами в домене AD.
1. Устанавливаем модуль freeradius для работы с LDAP.
sudo apt install freeradius-ldap
2. Подключаем конфиг модуля из доступных модулей в используемые через симлинк.
ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/ldap
3. Дальнейшую конфигурацию мы будем производить в файле /etc/freeradius/3.0/mods-enabled/ldap.
4. Пропишем адрес контроллера домена следующим образом:
server = 'ldaps://dc01.arasaka.local:636'
Здесь можно указать адреса и других контроллеров домена, перечислив в отдельной секции server:
server = 'ldaps://dc02.arasaka.local:636'
Опцию port конфига исплользовать не нужно, т.к. он указан явно в опции server.
5. Настроим учётную запись, под которой будем подключаться к контроллеру домена.
identity = 'CN=vpn radius,OU=RADIUS,DC=office,DC=innoseti,DC=ru' password = mypassword
Важно: имя учётной записи (vpn radius) - это не логин пользователя в AD, а его CN, который можно посмотреть в свойствах учётной записи на вкладке Attribute Editor.
6. Настроим базовое пространство домена, откуда будет производиться дальнейший поиск:
base_dn = 'DC=arasaka,DC=local'
7. В секции “User object identifiication” изменим фильтр таким образом, чтобы он соответствовал фильтру AD, где используется аттрибут sAMAccountName, а не юниксовый uid.
filter = "(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})"
8. В секции “User membership checking” укажем OU домена AD, в котором будем искать группы для правил.
base_dn = 'CN=RADIUS,DC=office,DC=arasaka,DC=local'
9. В этой же секции поменяем аттрибут группы на group вместо юниксового posixGroup.
filter = '(objectClass=group)'
10. Раскомментируем опцию отличающего аттрибута группы:
name_attribute = cn
11. Раскомментируем опцию фильтра членства:
membership_filter = "(|(member=%{control:${..user_dn}})(memberUid=%{%{Stripped-User-Name}:-%{User-Name}}))"
12. Раскомментируем опцию аттрибута членства:
membership_attribute = 'memberOf'
13. Запретим кешироование имен и резрешим кеширование DN:
cacheable_name = 'no' cacheable_dn = 'yes'
14. Изменим стандартный аттрибут кеширования, раскомментировав строку:
cache_attribute = 'LDAP-Cached-Membership'
15. Для совместимости с AD обязательно оставим две опции (раскомментированы по умолчанию)
chase_referrals = yes rebind = yes
16. В секции tls отключаем starttls, т.к. он нужен только в случае использования tls поверх 389 порта, что в нашем случае не релевантно, поскольку мы используем SSL по 636.
start_tls = no
17. В этой же секции указываем путь к сертификату корневого УЦ, который выдал сертификат LDAPS серверам (контроллерам домена), а также путь к папке с сертификатами.
ca_file = ${certdir}/CA1.pem ca_path = ${certdir}
В папку /etc/freeradius/3.0/certs необходимо залить сертификат УЦ, а также сертификаты контроллером домена в pem-формате.
Выгрузить сертификаты в pem-формате можно следующим образом: из хранилища сертификатов сделать экспорт, при экспорте выбрать Base-64 encoded X.509 (.CER). После выгрузки можно просто переименовать сертиификат в pem.