SquidGuard e grupos do Active Directory

2

Estou configurando um proxy Linux com Squid e SquidGuard para filtrar o tráfego da Internet.

Eu sei como autenticar usuários no Active Directory no Squid e, em seguida, como filtrar o acesso de usuários usando o SquidGuard.

A pergunta: como usar grupos do Active Directory no SquidGuard em vez de nomes de usuários simples?

Meu objetivo é configurar regras como "os membros desse grupo podem ir a qualquer lugar" ou "os membros desse grupo podem visitar apenas determinados sites".

Eu sei que o SquidGuard não pode gerenciar a participação em grupos diretamente, mas ele pode fazer pesquisas LDAP por conta própria; mas a sintaxe para pesquisar se um usuário é membro de um determinado grupo parece ser bastante enigmática, e não consegui encontrar nenhuma boa documentação por aí.

    
por Massimo 07.05.2010 / 13:19

2 respostas

3

Resolvido.

Assumindo o seguinte:

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

A consulta para verificar se o usuário é membro desse grupo seria:

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

Assim, você teria que adicionar o seguinte ao squidGuard.conf para identificar os membros desse grupo ("% s" é o marcador de posição do squidGuard.conf para "o nome de usuário do cliente"):

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))
}

Advertência: não funcionará se estiver escrito acima, dando-lhe uma mensagem lacônica de "erro de sintaxe"; isso é porque (parte de) a instrução é tratada como uma URL, então você tem que escapar de caracteres especiais, como vírgulas e espaços em branco; a forma correta seria assim:

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))
}

Além disso, para evitar problemas com referências do Active Directory (às vezes um DC apenas redirecionará você para outro, mesmo se você estiver no mesmo domínio que gerencia), pode ser útil consultar um catálogo global:

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))
}
    
por 12.05.2010 / 09:49
0

Aviso: Eu não fiz isso e não estou familiarizado com o SquidGuard. Dito isto, aqui estão algumas abordagens possíveis.

1) Se você adicionar sua máquina de squid ao domínio, você poderá resolver grupos do AD e procurar membros do grupo AD via nss, assim você poderá usar o ajudante squid_unix_group. De acordo com a sua página de manual, ele ainda tem um interruptor para remover a porção de domínio dos grupos do AD.

2) Dado que o AD é um tipo de servidor LDAP, eu suspeito que você seria capaz de usar squid_ldap_group que de acordo com a página man:

"Como esperado pela construção external_acl do Squid, depois de especificar um nome de usuário e um grupo seguidos por uma nova linha, esse ajudante produzirá OK ou ERR na linha a seguir para mostrar se o usuário é membro do grupo especificado. "

3) Mesmo que isso não funcione, você provavelmente conseguirá criar um equivalente funcional usando o squid external_acl_type.

4) Confira link isso menciona alguns helpers (wbinfo_group, winbindd_group) que não parecem ter sido compilados / instalados na versão do squid que estou rodando.

Quanto a uma consulta para ver se um usuário é membro de um grupo LDAP ou não, ele depende do tipo de grupo LDAP como grupos diferentes, use atributos diferentes para definir a associação.

Alguns exemplos de filtros de consulta são: Para ver se uma pessoa é membro de um groupOfUniqueNames:

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

Para ver se um uid é membro de um posixGroup:

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

Se estes corresponderem, eles retornarão a entrada do grupo ou os atributos do grupo que você especificar, se você especificar algum.

Espero que ajude.

    
por 10.05.2010 / 13:51