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