Bloqueando

O Squid permite bloquear sites indesejados de forma relativamente simples, onde você inclui na configuração uma acl contendo os sites não permitidos e cria uma política de acesso que bloqueia o acesso a eles.

Isso é feito usando o parâmetro “dstdomain” (destination domain). Veja um exemplo:

acl bloqueados dstdomain orkut.com playboy.abril.com.br
http_access deny bloqueados

Aqui eu criei uma acl chamada “bloqueados”, que contém os endereços “orkut.com” e “playboy.abril.com.br” e, em seguida, incluí a regra “http_access deny bloqueados”, que bloqueia o acesso a eles. Ao aplicar a regra, o Squid faz a resolução do domínio e passa a bloquear todas sub-páginas.

Existe uma ressalva: muitos sites podem ser acessados tanto com o “www” quanto sem. Para o Squid, “www.orkut.com” e “orkut.com” são duas coisas diferentes. Bloqueando o “orkut.com” os usuários ainda conseguirão acessar o site através do “www.orkut.com” e vice-versa. Para bloquear ambos, é preciso incluir as duas possibilidades dentro da regra, como em:

acl bloqueados dstdomain orkut.com www.orkut.com playboy.abril.com.br
http_access deny bloqueados

Você pode incluir quantos domínios quiser dentro da regra, basta separá-los por espaço e deixar tudo na mesma linha. Se a regra começar a ficar muito grande, você tem a opção de transferir as entradas para um arquivo. Neste caso, crie um arquivo de texto simples, com todos os domínios desejados (um por linha) e use a regra abaixo na configuração do Squid. No exemplo, estou usando o arquivo “/etc/squid/bloqueados”:

acl bloqueados url_regex -i “/etc/squid/bloqueados”
http_access deny bloqueados

Naturalmente, não seria viável tentar bloquear manualmente todos os sites pornográficos, chats, comunidades online, e todos os outros tipos de sites que não são úteis num ambiente de trabalho. A idéia seria logar os acessos (com a ajuda do Sarg, que veremos mais adiante) e bloquear os sites mais acessados, conforme tomar conhecimento deles. É sempre uma corrida de gato e rato, mas, em se tratando de pessoas adultas, não há nada que uma boa conversa com o chefe não possa resolver ;).

De qualquer forma, em alguns ambientes, pode ser mais fácil bloquear inicialmente o acesso a todos os sites e ir abrindo o acesso a apenas alguns sites específicos, conforme a necessidade. Neste caso, invertemos a lógica da regra. Criamos um arquivo com sites permitidos, adicionamos a regra que permite o acesso a eles e em seguida bloqueamos o acesso a todos os demais, como neste exemplo:

acl permitidos url_regex -i “/etc/squid/permitidos”
http_access allow permitidos
http_access deny all

Nas versões recentes do Squid, ao bloquear um domínio, é automaticamente bloqueado também o endereço IP do servidor correspondente. Isso evita que os usuários da rede consigam burlar o proxy, acessando os sites diretamente pelo IP. De qualquer forma, você pode criar diretamente regras que bloqueiem determinados endereços IP, o que é útil em casos de servidores sem domínio registrado, ou que respondam por vários domínios. Neste caso, a regra ficaria:

acl ips-bloqueados dst 200.234.21.23 200.212.15.45
http_access deny ips-bloqueados

Você pode descobrir rapidamente o endereço IP de um determinado domínio usando o comando “host”, como em:

$ host google.com
google.com A 216.239.57.99
google.com A 216.239.37.99

Depois de adicionar as novas regras, nosso arquivo de configuração ficaria assim:

http_port 3128
visible_hostname kurumin

cache_mem 32 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

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 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # SWAT
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

acl bloqueados url_regex -i “/etc/squid/bloqueados”
http_access deny bloqueados

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

http_access deny all

Veja que coloquei as duas regras antes do “http_access allow redelocal”, que abre tudo para a rede local. Como o Squid processa as regras seqüencialmente, as páginas que forem bloqueadas pelas duas regras não chegarão a passar pela seguinte.

Uma segunda possibilidade é usar o parâmetro “dstdom_regex”, que permite bloquear sites de uma forma mais geral, com base em palavras incluídas na URL de acesso. Você pode bloquear todas as páginas cujo endereço inclua a palavra “sexo”, por exemplo. Ao usar esta regra, o Squid verifica a existência das palavras na URL do site e não no conteúdo da página.

Crie mais um arquivo de texto, contendo as palavras que devem ser bloqueadas (uma por linha) e adicione a regra abaixo, contendo a localização do arquivo:

acl nomesproibidos dstdom_regex “/etc/squid/nomesproibidos”
http_access deny nomesproibidos

O uso desta regra é um pouco mais problemática, pois bloqueará todas páginas que contenham alguma das palavras listadas na URL. Esta opção sempre levará a alguns falsos positivos e por isso deve ser usada com mais cuidado.

Não existe problema em combinar o bloqueio de domínios e de palavras dentro da URL, você pode lançar mão de uma combinação das duas coisas, de acordo com a situação. Basta usar as duas regras simultaneamente, como em:

acl bloqueados url_regex -i “/etc/squid/bloqueados”
http_access deny bloqueados
acl nomesproibidos dstdom_regex “/etc/squid/nomesproibidos”
http_access deny nomesproibidos

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

Incluídas as regras, os clientes passam a ver uma mensagem de erro ao tentar acessar páginas que se enquadrem nos bloqueios:

Você pode personalizar as páginas de erro editando os arquivos dentro da pasta “/usr/share/squid/errors/English” ou “/usr/share/squid/errors/Portuguese” (de acordo com a língua definida na configuração). São várias páginas html, uma para cada tipo de erro indicado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *