Teh Hermit
Trace: • установка_подписи • настройка_атрибутов_на_основе_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. Кликнув на информацию о сеансе - можно увидеть правла, если всё сделано верно.

Debian, Linux, freeradius, NPS, LDAP, pfSense, ActiveDirectory
Previous Next

Teh Hermit

Table of Contents

  

Microsoft

  Active Directory
  Active Directory Certificate Services
  Active Directory Federation Services
  BitLocker
  Terminal Services
  HYPER-V
  Exchange
  Internet Information Services (IIS)
  Storage Spaces Direct
  WSUS
  Windows Server
  Windows Server Core
  Windows
  Windows Admin Center
  Windows Backup
  Windows Firewall
  Windows 11
  Microsoft Office
  IPAM
  NPS и RADIUS
  Office Online
  Microsoft SQL Server
  Microsoft Endpoint Configuration Manager
  PowerShell
  KMS-активация

Unix-like

  Astra Linux
  Asterisk и FreePBX
  SQUID
  Debian
  CentOS
  Ubuntu Server + Desktop
  pfSense
  PostgreSQL
  SSH
  OpenSSL
  Zabbix

  

Hardware

  Keychron
  WakeOnLan
  Серверы HP
  Серверы SNR
  Настройка планшетов Handheld

  

Networking

  Cisco
  D-Link
  Mikrotik
  Keenetic

  

Other

  1С
  Docker
  DokuWiki
  Ghost Blog
  GoodbyeDPI
  Graylog
  VMWare
  ProxMox
  PrivateBin
  Outline VPN
  Wireguard
  Российская криптография
  Р-Виртуализация
  Kaspersky
  FileZilla ftp-сервер
  Soti MobiControl
  SysInternals
  VeraCrypt
  Non-Sucking Service Manager
  NMAP

     

DevOps

  Git
  Gitlab