Linux slogan
Visite também: BR-Linux.org · Dicas-L · NoticiasLinux · SoftwareLivre.org · UnderLinux · BestLinux
» Screenshot
Linux: Xsnow
Por blehhh



» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha

» Wallpaper
Linux: Got Linux?
Por percival


Artigo

A verdade sobre as ACLs do Squid
Linux user
malacker
24/05/2006
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.
Por: Djair Dutra C. Jr.
[ Hits: 45097 ]
Conceito: 9.7   Linux conceitoLinux conceitoLinux conceitoLinux conceitoLinux conceito + quero dar nota ao artigo

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.

Navegação
   1. Entendendo como o Squid lê as ACLs
   2. Montando uma rede baseada numa lista de bloqueios
   3. Montando uma rede baseada numa lista de exceções
   4. Redirecionando

Outros artigos deste autor

Leitura recomendada

Comentários
Comentário enviado por leoberbert em 24/05/2006 - 19:35h:

Um excelente artigo bem explicado e resumido!!

Parabéns pelo seu excelente artigo amigão!!!

um Abraço!!!

Comentário enviado por wagner05 em 24/05/2006 - 22:12h:

Cara muito bom mesmo. Agora para quem intende de programação vai uma ajudinha ao seu contexto é como se fosse comandos de:
se ou if (se prefirir) ele usa a mesma logica se nao atende a condição passa para a proxima.

espero ter ajudado!


Comentário enviado por mordecai em 24/05/2006 - 22:59h:

Artigo nota 10 !!!!

Esse vai para os favoritos

[]'s

Comentário enviado por leoberbert em 25/05/2006 - 08:53h:

uma pequena correção e crítica:

Aonde vc coloca as maquinas liberadas por IP eu não concordei, pois se um engraçadinho trocar os IPS da maquina ele vai poder usufruir dos privilégios dos demais, então recomendo que vc coloquei assim pelo ENDREÇO MAC:

Ao invés de :

acl acesso_total src "/etc/squid/acesso_total"
acl acesso_restrito src "/etc/squid/acesso_restrito"

Coloque:

acl acesso_total arp "/etc/squid/acesso_total"
acl acesso_restrito arp "/etc/squid/acesso_restrito"

E dentro dos respectivos arquivos vc joga o endereço MAC de cada Placa de rede. Acho assim mais seguro.

Abraços!!!

Comentário enviado por psyl0n em 25/05/2006 - 09:07h:

cara .,perfeito , show mesmo parabens

Comentário enviado por rebinat em 25/05/2006 - 09:34h:

to com um problema grave:

eu uso proxy transparente e bloqueio algumas coisas em meu servidor...
mas tem um engraçadinho que entra nas opções de proxy do navegador e colocar um proxy que pegou na internet e passa numa boa...

lembro que uso o iptables pra redirecionar o trafego da porta 80 para a porta 3128

Comentário enviado por econt_linux em 25/05/2006 - 11:56h:

Camarada!!

Parabéns pelo seu artigo, realmente vai ajudar muita gente, inclusive eu.

Aproveitando a ocasião, eu gostaria de saber se existe aqui ou em qq outro lugar um artigo que explique todos os tipos de ACL´s e suas funções. Pois por exemplo essa "arp" que o nosso amigo leoberbert citou eu nunca havia visto.

Com seu artigo e esse outro explicando cada ACL vai ficar muito fácil configurar um proxy do jeito que quisermos.

Flw galera!!

Cledson

Comentário enviado por internero em 25/05/2006 - 17:27h:

leoberbert,

se um engraçadinho tem direitos para alterar o IP da máquina ele também tem direitos de alterar o MAC da placa de rede, não?

Infelizmente não há uma forma 100% segura. Apesar disso, sim, eu concordo contigo: MAC é preferível no lugar dos IPs.

ótimo artigo! +favoritos :)

[]s!

Comentário enviado por leoberbert em 25/05/2006 - 22:03h:

internero,

VC é doido? ENDEREÇO MAC só existe um para cada placa. é a primeira vez que eu ouço isso na minmha vida. Naum tem como mudar igual IP. Era paar vc saber disso. Estuda mucado de hardware!!!

Abraços

Comentário enviado por agk em 26/05/2006 - 11:00h:

Muito bom o artigo, é de grande valia para quem está começando.
Para que quiser saber mais sobre as acl's www.squid-cache.org.
Quando a mudar o Mac da placa de rede tem como sim, no GNU/Linux é muito simples, no windows precisa instalar alguns "programinhas".
Não vou dizer aqui como se faz, mas para quem quiser saber a resposta, no GNU/Linux um man ifconfig lhe dá a resposta! :D
[ ]'s


Comentário enviado por flipe em 27/05/2006 - 12:35h:

se não me engano, tem como mudar MAC sim, já li sobre isso!

econt_linux:
http://www.linuxman.pro.br/squid/ - muita coisa em português, versão 2.4 do squid!

http://squid.visolve.com/squid/squid24s1/contents.htm - oficial para a 2.4
http://squid.visolve.com/squid/squid30/contents.html - oficial para a 3.0

algo interessante de dizer, é que em acls.... a regra só suporta até dois alvos!...

acl exemplo src "/etc/squid/exemplo"
acl exemplo 2 src "/etc/squid/exemplo2"
acl exemplo 3 src "/etc/squid/exemplo3"
acl exemplo 4 url_regex -i "/etc/squid/exemplo4"
acl exemplo 5 url_regex -i "/etc/squid/exemplo5"

http_access allow exemplo exemplo2 - correto
http_access deny exemplo3 -correto
http_access allow exemplo2 exemplo3 exemplo5 - não funciona
http_access deny all

falou!

Comentário enviado por slacklex em 27/05/2006 - 12:52h:

Excelente artigo, ótimo!! E quanto a possibilidade de mudar o MAC existe essa possibilidade sim e de mais de uma forma :-) Abs..

Comentário enviado por malacker em 30/05/2006 - 13:52h:

Olá!

Gostei de ver a discussão aberta partindo do artigo que escrevi e o bom deste site é isso. Quaisquer erros, informações adicionais ou dúvidas são livremente publicadas e só têm a enriquecer a consulta de quem busca alguma informação.
A respeito do caso do controle de clientes por MAC, faço de uma maneira diferente. Como eu inicio o squid sempre através do script contido em /etc/rc.d/init.d/squid (start, restart e reload), apriveitei para colocar um controle de MAC (com iptables) dentro deste script, no qual ele vai buscar os dados em um arquivo com ip e mac.
O Exemplo que citei no artigo foi o mais simples possível, por isso falei apenas em controle por IP, mas quem desejar ver como é feito este controle de MAC dentro do /etc/rc.d/init.d/squid, posso enviar um e-mail.
Uma vez já usei apenas o controle do squid, mas o usuário ainda pode acessar SSH, FTP, etc. Portanto, um bom controle de clientes deve ter (no mínimo) uma dobradinha entre squid e iptables (com ip + mac). Só o squid para controlar mac e ip não dá.

Agradeço a todos!

Comentário enviado por ggarauj em 17/06/2006 - 19:13h:

Cara deu tudo certo, so to tendo um problema que o squid, nao esta bloqueando os download´s, tipo, entro no siete da receita federal e/ou superdownload´s, eu ainda consigo baixar os arquivos saca!! o que devo fazer para bloquear??????

Comentário enviado por malacker em 17/06/2006 - 22:33h:

A foma correta de criar uma lista de extensões é a seguinte:
*.exe$
*.avi$
*.mp3
O (*) asterisco no início da extensão indica que não importa o conteúdo anterior à extensão e o ($) sifrão no final indica que este é o final da linha, ou seja, ele vai bloquear download de arquivos, como em www.meusite.com.br/aplicativos/flashget.exe
Se você não usar o sifrão, o squid pode bloquear o site www.executivos.com.br só pq no meio da URL tem (.exe).

Comentário enviado por mau_smo em 21/06/2006 - 11:24h:

parabens!! bom artigo, bem explicado

Comentário enviado por mau_smo em 21/06/2006 - 11:32h:

ahhh e a respeito do que o agk falou... a alteração do MAC tem como fazer sim.. e bem facil..

Comentário enviado por rafaelmontek em 31/07/2006 - 12:05h:

Tem como eu limitar o download de arquivos por ip? Tipo tais ips só podem solicitar downloads de até 5 mb! Poder ser?

Comentário enviado por rickones em 04/12/2006 - 22:26h:

Cara, muito bom esse artigo so que to com um problema... Segui os passos direitim e talz, só que não obtive sucesso...Estou trabalhando aqui a pouco mais de 2 meses, e verifiquei que o ip é distribuido via DHCP.Será que isso tem haver velho??? Obrigado...

Comentário enviado por dmmlopes em 31/01/2007 - 17:34h:

UM DESAFIO PRA TODOS VCS !!!!!

Estou com o squid e iptables instalados..
Está tudo funcionando perfeitamente com autenticação....criei uma acl badwords, baddomains e inclui vária palavras e varios dominios e neguei o uso, posteriormente criei uma acl valid domains e inclui os nomes de dominios válidos que eu quero que o usuário tenha acesso, na sequencia criei uma outra acl users com os nomes dos usuários permitindo a navegação ... até ai tudo bem, todo o dominio ou palavra que contiver nas acls criadas ele bloqueará, agora as que não estão listadas nos arquivos badwords e baddomains ele navega normal ai está a chave da questão... como faço para esses usuários usarem somente os sites na qual eu liberei na acl validdomains ????

Ex:

acl badwords "/etc/squid/badwords"
acl baddomains "/etc/squid/baddomains"
acl validdomains "/etc/squid/validdomains"
acl users proxy_auth "/etc/squid/users"

http_access deny badwords
http_access deny baddomains
http_access allow validdomains
http_access allow users

Para resolver essa questão pensei em criar grupos de usuários mas não tentei ainda...

Comentário enviado por econt_linux em 31/01/2007 - 18:02h:

Camarada!

Você tem que inverter a ordem das suas ACLs. Se eu entendi direito você quer bloquear tudo, exceto os domínios listados na ACL "validdomains" e os usuários da ACL "users"?? Certo?
Se for isso, deixe seu arquivo assim:

acl all src 0.0.0.0/0.0.0.0
acl validdomains "/etc/squid/validdomains"
acl users proxy_auth "/etc/squid/users"

http_access allow validdomains
http_access allow users
http_access deny all


Dessa forma o squid irá liberar tudo que estiver no validdomains, se não encontrar nada nessa acl ele lê a próxima, que é o usuario. Caso o usuario nao esteja listado nessa acl entao ele bloqueia (deny) tudo (all).

Espero que seja isso!

Abraço.

Cledson.

Comentário enviado por semnome em 17/04/2007 - 16:10h:

Para resolver essa questão... para esses usuários usarem somente os sites na qual eu liberei na acl validdomains?
acl badwords "/etc/squid/badwords"
acl baddomains "/etc/squid/baddomains"
acl validdomains "/etc/squid/validdomains"
acl users proxy_auth "/etc/squid/users"

http_access deny badwords
http_access deny baddomains
http_access allow validdomains users



Comentário enviado por marcus_quintella em 24/07/2007 - 14:54h:

Parabéns pelo artigo. Pra quem está começando a caminhar nessa área ajuda bastante. Vou tentar implementar na empresa de acordo com o artigo.

Comentário enviado por PedroWakeman em 26/07/2007 - 16:14h:

Excelente Artigo, muito obrigado nele, encontrei nele tudo o que eu precisava.

Valeu!!!

Comentário enviado por sektor em 03/09/2007 - 17:20h:

muito bacana seu artigo....só uma pergunta o que acontece com o ip 192.168.1.10 ? que regra se aplica a ele?

Comentário enviado por tarcisioman em 12/09/2007 - 13:34h:

Cara, vlws mesmo pelo artigo.
Me ajudou e muito, estava tentando redirecionar as páginas de erro com deny_info só que ele não aceitava as exceções, a sua explicação foi bastante útil sobre como o squid lê as acl's. Vlws mesmo kara!

Comentário enviado por irizan em 27/09/2007 - 17:00h:

me ajudem estava criando uma regra de acesso total para minha maquina ip 172.31.200.2

dentro do arquivo squid.conf

coloquei: #acesso_total
acl acesso_total src "/etc/squid/acesso_total"
http_access allow acesso_total

depois crie um arquivo no squid com nome acesso_total e editei mei ip dentro do arquivo........

resultado..nao deu certo o q fiz de errado ??????

Comentário enviado por thelinux em 04/10/2007 - 10:24h:

Excelente artigo.

Comentário enviado por chikinho_fenix em 29/02/2008 - 14:24h:

colega tenho uma duvida, segui seu tutorial, e esta tudo funcionando perfeitamente, porem utilizo um rede, sem fio e no meio ha uma repetidora, entao ser eu fizer o controle por endereço mac, vai funcionar, ja que as requisiçoes vinda da repetidora, vem com endereço mac do radio da estaçao repetidora, fiz por endereço ip, mas nao esta muito seguro, pois tem algum espertinhos que mundam de ip, e causa confilto de ips, ou conseguem navegar tranquilamente.

obrigado

Francisco Raimundo

Comentário enviado por le.garrido em 01/04/2008 - 16:39h:

queria fazer com que um grupo fosse liberado por um arquivo de palavras e outro grupo fosse liberado por outro arquivo de palavras. Dois grupos de usuários distintos. Ex: grupo ip_proibido entrará apenas em sites que estão no arquivo libera1 e grupo ip_liberado entrará apenas em sites que estão no arquivo libera2. Como posso fazer isso?

Comentário enviado por luan1107 em 29/05/2008 - 11:45h:

galera, eu instalei o squid no win server 2003, sei q vcs vão achar melhor um linux mesmo, eu tmbm acho, mais ficaria inviavel, ja q uso active directory.

meu problema->
*qndo configuro o squid.conf no diretorio etc, da maneira basica como o default de instalação, o cache e proxy funcionam;

*qndo eu vou adicionar as restrições, dá erro, acho q é porque no windows devo me referenciar aos arquivos de uma maneira diferente, tipo: acl acesso_total src "/etc/squid/acesso_total"
no windows será q fica assim mesmo? ou:
acl acesso_total src "c:/squid/etc/squid/acesso_total" (a segunda pasta squid eu criei pra guardar esses arquivos)

e queria saber tmbm a exteção desses arquivos, eles são tmbm .conf? ou um .txt comum?

desculpe se não fui claro, mais é por aí...
obrigado

Comentário enviado por agk em 30/05/2008 - 09:11h:

Já tentou assim:

acl acesso_total src "c:\squid\etc\squid\acesso_total"


Contribuir com comentário
  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Contribuir com: [ Artigo | Conf | Dica | Pergunta | Script | Screenshot | Simulado | Wallpaper ]
Responsável pelo site: Fábio Berbert de Paula - Copyleft© 2002-2008 Viva o Linux.com.br

Viva o Linux

A maior comunidade Linux do Brasil! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.