Configurando o squidGuard para autenticar via Active Directory no Debian

squidGuard

Em um artigo anterior, mostramos como realizar uma configuração do Squid3 para autenticar os usuários usando uma base Active Directory existente. Para quem já trabalhou ou ainda trabalha com servidores proxy de forma intermediária a avançada, sabe muito bem que em pequenas redes, filtrar conteúdo com o squid muitas vezes se torna suficiente. Porém quando o ambiente vai se tornando complexo, as coisas mudam bastante e aí chega a necessidade de utilizar-se de um filtro de conteúdo dedicado. Neste artigo tentaremos de uma forma didática (ou não), como fazer com que o squidGuard realize consultas em um controlador de domínio para filtrar conteúdo conforme a sua necessidade.

Mas o que é exatamente esse tal de squidGuard? faz mal com leite? se come com farinha?

Segundo a própria descrição do pacote:

“squidGuard é uma extensão de controle de acesso, redirecionador e filtro ultra rápido, flexível e livre. Ela deixa você definir múltiplas regras de acesso com diferentes restrições para diferentes grupos de usuários num cache squid. squidGuard usa a interface redirector padrão do squid.”

Tendo isso em mente, vamos começar a trabalhar:

1 – Ajustando o /etc/apt/sources.list.

Isso é necessário pois precisamos dos fontes do programa para satisfazer o suporte a LDAP não contida no pacote dos repositórios oficiais. Caso queiras copiar o que estou utilizando, segue abaixo:

deb http://ftp.br.debian.org/debian/ squeeze main deb-src http://ftp.br.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main # squeeze-updates, previously known as 'volatile' deb http://ftp.br.debian.org/debian/ squeeze-updates main deb-src http://ftp.br.debian.org/debian/ squeeze-updates main # Mirrors de segurança deb http://ftp.br.debian.org/debian-security/ squeeze/updates main contrib non-free # Proposed updates deb http://ftp.br.debian.org/debian squeeze-proposed-updates main contrib non-free # debian-backports deb http://www.backports.org/debian squeeze-backports main contrib non-free

2 – Baixando as dependências:

Conforme a seção “Dicas para usar LDAP” contidas na documentação do squidGuard, temos de possuir instalados os pacotes: Flex, Bison e as bibliotecas do LDAP, necessárias para a geração dos pacotes de instalação. Sendo assim temos:

# apt-get update ; apt-get install libldap-2.4-2 libldap2-dev flex bison

3 – Resolução de nomes:

Você deve confirmar se o seu servidor consegue ao menos resolver o nome do controlador de domínio, caso não tenha um DNS instalado, o que acredito ser improvável. Mesmo assim, uma dica é utilizar o /etc/hosts para evitar problemas. Supondo que o nome do seu servidor seja “DC01” e possua endereço IP “172.16.2.2” temos:

127.0.0.1    localhost 127.0.1.1    dc01  127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts 172.16.2.2 dc01.empresa.net dc01

4 – Portas necessárias:

Para que o seu servidor proxy possa realizar consultas no seu controlador de domínio, você deve liberar a porta 3268 que corresponde ao catálogo global do seu DC. Para se certificar, utilize o nmap.

nmap -PN -O 172.16.2.2 -p 3268

Starting Nmap 5.00 ( http://nmap.org ) at 2013-12-21 13:37 ECT
Interesting ports on dc01.empresa.net (172.16.2.2):
PORT STATE SERVICE
3268/tcp open globalcatLDAP
MAC Address: D6:F6:BA:F8:33:00 (Unknown)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Microsoft Windows 2008 R2
OS details: Microsoft Windows Server 2008 R2 SP1 or SP2

5 – Baixando os fontes do squidGuard, ajustando o pacote e gerando os .DEB:

# apt-get update
# apt-get build-dep squidguard
# apt-get source squidguard

Após baixar, vamos ativar a opção que necessitamos, conforme o item 4 da seção “Dicas para usar LDAP” na documentação do squidGuard. Use o editor de sua preferência.

nano -w squidguard-1.4/debian/rules

Deixe o arquivo assim:

#!/usr/bin/make -f
# -*- makefile -*-

%:
dh $@

override_dh_auto_configure:
dh_auto_configure — –with-db=/usr \
–with-sg-config=/etc/squid/squidGuard.conf \
–with-sg-logdir=/var/log/squid \
–with-sg-dbhome=/var/lib/squidguard/db \
–with-ldap=yes \

Salve o arquivo e se você estiver dentro do diretório squidguard-1.4/debian/, suba um nível.

Vamos agora gerar os pacotes:

# dpkg-buildpackage

OBS: no momento da geração do pacotes observe se no progresso aparecerá o seguinte:

checking for bison… bison -y
checking for flex… flex
checking for ldap_init in -lldap… yes
checking for ldap support… yes

Neste caso, está tudo encaminhando para o sucesso. Caso contrário, revise os passos 1, 2 e 5

6 – Instalando os pacotes gerados:

dpkg -i squidguard_1.4-2_i386.deb squidguard-doc_1.4-2_all.deb

Caso ocorram erros, execute:

# apt-get install -f

OBS: No Debian Wheezy, o repositório conta com a versão 1.5 do squidGuard e o pacote já possui suporte a LDAP, então basta instalar o pacote pelo apt-get ou aptitude, desconsiderando os passos 1, 2, 5 e 6.

7 – Configurando o squidGuard:

Finalmente! Estamos quase lá! Agora vamos setar os parâmetros necessários para o nosso filtro entrar em funcionamento. Mas antes, se você ainda não o fez, configure o seu squid.conf com as seguintes opções:

redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 16
redirector_bypass on

Isso é o que precisamos para que o squid redirecione a filtragem de conteúdo avançada para o squidGuard.

Agora vamos ao squidGuard:

Baixe as Blacklists do MESD e do Shalla dentro de /var/lib/squidguard/db/, extraia os pacotes, limpe a sujeira, dê permissão para o usuário do squid recursivamente neste diretório, dê permissão RW-R-R aos arquivos e permissão RWX-RX-RX aos sub-diretórios. Eu gostaria de explicar estes detalhes mais a fundo, porém alguém poderia me acusar de kibar plagiar outro autor. Neste caso você queira uma explicação mais detalhada sobre estas configurações, recomendo a leitura do seguinte tutorial: http://www.hardware.com.br/tutoriais/filtro-conteudo-squidguard/. Caso ainda você queira, disponibilizo um pequeno script que realiza todo esse trabalho: (agradeço ao meu grande amigo @Geowany)

#!/bin/bash cd /var/lib/squidguard/db/ wget -c http://squidguard.mesd.k12.or.us/blacklists.tgz wget -c http://www.shallalist.de/Downloads/shallalist.tar.gz tar -zxvf blacklists.tgz tar -zxvf shallalist.tar.gz rm -f blacklists.tgz shallalist.tar.gz chown -R proxy:proxy /var/lib/squidguard/db/* find /var/lib/squidguard/db -type f | xargs chmod 644 find /var/lib/squidguard/db -type d | xargs chmod 755 update-squidguard

Dê permissão de execução ao arquivo e copie para algum lugar como /usr/local/sbin/ ou outro de sua escolha.

8 – Configurando o squidGuard.conf para consultas LDAP:

Aqui vamos realizar a configuração da autenticação do nosso servidor proxy no controlador de domínio afim de realizar as consultas e declarar “Source ACLs” que contêm os grupos a ser pesquisados no diretório (AD). Abaixo das primeiras linhas onde especificamos onde estão localizados o BDs e o diretório que conterá os logs, declaramos as opções da BASEDN e a senha do usuário que possui permissão para realizar consultas no diretório. Neste caso criei um usuário com nome “squidguard”.

ldapbinddn     cn=squidguard,cn=Users,dc=empresa,dc=net
ldapbindpass   M1nh@$3nh@$uL74@$3cr3t@
ldapcachetime  300

Na documentação do squidGuard na seção “Autenticação”, no exemplo mostra o seguinte:

ldapbinddn     cn=root, dc=example, dc=com

Isto me fez fritar neurônios demais até perceber que deveria declarar a OU onde está localizado o usuário, por isso em minha configuração está exibido em negrito. A terceira linha é o tempo em que o squidGuard irá realizar consultas afim de verificar modificações nos grupos especificados no AD. Este tempo é em segundos. Neste caso, de 5 em 5 minutos o squidGuard consultará o diretório.

Para declarar as ACLs do tipo Source, consideraremos o seguinte:

Na Source “Gerentes” teremos um acesso mais privilegiado;

Na Source “Funcionarios” teremos um acesso mais restrito.

Então:

src gerentes { 
ldapusersearch ldap://dc01.empresa.net:3268/DC=empresa,DC=net?sAMAccountName?sub?(&(sAMAccountName=%s)
(memberOf=CN=gerentes%2cOU=acessointernet%2cDC=empresa%2cDC=net)) 
} 
src funcionarios { 
ldapusersearch ldap://dc01.empresa.net:3268/DC=empresa,DC=net?sAMAccountName?sub?(&(sAMAccountName=%s)
(memberOf=CN=funcionarios%2cOU=acessointernet%2cDC=empresa%2cDC=net)) 
} 
acl { 
gerentes { 
pass allowed ads audio-video audio-video1 socialnet chat downloads videos music 
radiotv !porn1 !porn2 !aggressive !drugs !gambling !spyware !violence !warez !webtv 
!tracker !gamble !hacking !anonvpn !hacking2 !spyware2 !webphone all 
                redirect http://radio.anonymousbrasil.com/acesso-negado.html 
} 
funcionarios { 
pass allowed ads !socialnet !denied !chat !audio-video !downloads !music !webradio 
!porn1 !porn2 !aggressive !drugs !gambling !proxy !proxy1 !redirector !redirector1 
!redirector2 !redirector3 !redirectors !spyware !violence !videos !warez !webtv 
!tracker !radiotv !gamble !hacking !anonvpn !hacking !hacking1 !hacking2 !spyware2 
!webphone all 
                redirect http://radio.anonymousbrasil.com/acesso-negado.html 
} 
default { 
pass allowed ads !chat !socialnet !audio-video !denied !downloads !music !webradio 
!porn1 !porn2 !aggressive !drugs !gambling !proxy !proxy1 !redirector !redirector1 
!redirector2 !redirector3 !redirectors !spyware !violence !videos !warez !webtv 
!tracker !radiotv !gamble !hacking !anonvpn !hacking !hacking1 !hacking2 !spyware2 
!webphone all 
               redirect http://radio.anonymousbrasil.com/acesso-negado.html 
} 
}

Execute o comando update-squidguard:

# update-squidguard

Double checking directory and file permissions…done!
Re-building SquidGuard db files…done!
Reloading Squid…done!

Explicando:

  • dc01.empresa.net é o nome completo do seu controlador de domínio
  • acessointernet é o nome de uma OU que possui os grupos “Gerentes” e “Funcionarios” no Active Directory. Obviamente estamos partindo do pressuposto que há usuários dentro destes grupos.
  • default é a ACL de destino que deve existir caso o usuário a se autenticar não pertença a nenhum dos grupo.

9 – Congelando os pacotes

Após ter instalado os pacotes gerados, no momento que for realizada uma atualização do sistema (apt-get upgrade) o pacote do squidguard aparecerá na lista pois o diff verificou que não se trata do mesmo pacote contido nos repositórios e este comportamento não é o nós desejamos. Então Para “congelar” vamos utilizar o nosso bom DPKG:

# echo "squidguard hold"|dpkg --set-selections; echo "squidguard-doc hold"|dpkg --set-selections

Assim, o squidGuard não será atualizado ao realizar um upgrade.

Caso você queira desfazer, proceda como abaixo:

# echo "squidguard install"|dpkg --set-selections; echo "squidguard-doc install"|dpkg --set-selections

Mais informações sobre outros parâmetros: http://squidguard.org/Doc/authentication.html

Não é necessário que o nome da ACL e o nome do grupo no AD sejam iguais, apenas o fiz para fins de um melhor entendimento.

Bem, é isso. Sugestões, críticas construtivas e comentários sempre serão bem-vindos.

Referências:

http://squidguard.org

http://blogdonerd.com.br

http://www.hardware.com.br/tutoriais/filtro-conteudo-squidguard/