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.
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
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.
[2] 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.
[4] 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:
[6] 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
[7] 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.
[9] 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!!!
[10] 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
[13] 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á.
[14] 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??????
[15] 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).
[19] 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...
[20] 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 ????
[21] 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:
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).
[22] 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"
[26] 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!
[29] 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.
[30] Comentário enviado por leandrogar 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?
[31] Comentário enviado por luancfalquetto 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
[34] Comentário enviado por malacker em 07/10/2009 - 15:46h
Deve ter ocorrido algum erro seu nas sua configuração do squid. As explocações das ACLs usadas aqui são exatamente iguais as que eu uso e tenho a mais absoluta certeza de que funcionam perfeitamente. Tenho elas instaladas e em perfeito funcionamento até hoje em servidores com Ubuntu, Fedora, Slackware e Conectiva.
Verifique suas configurações, dê uma olhada no manual do squid e procure um pouco mais de informação antes de condenar uma coisa sem nenhum argumento óbvio.
Dizer que não funciona apenas pq vc testou não é um argumento válido.
Isso é um fórum de discussão, onde a troca de idéias é o principal objetivo assim como o enriquecimento do Linux. Se você realmente encontrou algum problema, reporte-o aqui. Todos agradecem, inclusive eu.
[35] Comentário enviado por giant_trunade em 08/10/2009 - 14:34h
bom eu tenho um grande argumento, desde que eu testei a primeira vez, e vi que as acls nao estavam bloqueando e que sites https (porta 443) nao funcionavam e fui forçado a usar proxy configurado, toda vez que vejo um artigo como o seu, ou vejo "ah, proxy transparente ubuntu server" eu vou e faço igual... nao funciona completamente...
ja cheguei a COPIAR (lembra ctrl+c ctrl+v) os confs, mudando somente dados como ip da rede, e tambem nao funcionou...
OBS:
- as acls de bloqueios (comuns) somente funcionam com proxy configurado, nao funcionam com proxy transparente.
- Ao se utilizar proxy transparente, sites https (e-mails, bancos, etc) nao funcionam... ao se tentar acessar é exibido erro diretamente, ou, a pagina fica carregando até dar o tempo maximo e ela nao poder ser exibida...
- Sim já testei um monte de regras de iptables para tentar fazer funcionar https, nada funcionou...
- As acls de bloqueios por tipos de arquivo mime_types, nao funcionaram, nem mesmo com proxy configurado.
Minha opiniao:
Percebo que o malacker ficou bem p da vida, mas na minha visão (e de muitos outros adm) é que deve existir alguma regra MÁGICA que ninguem ensina para configura-lo perfeitamente, pois todos que pergunto pessoalmente dizem "nao funciona, nem tente...", porem na internet todos atpe hoje criam tutoriais e dicas afirmando que funciona...
nao sei nem o que pensar, a impressao que EU tenho é que está bichado..
[36] Comentário enviado por malacker em 08/10/2009 - 19:11h
OK! Com vc não funciona. Tudo bem...
Infelizmente há algum problema em alguma configuração que está causando este erro com você, porém mas uma vez,
vou afirmar que estas regras funcionam perfeitamente comigo e com muitas pessoas que eu já
enviei o squid.conf por e-mail.
Estas regras foram testadas e funcionam perfeitamente na maioria dos servidores que monto.
Só não as uso em casos específicos, onde este formato de regra não se aplica à necessidade do caso.
Para automatizar a tarefa de configurar um servidor, criei até um script que faz a instalação
das regras, programas, arquivos .conf e cópia dos arquivos. Eu nem olho mais para o squid.conf e para as acls
que têm dentro dele, de tanta certeza de que dá certo. E as scls são as mesmas que eu
coloquei como exemplo no artigo. Realmente, não entendo o motivo deste seu erro.
No seu caso, como as páginas https (443) não abrem, creio que seja alguma regra do iptables,
pois diversas vezes já vi problemas parecidos, mas que foram resolvidos sem mexer
no Squid.
Fora as regras das acls, veja antes se seu Squid está configurado de forma transparente. Se
ele tiver, só depois vá aplicando as regras até chegar a uma conclusão de onde pode ser o erro.
Quanto a ficar "P da vida", não é verdade. Apenas saio em defesa de uma situação na qual
o seu caso tem algum outro problema, mas você simplesmente afirma que o sistema
não funciona.
Quanto a uma regra MÁGICA também não é verdade.
Contribuo há bastante tempo com o aperfeiçoamento do Linux (assim como muitos aqui),
quer seja com um artigo, tirando uma dúvida, perguntando alguma coisa a alguém,
ou desenvolvendo algum programa ou script. É uma imensa satisfação poder ajudar alguém com
alguma informação, bem como ser ajudado também. Jamais eu usaria este espaço para criar
uma coisa utópica, que não funciona. Pensando assim eu estaria perdendo tempo e
subestimando a capacidade dos moderadores deste site, afinal todos os artigos passam
por uma avaliação e só são publicados após serem aprovados por eles.
Quanto a este artigo específico, posso ter a certeza de que ele não está bichado, afinal,
se não funcionasse já teria mais críticas do que elogios, não estaria tão bem posicionado
no google nem teria alcançado o primeiro lugar no site
oficial do Squid no Brasil (www.squid-cache.org.br).
Um abraço!
[37] Comentário enviado por lkcezario em 03/11/2009 - 09:32h
Excelente artigo Djair, e eu aqui batendo cabeça sobre como montar meu squid. Você me mostrou tudo o que eu precisava numa linguagem bem simples e para mim que sou iniciante me ajudou muito.
[38] Comentário enviado por leandrobrunoo em 14/04/2010 - 17:44h
Amigo, estou tentando redireciona uma pagina negada pra um site, exemplo
se tentarem acesssa a pagina do youtube, eles serao levado pra a pagina do google e nao estou conseguindo, por favor oque a de errado com meu cof. segue abaixo uma parte do meu conf
[44] Comentário enviado por blaiser em 08/04/2012 - 18:19h
Notei um erro neste post.
No debian 6.0 quando usa o mecanismo de busca do interne explorer deixa passar as regras, é possivel acessar até um site listado como bloqueado numa boa, agora pelo visto tem que achar um acl de bloqueio de mecanismo de procura.
[46] Comentário enviado por igor_rocha em 12/05/2012 - 03:07h
Cara LeoBerbet, rode este comando em seu terminal como super usuário
ifconfig eth0 hw 00:00:00:00:00:00 onde os 0 representam o endereço MAC que você deseja atribuir a sua interface de rede, neste caso a eth0, pois burlar um endereço MAC é a coisa mais simples do mundo, então por favor, não seja arrogante sem ao menos saber o que esta falando, mandar alguém estudar sem ao menos ter precisão do que se está dizendo é algo muito infantil e grosseiro, se ao menos você estivesse certo, mas mesmo que estivesse também não justificaria tal ato.
[47] Comentário enviado por neutonsp em 17/07/2013 - 14:30h
Fiz igualmente esta na explicação mas me parece que o squid não etá lendo as acls, ele esta bloqueando tudo e pedindo senha e libera somente alguns sites que coloquei na White list.