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