You are on page 1of 9

Entendendo como o squid lê as ACLs

Fonte: http://www.squid-cache.org.br/index.php?option=com_content&task=view&id=91&Itemid=27

Sumário
Montando uma rede baseada numa lista de bloqueios........................3
Montando uma rede baseada numa lista de exceções.........................5
Redirecionando.....................................................................................7
Final......................................................................................................7
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 pára. 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_rstrito = 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 detas 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 sequência como o squid lê as acls.
Se ele lê a primeira (acesso_total) e ninguém se aplicar a ela, então passará
para a segunda. Se nesta tb ninguém se aplicar 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 issso, divida sua rede em quem pode
ter acesso tota 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 desvantegem 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 acesar.
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/blouqeado"

Depois de declarar, ative as acls na mesma sequência doexemplo abaixo:

http_access allow acesso_total

http_access allow liberado

http_access deny download

http_access deny bloqueado

http_access alow 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 primiera regra e será
LIBERADO o acesso a qualque site. Nenhuma das regras seguintes serão
aplicadas a elee 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 nehuma 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 acessr 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ãohá 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
pára 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 dese 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 antrior. 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 demias 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 primiera regra e será
LIBERADO o acesso a qualque site. Nenhuma das regras seguintes serão
aplicadas a elee 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 hé nehuma
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
tipode 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 verdde estão tendo seus sites
blouqeados. 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 doretó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.

Final
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. Se mesmo assim,
houverem dúvidas, dicas ou sugestões estarei à inteira disposição.

You might also like