User Tools

Site Tools


настройка_атрибутов_на_основе_ldap_ad_групп

Настройка атрибутов на основе 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. Дальнейшую конфигурацию (вплоть до п.18) мы будем производить в файле /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=arasaka,DC=local'
  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-формате можно следующим образом: из хранилища сертификатов Windows сделать экспорт, при экспорте выбрать “Base-64 encoded X.509 (.CER)”. После выгрузки можно просто переименовать расширение сертиификата в pem.

18. Теперь в файле /etc/freeradius/3.0/sites-enabled/default в секции post-auth можно писать правила, которые будут суммировать списки доступа на основании членства в группах (“test-network”, “management-network” и т.д.), используя аттрибут LDAP-Group:

if (&LDAP-Group[*] == "test-network") {
   update reply {
      Cisco-AVPair += "route=10.100.0.0 255.255.255.0",
      Cisco-AVPair += "route=10.101.0.0 255.255.255.0",
      Cisco-AVPair += "route=10.102.0.0 255.255.255.0",
}

if (&LDAP-Group[*] == "management-network") {
   update reply {
      Cisco-AVPair += "ip:inacl#93=permit ip any any"
      Cisco-AVPair += "route=0.0.0.0 0.0.0.0",
      }
}

19. Данную схему удобно использовать, к примеру, для раздачи доступов пользователям OpenVPN.

В pfSense проверить проверить добавление правил можно использовав пункт меню status→openvpn. Кликнув на информацию о сеансе - можно увидеть правла, если всё сделано верно.

настройка_атрибутов_на_основе_ldap_ad_групп.txt · Last modified: 2024/11/01 10:29 by jp