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

Por: Wilker Azevedo em 09/08/2010


Configurar o Squid com TPROXY



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.

Página anterior    

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

Slackware para Desktop ou Notebook em 2021

O Linux está pronto para desktop, mas não está pronto para usuário contaminado

FreeCAD: veja como está o CAD for Linux em 2018

Yenka - Mais que um simulador de circuitos eletrônicos

Como NÃO crackear um programa

Leitura recomendada

Squid 2.6 + HTB-tools com cache full

Implementação de um servidor Linux Squid + Iptables + DHCP

Squid + SSL

Proxy Squid com autenticação + Sarg + Webmin

Implementação de um proxy/cache para ganho de conexão

  
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