SQUID - Usando o SquidGuard para bloquear páginas impróprias

Bloquear domínios e endereços IP individuais funciona bem para bloquear páginas específicas, mas não funciona para bloquear páginas pornográficas, por exemplo, simplesmente porque existem muitas delas e você iria morrer louco se tentasse bloquear todas manualmente.

Existem grupos destinados a manter listas com URLs de páginas pornográficas, páginas de cassinos e jogos e páginas ilícitas em geral, que são atualizadas freqüentemente. Por serem construídas através da combinação dos esforços de muitas pessoas, auxiliadas por ferramentas semi-automáticas de indexação e classificação de conteúdo, estas listas permitem bloquear a maior parte das páginas ilícitas sem muito esforço. Apenas a lista mantida pelo Shalla Security possui mais de um milhão e meio de URLs cadastradas, que formam um arquivo compactado de 9 MB.

A lista mais usada é provavelmente a MESD blacklists, que é a indicada pela equipe do SquidGuard, por ser completamente livre e utilizável para qualquer fim. Ela tem pouco mais de 1 milhão de links e pode ser baixada no: http://squidguard.mesd.k12.or.us/blacklists.tgz.

Outra lista muito usada é a Shalla's Blacklists, disponível no: http://www.shallalist.de/. A lista é livre para uso pessoal ou não-comercial e é mais completa que a lista do MESD, com mais de 1.500.000 de URLs. O uso comercial é permitido, desde que você preencha um contrato de uso, sem custo.

Outra opção é a lista do URLBlacklist.com. Ela é uma lista comercial, que conta com mais de 2 milhões de links e é atualizada regularmente, contando inclusive com um script de atualização automática. A assinatura custa de US$ 6 a US$ 55 mensais, de acordo com o tipo de uso.

Estas listas nada mais são do que longas listas de links, com um por linha. Elas até podem ser usadas diretamente no Squid, através da opção url_regex (a mesma que usamos para criar uma lista de sites bloqueados), mas, por serem arquivos muito grandes, o desempenho seria ruim, já que o Squid processa cada linha dos arquivos a cada acesso, o que consome muito processamento.

Entra em cena então o SquidGuard, que permite usar longas listas de URLs, com milhões de links sem uma grande perda de desempenho. Ele permite integrar as listas que vimos a pouco sem comprometer o desempenho do seu servidor proxy. As listas se encarregarão de bloquear a maior parte das páginas impróprias e você poderá fazer ajustes manuais conforme necessário. A página do projeto é a: http://www.squidguard.org/.

Nas distribuições derivadas do Debian, você pode instalá-lo rapidamente via apt-get:

# apt-get install squidguard

A configuração é feita em três fases. O primeiro passo é baixar os arquivos das listas desejadas e descompactá-los no diretório "/var/lib/squidguard/db". Em seguida, é necessário configurar o arquivo "/etc/squid/squidGuard.conf", especificando os arquivos de listas que serão usados e o comportamento do SquidGuard ao bloquear os acessos e, finalmente, editar o "/etc/squid/squid.conf", adicionando a linha que ativa o uso do SquidGuard.

Vamos começar baixando as listas. Vou usar como exemplo as listas do Shalla e do MESD, mas você pode usar os mesmos passos para utilizar outras listas que desejar.

Comece baixando as listas em um diretório qualquer, como em:

$ wget -c http://squidguard.mesd.k12.or.us/blacklists.tgz
$ wget -c http://www.shallalist.de/Downloads/shallalist.tar.gz

Copie os dois arquivos para o diretório "/var/lib/squidguard/db" e descompacte-os, como em:

# cp blacklists.tgz shallalist.tar.gz /var/lib/squidguard/db/
# cd /var/lib/squidguard/db/
# tar -zxvf blacklists.tgz
# tar -zxvf shallalist.tar.gz

Aproveite para remover os dois arquivos, já que não precisaremos mais deles:

# rm -f blacklists.tgz shallalist.tar.gz

Com isso, você terá as pastas "BL" (as listas do Shalla) e "blacklists" (listas do MESD) dentro do diretório, cada uma contendo um conjunto de subpastas, como neste screenshot:

Como pode ver, as listas são divididas por assunto. A lista do MESD é concentrada em temas ilegais, enquanto a lista do Shalla inclui listas relacionadas a temas diversos, que você pode bloquear ou não de acordo com a situação. Dentro de cada pasta, você encontra dois arquivos, "domains" e "urls", o primeiro contendo domínios que são bloqueados completamente e o segundo contendo URLs isoladas.

Alguns dos temas cobertos pelas listas são:

adv - Sites que hospedam banners e anúncios em geral, exibidos em outras páginas (bloqueando estes domínios, você bloqueia boa parte dos banners de anúncios). Na lista do MESD a categoria se chama "ads".
audio-video - Páginas (não necessariamente ilegais) que hospedam vídeos e músicas, como o youtube.
chat - Páginas com salas de bate-papo ou contendo clientes web para acesso ao MSN ou outras redes.
drugs - sites que vendem remédios e páginas com conteúdo relacionado ao uso de drogas ou apologia às drogas.
finance - Páginas com informações financeiras, incluindo bancos, empresas de seguros e de crédito. Esta pasta inclui várias subpastas, com as páginas divididas em categorias.
gamble - Cassinos e outras páginas relacionadas a jogos de aposta.
porn - Este dispensa comentários. É a categoria com o maior número de entradas e a primeira que você precisará bloquear.
sex - Similar à "porn", contém páginas de conteúdo adulto.
proxy - Esta é outra lista que você sempre deve incluir no bloqueio. Ela reúne URLs e endereços IP de proxys externos, que podem ser usados pelos usuários para furar o bloqueio, como o http://proxy.org.
socialnet - Inclui redes sociais, como o Orkut e o Myspace.
tracker - Endereços de trackers com torrents. É interessante bloqueá-los para dificultar o download de arquivos .torrent através da rede, o que tem potencial para consumir muita banda.
warez - Páginas que hospedam programas piratas.
webradiowebtv - Rádios e TVs online. É interessante bloqueá-las junto com a categoria "audio-video", caso você queira reduzir o uso de banda da rede.

Com isso, você tem as duas listas à disposição e pode escolher qual delas utilizar, ou mesmo combinar seções de ambas para incrementar o filtro. O próximo passo é configurar o arquivo "/etc/squid/squidGuard.conf", especificando as listas a utilizar. Um exemplo básico de arquivo de configuração, usando apenas duas das seções da lista do MESD, seria:

# /etc/squid/squidGuard.conf

dbhome /var/lib/squidguard/db/blacklists
logdir /var/log/squid

dest porn {
domainlist porn/domains
urllist porn/urls
}

dest proxy {
domainlist proxy/domains
urllist proxy/urls
}

acl {
default {
pass !porn !proxy all
redirect http://www.gdhpress.com.br
}
}

As duas primeiras linhas indicam o diretório contendo as blacklists e o diretório onde serão armazenados os logs. No exemplo, estou usando as listas do MESD, daí o "/var/lib/squidguard/db/blacklists" e estou orientando o SquidGuard a salvar o log no mesmo diretório utilizado pelo Squid, gerando o arquivo "/var/log/squid/squidGuard.log".

Em seguida, temos duas ACLs, batizadas de "porn" e proxy", cada uma incluindo os dois arquivos da categoria correspondente dentro das listas. Para que fossem adicionadas mais seções, bastaria adicionar uma nova ACL para cada uma.

No final, a opção "pass" indica como as duas ACLs serão usadas. No exemplo, usei a linha "pass !porn !proxy all", que indica que os acessos a páginas citadas nas listas devem ser bloqueados, mas o acesso a outras páginas é aceito.

Concluindo, usei a linha "redirect http://www.gdhpress.com.br", que faz com que todos os acessos bloqueados sejam redirecionados de forma transparente à URL especificada. Dessa forma, o usuário tentando acessar páginas impróprias é sutilmente direcionado a uma página com conteúdo mais saudável :). Você pode substituí-la pelo site da empresa, ou mesmo pela localização de uma página de aviso.

Temos aqui um segundo exemplo de configuração, bem mais incrementado, que usa um número bem maior de ACLs, combinando listas do MESD e do Shalla:

# /etc/squid/squidGuard.conf
dbhome /var/lib/squidguard/db
logdir /var/log/squid

dest ads {
domainlist blacklists/ads/domains
urllist blacklists/ads/urls
}
dest aggressive {
domainlist blacklists/aggressive/domains
urllist blacklists/aggressive/urls
}
dest audio-video {
domainlist blacklists/audio-video/domains
urllist blacklists/audio-video/urls
}
dest drugs {
domainlist blacklists/drugs/domains
urllist blacklists/drugs/urls
}
dest gambling {
domainlist blacklists/gambling/domains
urllist blacklists/gambling/urls
}
dest porn {
domainlist blacklists/porn/domains
urllist blacklists/porn/urls
}
dest proxy {
domainlist blacklists/proxy/domains
urllist blacklists/proxy/urls
}
dest redirector {
domainlist blacklists/redirector/domains
urllist blacklists/redirector/urls
}
dest spyware {
domainlist blacklists/spyware/domains
urllist blacklists/spyware/urls
}
dest violence {
domainlist blacklists/violence/domains
urllist blacklists/violence/urls
}
dest warez{
domainlist blacklists/warez/domains
urllist blacklists/warez/urls
}
dest porn2{
domainlist BL/porn/domains
urllist BL/porn/urls
}
dest socialnet{
domainlist BL/socialnet/domains
urllist BL/socialnet/urls
}
dest tracker{
domainlist BL/tracker/domains
urllist BL/tracker/urls
}

acl {
default {
pass !ads !aggressive !audio-video !drugs !gambling !porn !proxy
!redirector !spyware !violence !warez !porn2 !socialnet !tracker all
redirect http://www.gdhpress.com.br
}
}

Veja que nesse segundo exemplo, usei a linha "dbhome /var/lib/squidguard/db". Isso permite que você combine seções das duas listas, indicando o caminho até cada uma, a partir do diretório principal. Esta mesma idéia pode ser usada para combinar outras listas a que você tenha acesso. Basta colocar todas as listas dentro do diretório "/var/lib/squidguard/db" e incluir as ACLs correspondentes dentro da configuração.

Antes que possam ser efetivamente utilizadas, as listas precisam ser convertidas para o formato Berkeley DB, que permite um acesso muito mais rápido do que seria possível ao manipular diretamente os arquivos em texto. Para isso, use, depois de configurar o arquivo "/etc/squid/squidGuard.conf", o comando:

# squidGuard -C all
(este comando deve ser executado novamente sempre que você incluir novas listas na configuração)

Embora não seja necessário em muitas configurações, é recomendável usar também o comando abaixo para ajustar as permissões de acesso aos arquivos, garantindo que o Squid tenha acesso a eles. O "proxy:proxy" indica o usuário e o grupo utilizados pelo Squid, que podem eventualmente ser diferentes, de acordo com a distribuição usada:

# chown -R proxy:proxy /var/lib/squidguard/db/*

Os dois comandos a seguir complementam a configuração, fazendo com que todos os arquivos dentro da pasta sejam configurados com permissões 644 e as pastas com 755, que é a configuração correta. Isso previne o aparecimento de erros diversos relacionados a permissões incorretas para os arquivos:

# find /var/lib/squidguard/db -type f | xargs chmod 644
# find /var/lib/squidguard/db -type d | xargs chmod 755

Depois de gerar a configuração do SquidGuard, o próximo passo é alterar a configuração do Squid, para que ele seja utilizado. Para isso, edite o arquivo "/etc/squid/squid.conf", adicionando a linha:

redirect_program /usr/bin/squidGuard

Ela deve ser colocada depois das ACLs restritivas (destinadas a bloquear acessos, como no caso das ACLs para bloquear o acesso a uma lista de sites personalizados, ou em determinados horários), mas entretanto antes das regras finais, que permitem o acesso. Um exemplo de arquivo squid.conf completo seria:

# /etc/squid/squid.conf
http_port 3128 transparent
visible_hostname gdh

cache_mem 128 MB
maximum_object_size_in_memory 128 KB
maximum_object_size 512 MB
cache_dir ufs /var/spool/squid 4096 16 256
cache_access_log /var/log/squid/access.log

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

redirect_program /usr/bin/squidGuard

acl redelocal src 192.168.1.0/24
http_access allow localhost
http_access allow redelocal
http_access deny all

A posição da regra que ativa o SquidGuard é importante, pois se ela for colocada depois da regra "http_access allow redelocal" (ou similar), as requisições serão liberadas antes de passarem pelo SquidGuard, fazendo com que ele nunca seja usado.

Opcionalmente, você pode incluir também as duas linhas abaixo, logo após a linha que ativa o SquidGuard:

redirect_children 8
redirector_bypass on

A opção "redirect_children" ajusta o número de processos do SquidGuard que o servidor Squid manterá abertos. Aumentar o número ajuda a melhorar o desempenho do proxy em grandes redes, onde o servidor recebe um volume muito grande de requisições.

A opção "redirector_bypass on" faz com que o Squid continue funcionando mesmo que o SquidGuard trave ou deixe de funcionar por qualquer motivo. Usá-la tem seus prós e contras, já que pode ser preferível que o acesso pare completamente, até que você consiga solucionar o problema, do que permitir que o Squid funcione com os bloqueios desativados. Pense no caso de uma escola primária, por exemplo.

Depois de tudo terminado, reinicie o Squid para que a configuração entre em vigor:

# /etc/init.d/squid restart

Se você estiver configurando um servidor de produção, com usuários acessando o proxy enquanto está configurando, use o comando abaixo para ativar a configuração sem derrubar os usuários conectados:

# squid -k reconfigure

Com tudo pronto, verifique se o SquidGuard está mesmo ativo usando o comando abaixo:

# tail /var/log/squid/squidGuard.log

Ele mostrará as mensagens de inicialização do SquidGuard. Se tudo estiver correto, as duas últimas linhas serão:

2008-06-14 09:16:02 [4521] squidGuard 1.2.0 started (1208175362.060)
2008-06-14 09:16:02 [4521] squidGuard ready for requests (1208175362.105)

Se algum erro impedir a inicialização do serviço, ele exibirá a mensagem de erro, permitindo que você localize o problema, como em:

2008-06-14 10:45:04 [4408] init domainlist /var/lib/squidguard/db/BL/socialnet/domains
2008-06-14 10:45:04 [4408] /var/lib/squidguard/db/BL/socialnet/domains: Permission denied

Nesse caso, temos um problema com as permissões de acesso de uma das listas especificadas na configuração, o que poderia ser resolvido usando os comandos para acertar as permissões que vimos no início do tópico.

Com o SquidGuard ativo, os acessos a páginas impróprias serão drasticamente reduzidos e você conserva a possibilidade de refinar o bloqueio, adicionando novos endereços manualmente. Não esqueça de atualizar os arquivos das blacklists periodicamente, já que elas são atualizadas de forma freqüente.

Com o tempo, é provável que você precise desbloquear algumas páginas manualmente (depois de verificar seu conteúdo), a pedido dos usuários. Nesse caso, você pode criar uma lista branca, autorizando o acesso aos sites manualmente inseridos nela.

Para isso, adicione uma nova ACL no arquivo squidGuard.conf, adicionando as seguintes linhas próximo ao início do arquivo:

dest white {
domainlist white/domains
urllist white/urls
}

No final do arquivo, ao especificar o uso das ACLs, inclua o parâmetro "white" (sem a exclamação) antes dos demais, como em:

acl {
default {
pass white !porn !proxy all
redirect http://www.gdhpress.com.br
}
}

Com isso, o conteúdo da ACL "white" será processado primeiro e o acesso às páginas especificadas no arquivo será liberado. Falta agora criar a pasta e os dois arquivos citados na configuração:

# mkdir /var/lib/squidguard/db/white
# touch /var/lib/squidguard/db/white/domains
# touch /var/lib/squidguard/db/white/urls

Use o arquivo "domains" para incluir domínios que devem ser permitidos por completo, como em "gdhn.com.br" e o arquivo "urls" para incluir páginas ou seções isoladas, como em "gdhn.com.br/tutoriais/", sempre um por linha.

Depois de editar os arquivos, é necessário fazer com que o SquidGuard atualize a conversão das listas e reiniciar o Squid para que as alterações entrem em vigor, como em:

# squidGuard -C all
# squid -k reconfigure

Fonte: http://www.hardware.com.br/livros/servidores-linux/usando-squidguard-para-bloquear-paginas-improprias.html

.