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.
Abra o squid.conf e localize 'http_port 3128', apenas coloque tproxy no final da linha:
http_port 3128 tproxy
Nos tutoriais pela net diz pra criar uma nova linha 'http_port 3129 tproxy', mas no meu ver, só se você quiser continuar com o proxy 'normal' na 3128 e manter o tproxy na 3129. Eu só uso tproxy. Mas o número da porta fica a sua escolha.
O restante da configuração é só refinamento.
Agora estamos na etapa final, vamos usar o iptables, esqueça aquela velha linha do REDIRECT, coloque as seguintes linhas no script de inicialização:
######
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 1 --on-port 3128
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100 ######
Pronto, pode iniciar o Squid!
Mas ainda falta a mágica, como fazer o Squid rotear SEM NAT...
# echo 1 > /proc/sys/net/ipv4/conf/ethX/proxy_arp
Onde 'X' é a interface por onde vai o link dedicado.
Muito simples! Colocando 1 em proxy_arp fará com que o servidor assuma o mac, ou seja, vai fingir que o pacote partiu da placa de rede dele. O router na outra ponta do link vai retornar as respostas para essa placa de rede, cujo é o Squid que já sabe pra quem deverá entregar a requisição. A página será cacheada e todo mundo fica feliz.
Agora seu Squid é o mestre do spoofing!
Tenho vários servidores rodando dessa forma. Se surgir alguma dúvida e eu demorar a responder não esquenta, é que estou fazendo tanta coisa que fico sem tempo pra vir aqui.
[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.
[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.
[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.
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...
[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.
[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.
[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.