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: 294.754 ]

Por: Racy Rassilan em 03/09/2009


Configurando o servidor proxy Squid no servidor



A configuração do servidor é muito simples, mas precisamos prestar atenção nos passos a serem realizados para que possamos ter um servidor configurado e rodando de modo a cumprir com o seu objetivo, que é administrar o tráfego de conteúdo na internet.

1° passo:

Instalar o Squid. Para isso basta estarmos no shell como root e digitarmos o seguinte comando:

# apt-get install squid

E esperar até que ele termine de baixar e instalar o pacote.

2° passo:

Agora vem a parte mais crucial, que é a edição do arquivo que nos garantirá todo o controle entre as máquinas clientes e o mundo externo. Este arquivo é o /etc/squid/squid.conf. Estando no shell como root digite:

# vim /etc/squid/squid.conf

O vim abrirá o arquivo e você notará que é uma arquivo gigantesco, de mais de 3.000 linhas, mas não se assuste, pois a maior parte dessas linhas são comentários. Ele parece mais um manual do que um arquivo de configuração... rsrsrs

As linhas que devem ser editadas ou criadas são as seguintes:

http_port 3128

Quando você conseguir encontrar essa linha ela pode estar comentada com um "#" antes dela, então você deve removê-lo. Esta linha indica ao Squid em que porta ele ficará escutando as requisições de tráfego. Na internet a mais comum é a porta 3128.

cache_dir

Esta linha pode estar comentada ou nem existir. Se tiver comentada, basta remover, se não existir, basta criá-la e complementá-la da seguinte forma:

cache_dir  ufs /var/spool/squid 100 16 256

Esta configuração serve para que o servidor reserve um espaço em disco para armazenar as páginas mais navegadas pelos clientes, fazendo com que o acesso às mesmas seja mais rápido e que o servidor só as atualize se realmente houver essa necessidade, diminuindo, assim, o tráfego na internet. O 100 diz que será reservado 100 MB em disco, o 16 que poderá haver 16 diretórios e o 256 indica o número máximo aceito de arquivos por diretório.

cache_mem

Aqui será especificado o tamanho de memória RAM que o servidor disponibilizará para realizar as consultas. Essa linha deve ficar assim:

cache_mem 8 MB

Geralmente 8 MB de memória.

visible_hostname

Esta linha serve para informar qual servidor bloqueou o acesso a um site, exemplo: a máquina 192.168.10.104 tentou acessar o Orkut e não conseguiu devido ao proxy ter barrado essa solicitação, então ao navegador do cliente é informado o servidor que barrou, para que ele não pense que foi um erro do computador. Essa linha deve ficar assim:

visible_hostname lab1-pc01

No caso meu servidor se chama: lab1-pc01.

Atenção: Geralmente as linhas a seguir devem ser criadas por você, se elas já existirem, comente-as e faça com que a suas sejam as válidas no arquivo. Para comentar uma linha basta adicionar um "#" na linha que desejar que seja um comentário.

acl máquinas src 192.168.10.0/24

Com esta linha estamos criando uma ACL de nome "máquinas", onde esta define que "máquinas" é um grupo de máquinas que vão do intervalo de 192.168.10.0 até 192.168.10.244.

acl proibir url_regex "/etc/squid/proibidos/sites_proibidos"

Com esta linha estamos criando uma ACL de bloqueio chamado "proibir", que posteriormente será aplicada ao grupo "máquinas". Note que o comando url_regex está fazendo referência a um arquivo chamado sites_proibidos, onde este arquivo contém os endereços que devem ser bloqueados. Mais adiante vou ensinar como este arquivo deve ser criado. Também ensinarei como colocar esse arquivo em outra máquina que não seja a que tenha o servidor Squid instalado.

http_access deny máquinas proibir

Esta linha está aplicando a ACL de bloqueio chamada "proibir" à acl "máquinas", bloqueando assim, este grupo de máquinas.

acl lab1 src 192.168.10.0/24

Agora que definimos o que não pode acessar, precisamos por último definir o que pode ser acessado, senão não irá acessar nada, hehehe. Para isso estou criando uma ACL que tem a mesma faixa de IP da ACL "máquinas", porém eu preciso especificar um nome diferente, pois as ACLs nunca podem ter o mesmo nome.

http_access allow lab1

Por fim estou liberando a ACL "lab1" para acessar qualquer conteúdo (site) que não seja os que estão dentro do arquivo de bloqueio.

3° passo:

Este passo é o mais simples: salvar o arquivo! ;-)

Página anterior     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

Configurar servidor PPPoE (Ubuntu)

Configurando NFS + NIS (Ubuntu)

Leitura recomendada

Gerenciando relatórios do SARG

Squid + proxy transparente + autentificação + SSL

Tutorial de instalação do Squid no CentOS

Instalando o Squid + SquidGuard

Autenticando Squid utilizando MySQL

  
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