Publicada por robertogmj em 29/05/2007 - 13:50h:
* robertogmj usa Ubuntu

Boa tarde pessoal... Bem sou novato no Linux mais peguei logo uma bomba pra resolver, Bem vamo lá: Na empresa onde trabalho foi instalado um servidor com sistema Linux e ta funcionando ok. Só que nao fui eu que instalou e só me incumbiram de instalar o Squid só que to me atrapalhando na hora de instalar o Squid, pois quero bloquear o msn e orkut. Já peguei alguns tutoriais e passo a passo fui seguindo o tutorial de instalação do squid. nao tive nenhuma mensagem de erro durante a instalação nem durante a configuração do squid.conf só que o site nao bloqueia continua como se nada tivesse instalado, oq faço? Tem alguma coisa que faço pra o Squid começar a funcionar ou ser ativado? tem como eu testar minha instalação? Se vocês puderem me ajudar eu agradeceria muito...

Atenciosamente;

Roberto G M Junior

  
 
Resposta de B_E_R_G em 29/05/2007 - 14:35h:
* B_E_R_G usa Fedora
* B_E_R_G tem conceito: 9.0
 


Brother abaixo vai uma configuração basica e funcional do squid, essa mesma configuração eu estou usando atualmente com algumas atualizações. Espero ter ajudado.

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.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.

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.

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.
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.


  


ATENÇÃO: Antes de contribuir com uma resposta, leia o artigo Qualidade de respostas e certifique-se de que esteja realmente contribuindo com a comunidade. Muitas vezes o ímpeto de contribuir nos leva a atrapalhar ao invés de ajudar.

Contribuir com resposta



CAPTCHA
[ Recarregar imagem ]

Digite o código acima:

  
* Nota: só é possível enviar respostas usuário que possui conta e esteja logado com ela, caso contrário sua mensagem será perdida.