我正在设置SquidGuard(1.4),以针对Active Directory域validation用户,并根据组成员资格应用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_A 或 Group_B的成员,则一切正常。 但是,如果用户是两个组的成员,则只评估第一个源规则,因此仅应用第一个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 } [...] }
但是这也不起作用:如果用户是这些组中的任何一个的成员,则整个源规则无论如何都是匹配的,所以他可以到达两个目的地(这当然不是我想要的)。
我发现的唯一解决scheme是在AD中创build一个THIRD组,并为其分配一个源规则和一个ACL; 但是这种设置随着两个或三个目的地集合的指数增长而增长。
有没有办法更好地处理这个问题?
解决…部分。 我完全忽略了这样一个事实,即您可以向LDAP查询添加另一个条件…因此,检查多个组的成员资格是相当容易的。
一些注意事项:
ldapbinddn (定义用于连接到AD的用户名,并且您必须使用用户对象的DN,而不是普通用户名!)和ldapbindpass定义用户的密码。 …但至less在AD的实际群体可以保持在最低限度。