SquidGuard和Active Directory组

我正在configuration一个使用Squid和SquidGuard的Linux代理来过滤Internetstream量。

我知道如何在Squid中对Active Directory进行身份validation,然后如何使用SquidGuard过滤用户的访问权限。

问题:如何在SquidGuard中使用Active Directory组而不是纯粹的用户名?

我的目标是能够configuration像“这个组的成员可以去任何地方”或“这个组的成员只能访问某些网站”的规则。

我知道SquidGuard不能直接pipe理组成员,但可以自己进行LDAPsearch; 但是查询用户是否是给定组的成员的语法似乎相当隐晦,而且我也找不到任何好的文档。

解决了。

假设如下:

- Domain name: "domain.com" - Group name: "Internet Users" - User name: "UserName" - Path to group: "domain.com\OU1\OU2\Internet Users" 

查询用户是否是该组的成员的查询将是:

 (&(memberOf=CN=Group Name,OU=OU2,OU=OU1,DC=domain,DC=com)(SAMAccountName=UserName)) 

所以你必须在squidGuard.conf中添加以下内容来识别该组的成员(“%s”是squidGuard.conf占位符“客户的用户名”):

 src Internet_Users { ldapusersearch ldap://dc.domain.com/DC=domain,DC=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=Internet Users,OU=OU2,OU=OU1,DC=domain,DC=com)) } 

注意:如果按照上面的方式写,它将不起作用,给你一个简洁的“语法错误”信息; 这是因为声明的(部分)被视为一个URL,所以你必须转义特殊字符,如逗号和空格; 正确的forms就是这样一个:

 src Internet_Users { ldapusersearch ldap://dc.domain.com/DC=domain,DC=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=Internet%20Users%2cOU=OU2%2cOU=OU1%2cDC=domain%2cDC=com)) } 

此外,为了避免Active Directory引用的问题(有时候DC会将您redirect到另一个,即使您位于它所pipe理的同一个域中),查询全局编录可能会很有用:

 src Internet_Users { ldapusersearch ldap://gc.domain.com:3268/DC=domain,DC=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=Internet%20Users%2cOU=OU2%2cOU=OU1%2cDC=domain%2cDC=com)) } 

免责声明:我没有这样做,我不熟悉SquidGuard。 说了这里有一些可能的方法。

1)如果你添加你的squid机器到域中,你将能够parsingAD组并且通过nss查找AD组成员,所以你应该能够使用squid_unix_group帮助器。 根据它的手册页,甚至还有一个用于剥离AD组的域部分的开关。

2)鉴于AD是一个LDAP服务器的种类,我怀疑你可以使用squid_ldap_group根据手册页:

“按照Squid的external_acl构造的预期,在指定了一个用户名和组,并且后面跟着一个新行,这个帮助程序将在下面一行产生OK或者ERR,以显示用户是否是指定组的成员。

3)即使这不起作用,你应该可以使用squid external_acl_type来创build一个function等价物。

4)检查出http://etutorials.org/Server+Administration/Squid.+The+definitive+guide/Chapter+12.+Authentication+Helpers/12.5+External+ACLs/这提到了一些帮手(wbinfo_group,winbindd_group)似乎没有build立/安装在我正在运行的鱿鱼的版本。

至于查询用户是否是LDAP组的成员,取决于哪个LDAP组作为不同的组,使用不同的属性来定义成员资格。

一些示例查询filter是:要查看某个人是否是groupOfUniqueNames的成员:

 (&(cn=<GROUP_CN>)(objectClass=groupOfUniqueNames)(uniqueMember=<MEMBER_DN>)) 

要查看一个uid是否是posixGroup的成员:

 (&(cn=<GROUPCN>)(objeCtclass=posixGroup)(memberUid=<UID>)) 

如果这些匹配,他们将返回组条目或您指定的组的属性,如果您指定任何。

希望能帮助到你。