A verdade sobre as ACLs do Squid
Quando estava estudando as ACLs, tive dificuldade pra encontrar algo que mostrasse realmente como elas funcionam. Encontrei dicas de como usar, mas nada que se aprofundasse nos detalhes. Resolvi então escrever este artigo pra esclarecer como o Squid lê as ACLs e como usá-las corretamente.
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:
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.
acl acesso_total src "/etc/squid/acesso_total"
acl acesso_restrito src "/etc/squid/acesso_restrito"
acl bloqueado url_regex -i "/etc/squid/bloqueado"
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
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.
Parabéns pelo seu excelente artigo amigão!!!
um Abraço!!!