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

Por: Wilker Azevedo em 09/08/2010


Compilando o Squid



É bom que você já esteja com o Slackware instalado, pois não vou explicar como fazer.

Vamos ao Squid, que pode ser obtido aqui:
Salve-o no src de trabalho e vamos descompactar:

# tar xzf squid-3.1.5.tar.gz
# cd squid-3.1.5


Vamos iniciar a compilação, observe as opções e veja se são necessárias para você ou se está faltando alguma que esteja precisando:

# ./configure --enable-async-io --enable-disk-io --enable-storeio="ufs,diskd" --enable-icmp --enable-delay-pools --enable-esi --enable-kill-parent-hack --enable-ssl --enable-linux-netfilter --enable-zph-qos --with-openssl --enable-default-err-language=Portuguese --enable-ltdl-convenience --enable-removal-policies="heap lru" --enable-http-violations

Vou explicar apenas duas opções que acho importante destacar:

--enable-linux-netfilter

Esta é a opção que ativa o netfilter e "se o kernel for acima de 2.6.28", vai reconhecer e ativar o TPROXY. Ao rodar um ./configure --help você encontrará --enable-linux-tproxy, não se engane, esta opção é para a versão 2 do balabit, o kernel não vem com isso, seria necessário compilar com esse patch.

--enable-http-violations

Esta opção é caso você resolva usar o inComum, semelhante ao ThunderCache. Só que milhões de vezes mais fácil e totalmente free.

Ok, depois de ter rodado com sucesso ./configure, é a hora do make:

# make

Não sei se deu certinho pra você, mas todas as vezes que rodei o make deu erro, que aparentemente é um bug, pode não ser. Mas consegui resolver facilmente. Se for o seu caso, eis os erros e as soluções:

1. ld informou erro na opção '-lz', ou seja, está faltando a lib 'z'. Para resolver instale a zlib:

# slackpkg install zlib

2. Erro de libltdl. Não encontrou alguns arquivos .h:

Esta lib já vem junto com o Squid: "squid-3.1.5/libltdl

Arquivos: lt_system.h, lt_error.h e lt_dlloader.h

O que acontece, é que a chamada para esses arquivos encontra-se em ltdl.h, mas o caminho está errado, então corrija:

# vim libltdl/ltdl.h

Na linha 36, 37 e 38 está assim:

#include <libltdl/lt_system.h>
#include <libltdl/lt_error.h>
#include <libltdl/lt_dlloader.h>

No entanto, os arquivos .h estão em 'libltdl/libltdl/', corrija para:

#include </usr/local/src/squid-3.1.5/libltdl/libltdl/lt_system.h>
#include </usr/local/src/squid-3.1.5/libltdl/libltdl/lt_error.h>
#include </usr/local/src/squid-3.1.5/libltdl/libltdl/lt_dlloader.h>

Observe que é necessário colocar o caminho completo, tentei só acrescentar libltdl/ e ainda deu erro.

Pode salvar, o arquivo está somente leitura, então saia com :x! (se estiver usando o vim)

Agora faça o mesmo nos arquivos 'lt_dlloader.h' e 'lt_error.h'.

Nestes arquivos só está a linha referente ao lt_system.h.

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.

Agora estamos prontos para concluir o make:

# make

Se você já tem um Squid antigão rodando, é melhor colocar o novo squid.conf e configurar de acordo com o que precisa. O arquivo está em src/squid.conf.default.

Mas se seu Squid for 3.1 a configuração é praticamente a mesma, então pode rodar o install sem medo.

# make install

Agora antes de ativar o novo Squid, vamos colocar o necessário no squid.conf.

Página anterior     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

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

Slackware para Desktop ou Notebook em 2021

Como NÃO crackear um programa

Yenka - Mais que um simulador de circuitos eletrônicos

A Microsoft morreu

Leitura recomendada

Direcionando log Squid para banco MySQL

Servidor Ubuntu 8.04 com proxy autenticado + SARG + Samba + CUPS

Squid autenticando em Windows 2003 com msnt_auth

Squid balanceado com LVS

Squid no FreeBSD

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts