Active-Directory

SquidGuard 和 Active Directory:如何處理多個組?

  • May 3, 2015

我正在設置 SquidGuard (1.4) 以針對 Active Directory 域驗證使用者並根據組成員身份應用 ACL;這是我的 squidGuard.conf 的一個例子:

src AD_Group_A {
       ldapusersearch  ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_A%2cdc=domain%2cdc=com))
}

src AD_Group_B {
       ldapusersearch  ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_B%2cdc=domain%2cdc=com))
}

dest dest_a {
   domainlist  dest_a/domains
   urllist     dest_b/urls
   log     dest_a.log
}

dest dest_b {
   domainlist  dest_b/domains
   urllist     dest_b/urls
   log     dest_b.log
}

acl {
   AD_Group_A {
       pass    dest_a !dest_b all
       redirect http://some.url
   }

   AD_Group_B {
       pass    !dest_a dest_b all
       redirect http://some.url
   }

   default {
       pass    !dest_a !dest_b all
       redirect http://some.url
   }
}

如果使用者是 Group_AGroup_B 的成員,則一切正常。但如果使用者是BOTH組的成員,則僅評估第一個源規則,因此僅應用第一個 ACL。

我知道這是由於源規則匹配在 SquidGuard 中的工作方式(如果一個規則匹配,則評估停止在那裡,然後應用相關的 ACL);所以我也試過這個:

src AD_Group_A_B {
       ldapusersearch  ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_A%2cdc=domain%2cdc=com))
       ldapusersearch  ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_B%2cdc=domain%2cdc=com))
}

acl {
   AD_Group_A_B {
       pass    dest_a dest_b all
       redirect http://some.url
   }

   [...]
}

但這也不起作用:如果使用者是其中任何一個組的成員,則無論如何都會匹配整個源規則,因此他可以到達兩個目的地(這當然不是我想要的)。

到目前為止,我發現的唯一解決方案是在 AD 中創建一個THIRD組,並為其分配一個源規則和一個 ACL;但是這個設置隨著超過兩個或三個目標集呈指數增長。

有沒有辦法更好地處理這個問題?

解決了……部分。我完全忽略了這樣一個事實,即您可以向 LDAP 查詢添加另一個條件……因此檢查多個組的成員身份非常容易。

一些警告:

  • 仍然需要為每個可能的組組合定義 SquidGuard ACL
  • 您需要在 SquidGuard 配置中添加至少兩個其他指令:(ldapbinddn它定義了用於連接到 AD 的使用者名,並且您必須在此處使用使用者對象的 DN,而不是普通使用者名!)和ldapbindpass,它定義了使用者的密碼。
  • SquidGuard 需要在編譯時使用 LDAP 支持,預設情況下不編譯。

…但至少 AD 中的實際組可以保持在最低限度。

引用自:https://serverfault.com/questions/143369