O
Squid é um servidor proxy utilizado para gerenciar o acesso a internet (rede externa), pois ele implementa um controle sobre o conteúdo que deve ou não ser acessado pelas máquinas clientes gerenciadas por este servidor.
Funcionamento
O
Squid trabalha com ACLs (Listas de Controle de Acesso) e através dessas listas de controle ele se torna uma poderosa ferramenta na administração de tráfego de conteúdo entre a rede interna e a externa.
São através dessas listas que conseguimos criar e definir o controle de acesso a internet de forma simples e flexível, tornando o Squid uma ferramenta precisa em seu objetivo, que é basicamente bloquear o acesso a determinados sites, que podem ser fornecidos dentro de um arquivo de texto, e os que não estiverem dentro deste arquivo o Squid reconhece que são sites de livre acesso.
O Squid também conta com um cache que serve para armazenar sites visitados, dando a impressão ao usuário de estar navegando mais rapidamente, que de fato é verdade, pois ele está buscando um site ou uma parte do site que já está salva dentro do servidor e as outras partes ou sites que ainda não estão, o servidor irá buscá-los e armazená-los até um certo limite.
Tipos de ACLs
As ACLs são definidas da seguinte forma:
acl nome tipo string | "arquivo"
Existem vários tipos de ACL que podemos utilizar, abaixo temos os mais comuns:
- srcdomain - tipo indicado para verificar o domínio da máquina cliente. Os domínios serão obtidos por resolução reversa de IP, o que pode causar atrasos para a resposta da requisição. A definição do domínio deve ser feita da seguinte forma: ".meudominio.com.br", não podendo ser esquecido o "." (ponto) no início;
- time - usado para especificar dias da semana e horários. Os dias da semana são definidos através de letras que os representam, e os horários através de intervalos na forma hora:minuto_inicio-hora:minuto_final. Os dias da semana são especificados assim: S - Sunday (Domingo), M - Monday (Segunda-feira), T - Tuesday (Terça-feira), W - Wednesday (Quarta-feira), H - Thursday (Quinta-feira), F - Friday (Sexta-feira) e A - Saturday (Sábado);
- src - tipo utilizado para indicar endereços IP de origem. Pode-se especificar um endereço de rede, como 192.168.16.0/24, um endereço de um determinado host, como 192.168.16.10/24 ou uma faixa de endereços, como 192.168.16.10-192.168.16.20/24;
- dst - semelhante ao tipo anterior, mas está relacionada ao endereço de destino;
- dstdomain - usado da mesma forma que srcdomain, entretanto com relação ao destino;
- srcdom_regex - avalia o domínio usando expressões regulares. Seu uso é semelhante às duas anteriores, acrescentando a flexibilidade do uso da expressão regular;
- dstdom_regex - usado da mesma forma que srcdom_regex, entretanto com relação ao destino;
- url_regex - este tipo percorre a URL à procura da expressão regular especificada. Deve ser observado que a expressão é case-sensitive, para que seja case-insensitive deve ser usada a opção -i. É o tipo mais comum de ACL, dada a flexibilidade proporcionada pelo uso de expressões regulares;
- urpath_regex - tipo semelhante à url_regex, mas procura a expressão regular na URL sem levar em conta o nome do servidor e o protocolo, isto quer dizer que a procura será feita apenas na parte da URL após o nome do servidor, como por exemplo, na URL http://www.servidor.com.br/pasta/sexo.html, a procura será realizada apenas na parte /pasta/sexo.html. Ela é também case-sensitive, para que seja case-insensitive deve ser usada a opção -i;
- port - realiza o controle pela porta de destino do servidor, neste tipo deve ser especificado o número da porta;
- proto - serve para especificar o protocolo, como por exemplo FTP ou HTTP;
- method - especifica o tipo de método usado na requisição, como por exemplo GET, CONNECT ou POST;
- browser - usa uma expressão regular para tentar "casar" com os dados do cabeçalho HTTP e combinando então com o navegador utilizado pelo cliente;
- ident - Realiza o controle de acesso baseado no nome do usuário. Este tipo requer um servidor Ident rodando na máquina do cliente;
- ident_regex - semelhante a ident, mas utilizando expressão regular;
- proxy_auth - tipo usado para implementar autenticação de usuários no proxy. A autenticação é feita com uso de softwares externos. Podem ser passados os nomes dos usuários ou usada a opção REQUIRED para que seja autenticado qualquer usuário válido;
- snmp_community - tipo usado para especificar o nome da comunidade SNMP para que se possa monitorar o Squid através deste protocolo;
- maxconn - especifica um limite de conexões vindas de um determinado cliente, interessante para uso com outras ACLs de forma a limitar quantidades de conexões para determinados endereços específicos;
- req_mime_type - especifica uma expressão regular para ser verificada no cabeçalho da requisição em busca de um tipo MIME que coincida com o especificado;
- arp - tipo usado para construir lista de acesso baseada no MAC Address da interface de rede do cliente, ou seja, em vez de endereço IP da placa, usa-se o seu endereço MAC.
[1] Comentário enviado por
lucasguara em 03/09/2009 - 16:22h:
Olá parabéns pelo artigo estou com uma duvida talvez vc pode me ajudar to querendo instalar o squid e configurar aqui na minha rede tenho duas placas e rede na minha maquina a internet chega na eth1 e a rede interna e eth0 como faço para direcionar a internet pra eth0 rede interna ? e através de rota ou iptables estou começando agora
desde já obrigado
[2] Comentário enviado por
nunesdutra em 03/09/2009 - 17:10h:
Olá parabens pelo artigo.
Lucas voce pode direcionar a rede através do IPTABLES. a regra é essa aki:
iptables -v -t nat -I PREROUTING -i eth1 -p tcp --dport 80 -j ACCEPT
Qualquer duvida a mais poste aki!!!
[3] Comentário enviado por
nox6000 em 03/09/2009 - 23:30h:
Ola Lucassquara.
Olha como o amigo nunesdutra falou é simples vc compartilhar a internet, mas vou lher dar duas dicas que acredito que uma delas sera 100% perfeita para vc.
Primeira Dica:
Se o seu modem for roteado e já realiza a conexão com a internet sozinho
use esse codigo dentro do arquivo rc.local que fica no diretorio /etc
# Compartilha a Conexão
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -eth1 -j MASQUERADE # note que eth1 é qual palca de rede esta conectada diretamente ao modem se for a eth0 troque por eth0 se for eth1 deixe eth1 lembrando que isso é para quando seu modem é roteado (Conecta sozinho).
# Abre para a rede local:
iptables -A INPUT -p tcp --syn -s 192.168.10.0/255.255.255.0 -j ACCEPT
# Fecha o resto da rede:
iptables -A INPUT -p tcp --syn -j DROP
exit 0
Feito isso basta salvar o arquivo. Então vc terar sua placa eth1 recebendo a internet do modem e liberando para a rede atraves da eth0.
Segunda Dica:
Caso seu modem não seja roteado siga um artigo da minha autoria que explica como fazer a confgiração de um discador PPPoE e compartilhar a internet
Artigo:
http://www.vivaolinux.com.br/artigo/Configurar-servidor-PPPoE-(Ubuntu)?pagina=1
ATENÇÃO: Neste artigo a unica diferença é que eu não uso eth1 pra receber a internet do modem e liberar por eth0 e sim o inverso eth0 para eth1 e na hora de adicionar os comandos que fazem o compartilhamento eu não coloco nem eth0 nem eth1 e sim ppp0.
arquivo: rc.local que fica no diretorio /etc
# Compartilha a Conexão
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -ppp0 -j MASQUERADE # note que agora eu utilisei ppp0, pois minha conexão é feita via ppp0.
# Abre para a rede local:
iptables -A INPUT -p tcp --syn -s 192.168.10.0/255.255.255.0 -j ACCEPT
# Fecha o resto da rede:
iptables -A INPUT -p tcp --syn -j DROP
exit 0
Leia o artigo que tenho certeza que vc ira conseguir e ficar muito feliz
Artigo:
http://www.vivaolinux.com.br/artigo/Configurar-servidor-PPPoE-(Ubuntu)?pagina=1
[4] Comentário enviado por
luizvieira em 04/09/2009 - 08:19h:
Bom, artigo, conciso e objetivo!
Parabéns!
[ ]'s
[5] Comentário enviado por
nox6000 em 04/09/2009 - 08:49h:
Obrigado Luiz Vieira.
[6] Comentário enviado por
fernandofranco em 04/09/2009 - 10:25h:
meu squid está dando a seguinte mensagem : não suporta proxy transparent
alguem poderia me ajuda
[7] Comentário enviado por
removido em 04/09/2009 - 10:46h:
Alegria, alegria, olá como tá!
Como realmente saber se o servidor esta fazerndo cash efetivamente ? Quais comandos ? como testar a fundo um servidor recem instalado ?
[8] Comentário enviado por
HelderC em 05/09/2009 - 00:43h:
Pessoal, adorei o artigo, mas tenho duas dúvidas..
1- Para redirecionar a rede interna (eth0) da porta 80 para a porta 3128 (porta do squid) como faço?
2- Redirecionando para a porta 3128, todo acesso a sites passa pelo squid certo?
muito obrigado pela ajuda!
[9] Comentário enviado por
Da Hora em 08/09/2009 - 01:50h:
Esse artigo mostra o squid e a configuração do mesmo de um forma simples e objetiva, muito bom. Parabéns nox6000.
@HelderC
Acho que a regra abaixo vai te ajudar, ela redireciona todo o tráfego gerado em eth0 com destino a porta 80 e manda para a porta 3128, que é a porta do squid. Não esquecendo antes de dar o comando modprobe iptable_nat.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
[10] Comentário enviado por
Marco André em 18/09/2009 - 16:07h:
Muito bom o artigo. Como não tenho acesso a um servidor para testes, vou tentar implementar em máquinas virtuais.
[11] Comentário enviado por
s.r.e.lan house em 23/10/2009 - 13:35h:
Muito bom seu artigo estou tentando configurar o squid através dele só que estou esbarrando no terceiro tópico, não consigo salvar o arquivo bloqueio na pasta squid como você fez no artigo.
[12] Comentário enviado por
nox6000 em 23/10/2009 - 13:50h:
Ola s.r.e.lan house,
Para instalar configurar e etidar os arquivos de configuraçõs vc deve sempre
estar como super usuário "root" do contrario já mais conseguira editar e salvar
sempre surgira a mensagem dizendo que vc não tem permissão para tal.
[13] Comentário enviado por
zelongatto em 03/02/2010 - 21:44h:
parabens.. otimo artigo
obrigado
t+
[14] Comentário enviado por
May_gyn em 07/04/2010 - 10:36h:
Ola,
tentei utilizar esse código e não deu certo, minha máquina esta comunicando com o servidor do proxy, mas não esta tendo acesso a internet, porem meu servidor esta comunicando com a internet. Minha porta de entrada é a eth0 e de saida a eth1. O squid já esta configurado e mesmo desabilitando a passagem pelo proxy nao comunica com a internet...
Alguém poderia me ajudar...
Obrigada
[15] Comentário enviado por
marcos.ths em 17/01/2011 - 22:13h:
caro amigo, otimo o artigo... mas estou com um problema. qndo vejo o diretorio /etc/squid ele esta vazio ... não arquivo nenhum nem mesmo o squid.conf .
estou usando uma maquina virtual (VMWare Player) 512 mb de memoria e 20 gb de espaço ... ubuntu 10 ..
estou instalando o squid normamente não esta dando nehum erro.
se puder me ajudar fico grato.
obrigado