Squid 3.1.5 com suporte a TPROXY (sem bridge)

Este artigo trata da implantação do TPROXY de forma bem simples, sem o sofrimento de compilar kernel com patch do balabit e mais aquele monte de coisas.

[ Hits: 46.886 ]

Por: Wilker Azevedo em 09/08/2010


Introdução



Uma explicação rápida sobre TPROXY caso o leitor não saiba do que se trata. Quando o Squid faz requisições de páginas pela internet, utiliza o IP do servidor. Ou seja, para a internet é como se o Squid fosse apenas um usuário. Um dos problemas bem conhecidos é o serviço de downloads do MegaUpload, que só aceita 1 download por IP (no modo grátis, é claro). Se um cliente está baixando no MegaUpload, o outro cliente terá que esperar o download concluir para iniciar o seu. Geralmente leva dias.

Mesmo tendo um bloco de IP, o Squid vai substituir o IP do cliente. Mas a proposta do TPROXY é realizar um spoofing, isso quer dizer que vai manter o IP do cliente nas requisições.

Então alguns podem se intrigar pensando: "E como é que a resposta vai retornar para o Squid, sendo que o IP é do cliente?", esta que é a grande jogada! O kernel precisa ter suporte ao TPROXY, do contrário, a resposta vai direto para o cliente e o Squid perde a chance de cachear a página.

O kernel, iptables e o Squid precisam estar compilados com o patch TPROXY, o único que conheço é do balabit.

Já tentei várias vezes compilar e sempre dava problema, até que cansei disso. Fiquei imaginando que uma coisa tão importante e necessária como esta, certamente será colocado de forma nativa nas versões futuras. BINGO!!!

kernel 2.6.28 veio com o patch já incluso, o novo iptables também, e para finalizar... Squid 3.1 (se não me engano).

Existe uma versão do kernel que está com o patch bugado, não me lembro qual é, talvez seja 2.6.28, pois estou utilizando 2.6.29 normalmente.

O melhor de tudo, Não vamos precisar compilar kernel, nem iptables. Apenas o Squid.

Neste artigo não vamos usar o servidor em bridge. Pelo que pude ver na net, só existe um tutorial (pai de todos) explicando o TPROXY, onde compila tudo e coloca em bridge.

Aqui a ideia é criar um servidor Squid roteador (sem bridge, torno a dizer).

Configuração:
  • Slackware 13.1
  • Squid 3.1.5 (já está disponível a versão 3.1.5.1, certamente também funcionará)

    Próxima página

Páginas do artigo
   1. Introdução
   2. Compilando o Squid
   3. Configurar o Squid com TPROXY
Outros artigos deste autor

A Microsoft morreu

Yenka - Mais que um simulador de circuitos eletrônicos

Acabando com o Linux

IBM apresenta Maqetta, uma contribuição open source para HTML5

Engenharia Social - Fios de telefone

Leitura recomendada

Cache Full Squid + WebHTB

Squid + Winbind + Samba no AD - Autenticando por grupos

SQUID: Autenticação em banco de dados MySQL cruzando IP/MAC/USUÁRIO e SENHA

OpenBSD Proxy - Squid, SquidGuard, SquidClamAV e AdZapper

Colocando senha nos gerenciadores do Squid (SARG e MYSAR) de forma simples

  
Comentários
[1] Comentário enviado por guimfonseca em 09/08/2010 - 10:17h

Muito bom isso ai ....

[2] Comentário enviado por snails em 09/08/2010 - 12:30h

Bom artigo....só me ficou duas dúvidas.

Você menciona que o squid não pode trabalhar em bridge. Isso seria deixar ele em Transparent Proxy ?

Outra coisa, você ja tentou fazer balanceamento de carga com esse sistema, em dois links distintos ?

Até mais....

[3] Comentário enviado por cytron em 09/08/2010 - 19:17h

É, faltou umas explicações.

O squid pode trabalhar em bridge, mas neste artigo mostro como configurar o server sem fazer bridge. Em algunas casos colocar o server em bridge não é a idéia. Como na minha rede, não posso deixar o servidor em bridge por alguns outros motivos.

Nesta configuração o squid não está rodando no modo transparent. Observe que no iptables não utilizo desvio pelo nat, mas faço no mangle.

Meu squid faz balanceamento entre outros links, mas para isso utilizo cache parent, de acordo com minha topologia de rede, dessa forma me rende um melhor desempenho. No squid utilizo urlpath_regex para decidir em qual parent deve ser feito a request.

[4] Comentário enviado por giovannikenpachi em 09/08/2010 - 20:21h

Cara muito bom o seu artigo.
Eu também quebrei a cara para fazer funcionar o TPROXY compilando patch kernel + iptables + squid no gentoo e no debian. Nada funcionava direito até que desisti também.

Ainda bem que agora o suporte é nativo, pena que não mecho mais com provedor de internet, mas em todo caso vou colocar o seu artigo nos favoritos.

Vlw.

[5] Comentário enviado por cytron em 11/08/2010 - 13:09h

SÓ PRA CONSTAR:

A próxima versão do squid já veio corrigido o problema de path nos arquivos header (.h) onde não é necessário fazer as alterações.

Outra coisa que notei é sobre a versão 2.7, recentemente já conta também com TPROXY, apesar de não fazer sentido usar essa versão se existe a 3.1 ou 3.2. Inclusive em meus testes o squid 2.7 finaliza inesperadamente sob algumas situações, que parecem estar associadas a requisições "maliciosas" do tipo:

Excess data from "...
Unsupported method '....

Pelo que ví em alguns forums, vírus podem fazer tais requisisões causando um crash no squid. Até mesmo alguns sites.

[6] Comentário enviado por fredbaza em 02/06/2011 - 08:30h

Olá amigo, muito bom seu tutorial.

Esta solução que você nos apresentou pode funcionar no modo transparente?

Só lembrando que não posso fazer nat, pois tenho uma rede de ip's validos.

[7] Comentário enviado por cytron em 07/06/2011 - 10:00h

Este já é o modo transparente.

Agora estou utilizando Slack64 com squid 3.2.0.5

[8] Comentário enviado por fredbaza em 08/06/2011 - 10:43h

Desculpa amigo, mas segui esse seu tutorial aqui e os dados passam pelo proxy somente quando configuro no navegador a porta que configurei no squid. Entendo que isso não é modo transparente.

e você cita no comentário [3]"Nesta configuração o squid não está rodando no modo transparent." e agora diz que já é modo transparente?

[9] Comentário enviado por cytron em 09/06/2011 - 09:03h

Bom, vamos lá...

Lí o artigo todo e não encontrei a frase que você citou. O mais próximo que encontrei foi:

"3. Talvez pode dar WARNING na hora de compilar o netfilter, fique atento. Pode aparecer uma mensagem dizendo que o modo transparent não será ativado por faltar libcap ou libcap2. E melhor instalar isso antes. "

Este trecho to artigo diz que A LIBCAP/LIBCAP2 É NECESSÁRIA PARA O SQUID OPERAR EM MODO TRANSPARENTE.

Caso você não tenha libcap instalada, vai observar durante a compilação que uma mensagem avisa o problema e diz que não terá suporte a modo transparente.

Veja no wiki do squid-cache.org: http://wiki.squid-cache.org/Features/Tproxy4

Três trechos importantes do texto:

NP: The Balabit document still refers to using options tproxy transparent. Do not do this. It was only needed short-term for a bug which is now fixed.

Something went wrong while setting advanced privileges. What exactly, we don't know at this point. Unfortunately its not logged anywhere either. Perhaps your syslog or /var/log/messages log will have details recorded by the OS.

libcap support appears to be missing. The library needs to be built into Squid so a rebuild is required after installed the related packages for your system.

Se você já tem a libcap instalada, então pode ter algo errado com as regras de iptables, no início me lembro que tive alguma dificuldade em acimilar as regras pois elas são bem diferentes.

[10] Comentário enviado por AllanDC em 05/06/2012 - 18:36h

Olá Cytron.

Obrigado pelo tutorial, consegui fazer funcionar sem problemas, só uma dúvida, no Squid 2.7 eu usava proxy transparente, e alguns IPs eu solicitava autenticação, funcionava de boa, mas com o TProxy eu não consigo, preciso subir a porta 3128 com proxy transparente, para autenticação, e a porta 3129 do TProxy, a pergunta é se o TProxy não suporta autenticação de usuários, agradeço desde já.

[11] Comentário enviado por cytron em 06/06/2012 - 09:40h

Pelo que me lembro tproxy não suporta autenticação, mas como estou desatualizado em relação ao assunto, não sei te dizer se já é suportado hoje. Pois antigamente isso estava previsto para o futuro.

Ainda utilizo squid tproxy em meus servidores, mas como tenho outras ocupações parei de estudar sobre o assunto, sem falar que o bicho fica lá trabalhando sem precisar de manutenção.

[12] Comentário enviado por vns em 08/08/2012 - 00:00h

Ola cytron, poderia me esclarecer uma duvida..
qual o esquema do tproxy vc aborda no tutorial se é:
wan <-->roteador/firewall <--> lan <--> tproxy <-->switch <--> pcs?
pois creio isso é duvida para muitos que estão começando nesta area de cache...

Grato,

[13] Comentário enviado por cytron em 08/08/2012 - 10:09h


[12] Comentário enviado por vns em 08/08/2012 - 00:00h:

Ola cytron, poderia me esclarecer uma duvida..
qual o esquema do tproxy vc aborda no tutorial se é:
wan <-->roteador/firewall <--> lan <--> tproxy <-->switch <--> pcs?
pois creio isso é duvida para muitos que estão começando nesta area de cache...

Grato,


Não faz diferença, é questão apenas de tcp/ip que for direcionado ao squid, vindo de qualquer inteface indo para qualquer. Ou seja, pode até mesmo sair pela mesma que entrou.

[14] Comentário enviado por vns em 09/08/2012 - 12:18h

Opa, e essas cofinguraçoes do iptables é feita no meu gateway ou no servidor squid? no meu caso o lusca

[15] Comentário enviado por cytron em 09/08/2012 - 19:58h


[14] Comentário enviado por vns em 09/08/2012 - 12:18h:

Opa, e essas cofinguraçoes do iptables é feita no meu gateway ou no servidor squid? no meu caso o lusca


Bom... As regras de iptables fazem o desvio para o squid, em teoria pode ficar no gateway, mas nunca testei. Sempre usei no próprio server onde fica o squid.

A verdade é que não tem necessidade de ficar no gateway ou firewall. Trata-se de uma regra muito específica para o squid.

Não se esqueça que seu gateway não pode fazer nat.

[16] Comentário enviado por cparis02 em 20/10/2012 - 11:52h

Já fez funcionar no ubuntu?

[17] Comentário enviado por cytron em 20/10/2012 - 19:33h


[16] Comentário enviado por cparis02 em 20/10/2012 - 11:52h:

Já fez funcionar no ubuntu?


Não, mas imagino que a técnica seja a mesma para a compilação. O que pode acontecer é das novas versões não darem problemas de lib ou ter que editar algum header.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts