Configurar servidor proxy Squid (Ubuntu)

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.

[ Hits: 295.323 ]

Por: Racy Rassilan em 03/09/2009


Definição



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.

    Próxima página

Páginas do artigo
   1. Definição
   2. Configurando o servidor proxy Squid no servidor
   3. Criando o arquivo de bloqueio no servidor
   5. Finalização
Outros artigos deste autor

Configurando NFS + NIS (Ubuntu)

Configurar servidor PPPoE (Ubuntu)

Leitura recomendada

ECache - O cache efetivo

Squid 2.6 + HTB-tools com cache full

Compilando o Squid com autenticação PAM

Proxy Squid Transparente

Instalando o Squid + SquidGuard

  
Comentários
[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 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.

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

[16] Comentário enviado por souzarm em 26/07/2012 - 10:44h

Obrigado.


[17] Comentário enviado por epiros em 29/03/2013 - 21:44h

Parabéns pelo artigo me ajudou bastante !!!

[18] Comentário enviado por hepta em 18/07/2013 - 18:37h

Exelente artigo Racy Rassilan os meus parabéns.

Será que esta configuração também servirá para Ubuntu 12.04 LTS 64 / Ubuntu 12.04 LTS 64 Server?

Desculpem a questão de noob, mas é que sou de fato.


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

Segue meu squid.conf:

-----------

auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=dominio,dc=local" -D "cn=squid,cn=Users,dc=dominio,dc=local" -w "password" -f sAMAccountName=%s -h 192.168.0.1
auth_param basic children 5
auth_param basic realm Digite suas credenciais para acessar a internet
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
#
external_acl_type gruposad %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=dominio,dc=local" -D "cn=squid,cn=Users,dc=dominio,dc=local" -w "password" -f "(&(objectclass=person)(sAMAccountName=%v)(merberof=cn=%a,cn=Users,dc=seap,dc=intranet))" -h 192.168.0.1
#
acl password proxy_auth REQUIRED
#
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 192.168.0.0/24
#
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
#
acl proxyadmins external gruposad proxy_adm
acl proxyusers external gruposad proxy_users
#
acl sites_sem_autenticacao dstdom_regex -i "/etc/squid/arquivos/sites_sem_autenticacao"
#
acl downloads_proibidos urlpath_regex -i "/etc/squid/arquivos/downloads_proibidos"
#acl downloads_permitidos urlpath_regex -i "/etc/squid/arquivos/downloads_permitidos"
#
acl palavras_proibidas url_regex -i "/etc/squid/arquivos/palavras_proibidas"
acl palavras_permitidas url_regex -i "/etc/squid/arquivos/palavras_permitidas"
#
acl sites_proibidos dstdom_regex -i "/etc/squid/arquivos/sites_proibidos"
#acl sites_permitidos dstdom_regex -i "/etc/squid/arquivos/sites_permitidos"
#
acl urls_proibidas url_regex -i "/etc/squid/arquivos/urls_proibidas"
#acl urls_permitidas url_regex -i "/etc/squid/arquivos/urls_permitidas"
#
http_access allow sites_sem_autenticacao
http_access allow proxyadmins
http_access allow palavras_permitidas
http_access deny downloads_proibidos
http_access deny palavras_proibidas
http_access deny sites_proibidos
http_access deny urls_proibidas
http_access allow password proxyusers
#
http_access allow manager localhost
http_access deny manager
#
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
#
http_access deny all
#
icp_access allow localnet
icp_access deny all
#
http_port 3128
#
hierarchy_stoplist cgi-bin ?
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320

-----------

[21] Comentário enviado por clemersonsantos em 22/04/2014 - 13:53h

Olá, eu segui o passo a passo mas meu proxy não libera o acesso a sites que sejam https, como faço para poder liberar? Desde já obrigado.

[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!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts