SquidGuard 和 Active Directory:如何处理多个组?

SquidGuard 和 Active Directory:如何处理多个组?

我正在设置 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_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
    }

    [...]
}

但这也不起作用:如果用户是其中一个组的成员,则整个源规则都会匹配,因此他可以到达两个目的地(这当然不是我想要的)。

到目前为止我发现的唯一解决方案是创建一个第三在 AD 中创建一个组,并为其分配一个源规则和一个 ACL;但是,如果目标集超过两个或三个,这种设置就会呈指数增长。

有没有什么办法可以更好地处理这个问题?

答案1

部分解决了。我完全忽略了你可以添加其他条件到 LDAP 查询...因此检查多个组的成员身份非常容易。

一些注意事项:

  • 仍然需要为每个可能的组组合定义一个 SquidGuard ACL
  • 您需要向 SquidGuard 配置至少添加另外两个指令:(ldapbinddn定义用于连接 AD 的用户名,并且您必须在此处使用用户对象的 DN,而不是普通的用户名!)和ldapbindpass,定义用户的密码。
  • SquidGuard 需要编译 LDAP 支持,但默认情况下不会编译该支持。

…但至少 AD 中的实际群体可以保持在最低限度。

相关内容