Este artigo tem por objetivo ensinar como configurar um servidor Squid com configurações mínimas para seu funcionamento adequado. Para isso temos que aprender o que é um servidor proxy Squid e como ele funciona para depois podermos configurá-lo.
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
[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
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
[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?
[9] Comentário enviado por removido 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.
[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.
[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...
[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.
[19] Comentário enviado por hepta em 18/07/2013 - 18:40h
[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
alguma razão em particular para estares a usar a versão 10?
[20] Comentário enviado por soluz em 06/08/2013 - 09:56h
Pessoal,
Preciso de ajuda sobre autenticar o Squid através da base LDAP do Windows Server 2012. Simplesmente não tenho sucesso ao tentar fazer o Squid autenticar através dos grupos do AD.
[22] Comentário enviado por DellOver em 07/08/2016 - 20:49h
nox6000 no caso que vc falou que vai direcionar a conexão de um eth para o outro, esse que vai receber a conexão tem que estar conectado a um switch ou pode ser outro roteador? Estou tentando fazer um rede com oque tenho em mãos no momento e encontro está dificuldade, qualquer ajuda é bem vinda!!!