Você está na página 1de 8

Entendendo como o Squid lê as ACLs

A cada caractere inserido no squid.conf, lembre-se que o Squid lê as ACLs de cima para
baixo e quando encontra alguma que se aplique, ele para. Parece meio complicado, mas
funciona assim:

Vou criar três ACLs: acesso_total, acesso_restrito e bloqueado. Estes arquivos terão os
seguintes conteúdos:
 acesso_total = IPs dos clientes que terão acesso total à internet. Não passarão
por nenhuma restrição do Squid.
 acesso_restrito = IPs dos clientes que passarão pelo bloqueio de sites
estabelecido na acl seguinte.
 bloqueado = Lista de palavras que o Squid bloqueará se forem encontradas na
URL.

De posse destas três ACLs, vamos declará-las no squid.conf desta maneira:

acl acesso_total src "/etc/squid/acesso_total"


acl acesso_restrito src "/etc/squid/acesso_restrito"
acl bloqueado url_regex -i "/etc/squid/bloqueado"

OBS: A opção -i encontrada na linha que declara o bloqueio serve para NÃO fazer
distinção entre maiúsculas e minúsculas.

Agora que as regras foram declaradas, vamos ativá-las dessa maneira:

http_access allow acesso_total


http_access deny bloqueado
http_access allow acesso_restrito
http_access deny all

Como o Squid as lê:

A primeira regra que o Squid lê (http_access allow acesso_total) diz que será
LIBERADO acesso a quem estiver com o IP cadastrado no arquivo
"/etc/squid/acesso_total". Então, quem ele encontra aqui já é liberado e não passa mais
pelas outras ACLs seguintes. Por isso o acesso é direto e total.

A segunda regra que ele encontra (http_access deny bloqueado) diz que será NEGADO
o acesso às URLs que coincidirem com as palavras que estão no arquivo
"/etc/squid/bloqueado". Se, por exemplo, neste arquivo tiver a palavra sexo, qualquer
site que tenha esta palavra na sua URL não será acessado, como em
www.uol.com.br/sexo, www.sexomais.com.br, etc. Mas atenção neste detalhe. O Squid
vem lendo o arquivo de cima para baixo e só chegará a segunda regra quem não cair na
primeira, ou seja quem não tiver o IP cadastrado no arquivo de acesso total.

A terceira regra que o Squid lê (http_access allow acesso_restrito) diz que será
LIBERADO acesso a quem tiver com o IP cadastrado no arquivo
"/etc/squid/acesso_restrito". Como na terceira regra só chega quem não caiu na regra
anterior, o acesso pode ser liberado tranquilamente.

A quarta e última regra (http_access deny all) nega o acesso a qualquer IP de qualquer
máscara (0.0.0.0/0.0.0.0), pois ela já vem declarada no início das ACLs (acl all src
0.0.0.0/0.0.0.0).

Você deve estar se perguntando: Mas como pode negar acesso a todos os IPs se tenho
que liberar o meu? A resposta é simples e está no que eu enfatizei até agora. O segredo
está na seqüência como o Squid lê as ACLs.

Se ele lê a primeira (acesso_total) e ninguém se aplica a ela, então passará para a


segunda. Se nesta também ninguém se aplica, ele passará para a terceira. É óbvio
concluir que se o cliente não está cadastrado no acesso_total, nem está no
acesso_restrito, então ele não faz parte da rede e deve ser bloqueado (deve ser algum
espertinho mudando de IP, hehehe!!!). Só chegará a última quem não caiu em nenhuma
das anteriores. Por isso, divida sua rede em quem pode ter acesso total e restrito e
cadastre os clientes em seus respectivos arquivos.

Montando uma rede baseada numa lista


de bloqueios
Agora que você já entendeu como funcionam as ACLs, vamos a um exemplo um mais
complexo do que o anterior, mas não é complicado entender.

Neste exemplo vamos montar uma rede baseada numa lista de bloqueios e exceções. Ou
seja, o cliente só terá o seu acesso bloqueado se o site estiver previamente cadastrado na
lista de bloqueios.

A desvantagem desta montagem de acesso é que se o cliente conhecer sites semelhantes


aos bloqueados (com URLs diferentes) poderá acessar. Fica então a critério do
administrador da rede ter uma vasta lista do que não pode acessar.

A regra deste tipo de restrição é: QUALQUER SITE É PERMITIDO, DESDE QUE


NÃO ESTEJA NA LISTA.

Veja um exemplo de uma rede funcionando assim:

Arquivo: /etc/squid/acesso_total

Conteúdo:

192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
Descrição: Máquinas que terão acesso total à internet.

Arquivo: /etc/squid/acesso_restrito

Conteúdo:

192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9

Descrição: Máquinas que terão acesso restrito à internet. Passarão por bloqueios.

Arquivo: /etc/squid/download

Conteúdo:

.exe$
.iso$
.avi$
.mp3$
.wmv$
.mpeg$

Descrição: Extensões de arquivos que terão download bloqueado.

Arquivo: /etc/squid/bloqueado

Conteúdo:

sexo
hardcore
ninfeta
penis
suruba
playboy
revistasexy

Descrição: Palavras para restrição de URLs.

Arquivo: /etc/squid/liberado

Conteúdo:

abcdasaude
sexoesaude
medicinanatural
uol.com.br/sexo
Descrição: Exceções aos bloqueios. O que for colocado aqui, mesmo que esteja na lista
de bloqueios será liberado.

Agora vamos à prática!

Declare as ACLs:

acl acesso_total src "/etc/squid/acesso_total"


acl acesso_restrito src "/etc/squid/acesso_restrito"
acl liberado url_regex -i "/etc/squid/liberado"
acl download url_regex -i "/etc/squid/download"
acl bloqueado url_regex -i "/etc/squid/bloqueado"

Depois de declarar, ative as ACLs na mesma seqüência do exemplo abaixo:

http_access allow acesso_total


http_access allow liberado
http_access deny download
http_access deny bloqueado
http_access allow aceso_restrito
http_access deny all

Agora vamos às explicações e as análises dos casos.

Caso 1 - O cliente com IP 192.168.1.2 vai acessar o site www.uol.com.br.


Por estar cadastrado no acesso total ele cairá logo na primeira regra e será LIBERADO
o acesso a qualquer site. Nenhuma das regras seguintes serão aplicadas a ele tanto o
uol.com.br como qualquer outra página estará liberada.

Caso 2 - O cliente com IP 192.168.1.6 vai acessar o site www.uol.com.br.


Por estar no acesso restrito, ele "passará ileso" pela primeira regra. Encontrará então a
segunda (liberado), que são as exceções dos bloqueios. Como o site www.uol.com.br
não está na lista de exceções ele também passará ileso por esta regra. Chegará então, à
terceira regra (download) que limita os downloads. Nesta também não encontrará nada,
pois não estamos fazendo download de nenhum arquivo. Chegará então a quarta
(bloqueado) e mais perigosa regra, mas como nela não tem nenhuma restrição para o
site uol ele também passará ileso. Cairá então na quinta regra, onde o acesso ao seu IP
(192.168.1.6) está LIBERADO (allow) podendo assim acessar o site www.uol.com.br.

Caso 3 - O cliente com IP 192.168.1.6 vai acessar o site www.sexomais.com.br.


Por estar no acesso restrito, ele passa pela primeira regra. Encontrará a segunda, na qual
há exceções para os bloqueios, mas não há nenhuma exceção para o site
sexomais.com.br. Então ele prossegue, passando ileso pelo download e caindo na regra
bloqueado, pois o site sexomais.com.br contém uma palavra (sexo) que está na lista de
bloqueios. Mesmo estando cadastrado no acesso_restrito este cliente não chegará a acl
que lhe dá permissão de acesso, pois antes ele já caiu no bloqueio de sites e (como já
disse) o Squid para de ler quando aplica alguma regra.

Caso 4 - O cliente com IP 192.168.1.6 vai acessar o site


www.medicinanatural.com.br/sexo. (Mas que cara teimoso...)
Já sabemos que este cliente pulará a primeira regra, pois sei IP é do acesso restrito, mas
cairá logo na segunda, onde há uma exceção para acessar todo o conteúdo do site
medicinanatural. Mesmo que em sua URL (www.medicinanatural.com.br/sexo) tenha a
palavra sexo, a regra de bloqueio não será aplicada, pois antes mesmo de chegar nela foi
encontrada uma adequação na regra de exceções e o Squid parou de ler o resto das
regras para este IP.

Caso 5 - O cliente com IP 192.168.1.6 (coitado desse cara...) vai acessar o site
www.superdownloads.com.br.
Ele pulará a primeira regra. Não se enquadrará na segunda, mas cairá na terceira se
tentar fazer qualquer download de arquivos com extensões definidas na lista
/etc/squid/download. Se não tentar fazer downloads, poderá navegar tranquilamente
pelo site, afinal, não há nenhuma restrição para a URL dele.

Espero que este exemplo tenha ficado claro. Na página seguinte montaremos um outro
tipo de restrições de acesso.

Montando uma rede baseada numa lista


de exceções
Este tipo de rede é bem mais fácil montar que a anterior. NELA, TUDO É
BLOQUEADO, EXCETO O QUE VOCÊ DEFINIR COMO EXCEÇÃO, ao contrário
da outra que tudo é liberado, exceto o que você definir nos bloqueios. Sua vantagem é
que o administrador da rede não precisa de uma enorme lista do que "não pode ser
acessado". Em alguns casos é mais fácil liberar apenas o que pode ser acessado do que
bloquear tudo o que não poder ser acessado. A grande jogada esta aí!

Vamos então a um exemplo prático.

Arquivo: /etc/squid/acesso_total

Conteúdo:

192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5

Descrição: Máquinas que terão acesso total à internet.

Arquivo: /etc/squid/acesso_restrito

Conteúdo:
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9

Descrição: Máquinas que terão acesso restrito à internet. Passarão por bloqueios.

Arquivo: /etc/squid/liberado

Conteúdo:

.gov.
.edu.
.org.
ufc
uece
unifor
minhaempresa.com.br
bb.com.br
bradesco.com.br

Descrição: Exceções aos bloqueios.

Declare as ACLs:

acl acesso_total src "/etc/squid/acesso_total"


acl acesso_restrito src "/etc/squid/acesso_restrito"
acl liberado url_regex -i "/etc/squid/liberado"

Ative as ACLs:

http_access allow acesso_total


http_access allow liberado
http_access deny acesso_restrito
http_access deny all

Agora vamos ao estudo dos casos. A primeira regra LIBERA o acesso dos IPs
cadastrados no acesso_total. A segunda regra libera o acesso apenas aos conteúdos do
arquivo /etc/squid/liberado. E as demais negam os acessos da rede local e de todos os
outros IPs também.

Caso 1 - O cliente com IP 192.168.1.2 vai acessar o site www.uol.com.br.


Por estar cadastrado no acesso total ele cairá logo na primeira regra e será LIBERADO
o acesso a qualquer site. Nenhuma das regras seguintes serão aplicadas a ele tanto o
uol.com.br como qualquer outra página estará liberada.

Caso 2 - O cliente com IP 192.168.1.6 vai acessar o site www.uol.com.br.


Por não estar no acesso total, ele pulará esta regra. Como não é nenhuma exceção para o
site www.uol.com.br ele também passará ileso pela segunda regra. Da terceira em diante
ele não faz mais nada, pois elas negam qualquer tipo de acesso. O site www.uol.com.br
será bloqueado para este IP.

Caso 3 - O cliente com IP 192.168.1.6 vai acessar o site www.detran.ce.gov.br.


Já sabemos que ele pulará a primeira regra. Encontrará então a segunda, que em sua
lista possui (.gov.) uma referência à URL que ele está tentando acessar. Como a regra
está liberando (allow) o acesso a qualquer URL que contenha .gov. o cliente poderá
acessar normalmente todo o site www.detran.ce.gov.br.

Como vimos este exemplo é bem mais simples que o anterior e a abrangência dos
bloqueios é bem maior. É ideal para escolas, bancos e instituições públicas, onde o
conteúdo da internet é altamente restrito.

Na última página mostrarei como redirecionar as páginas (para um aviso por exemplo)
quando o cliente cair em algum bloqueio.

Redirecionando
Depois de montada a rede com o modelo de sua preferência, falta apenas redirecionar as
mensagens, afinal haverão inúmeras reclamações de clientes dizendo que estão sem
internet e na verdade estão tendo seus sites bloqueados. Nada mais óbvio do que colocar
um aviso informando isso, concorda? É bem simples. Vamos então à prática.

Procure no seu squid.conf a linha error_directory. Ela informa o diretório onde o Squid
vai buscar os arquivos HTML de erro. No meu conectiva, por exemplo, o referido
diretório fica em /usr/share/squid/errors/Portuguese.

1. Crie então uma página HTML comum informando que o usuário está tentando
acessar um site proibido.

2. Salve-a dentro do diretório informado acima para que o Squid a encontre quando
alguém for bloqueado.

Procure no squid.conf a linha deny_info. Nesta linha você define qual erro vai acionar
qual página. Veja um exemplo:

deny_info block.html bloqueado

Neste exemplo o cliente será redirecionado para a página block.html quando ocorrer
algum bloqueio de sites. Você pode também acrescentar outras páginas de acordo com a
quantidade de bloqueios que você possui. Para isso basta repetir as linhas, como no
exemplo abaixo:

deny_info block.html bloqueado


deny_info down.html download
deny_info all.html all

Se quiser também pode redirecionar para um site:


deny_info http://www.google.com.br bloqueado.

Espero que este artigo possa ajudar alguém de alguma forma. Escrevi pensando no que
eu queria ter encontrado quando estava aprendendo a usar as ACLs, por isso acho que
deva ter alguma utilidade. Procurei exemplificar nos mínimos detalhes para não deixar
nenhuma dúvida.

Fonte: http://www.vivaolinux.com.br/artigo/A-verdade-sobre-as-ACLs-do-Squid/?
pagina=1

Você também pode gostar