Instalação e configuração do Squid com TProxy no Debian

Quando se tem na rede um Mikrotik e precisa-se fazer controle do que os usuários acessam, existem algumas formas, uma delas é o proxy em paralelo com o Mikrotik e a outra o proxy em uma bridge no meio do caminho. Nesse artigo demonstro como configurar o Squid em bridge, assim como a aplicação dos patches necessários.

[ Hits: 51.319 ]

Por: Leandro Moreira em 11/07/2009


Squid - Compilando, instalando e configurando



Criando a regra de redirecionamento para o Squid

Compilado e instalado nosso kernel e iptables, está na hora de testar o redirecionamento necessário para o Squid funcionar, conforme abaixo:

# iptables -v -t tproxy -A PREROUTING -i br0 -p tcp --dport 80 -j TPROXY --on-port 3128

Verificando a regra:

# iptables -nL -t tproxy
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
TPROXY     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 TPROXY redirect 0.0.0.0:3128

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Caso, precisemos criar uma exceção a regra, por exemplo por causa da conectividade social, usaremos a seguinte regra:

# iptables -v -t tproxy -A PREROUTING -i br0 -p tcp --dport 80 -d ! 200.201.0.0/16 -j TPROXY --on-port 3128

Compilando Squid e configurando

Agora temos que preparar o Squid para funcionar com nossa solução, para isso teremos que aplicar nele um patch do TProxy. Primeiramente vamos instalar as dependências necessárias para a compilação do Squid e baixar seus fontes. Descomente as linhas no sources.list:

deb-src http://http.us.debian.org/debian etch main contrib non-free
deb-src http://security.debian.org etch/updates main contrib non-free

Salve o arquivo e saia, em seguida:

# apt-get update
# apt-get build-dep squid
# apt-get source squid


Vamos agora copiar o arquivo abaixo para torná-lo disponível no kernel-headers para a compilação do Squid:

# cp -v /usr/src/linux-2.6-2.6.18.dfsg.1/include/linux/netfilter_ipv4/ip_tproxy.h /usr/include/linux/netfilter_ipv4
# cp /usr/include/linux/capability.h /usr/include/sys


Instalaremos agora a libcap-dev para evitar erros durante a compilação:

# apt-get install libcap-dev

Como estamos usando os fontes do Debian, vamos editar o arquivo que localiza-se em /usr/src/squid-2.6.5/debian/rules, nesse arquivo vamos procurar a seguinte entrada:

--enable-useragent-log \
--enable-referer-log \
--enable-underscores \

Removendo-as e inserindo em seu lugar as seguintes entradas:

--enable-linux-tproxy \
--enable-multicast-miss \
--disable-ident-lookups \

Vamos agora compilar o pacote do Squid:

# dpkg-buildpackage -rfakeroot -us -uc -b

Terminada a compilação, vamos instalar os pacotes:

# cd ..
# dpkg -i squid*.deb


Agora vamos editar o squid.conf para que ele funcione com o TProxy:

# cd /etc/squid
# vi squid.conf


Procure a linha http_port e altere-a para:

http_port 3128 tproxy transparent

Salve o arquivo, saia e reinicie o Squid.

Não vou entrar em detalhes de criação de ACLs, pois existem muitos artigos na internet com essa função.

# /etc/init.d/squid restart

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Aplicando os patches e compilando
   3. Squid - Compilando, instalando e configurando
   4. Configurando o proxy e modo bridge
Outros artigos deste autor

Integrando autenticação do Squid ao Active Directory

Recuperando RouterOS na RouterBOARD 450

Monitorando Host via IPMI no Zabbix

Compilando kernel com suporte a POM (path-omatic) e Layer7 no Debian e Slackware

Integrando Apache 2 com Tomcat 5

Leitura recomendada

Ksplice - atualizando o kernel sem necessidade de reboot

Compilar kernel em distros baseadas em Debian

Kernel-BALA

Como explicar o que é kernel para um leigo

Recompilando o Kernel no Ubuntu Linux 9.04

  
Comentários
[1] Comentário enviado por lopan em 12/07/2009 - 08:57h

Leandro, essa solução de TProxy é velha e complexa!
O Kernel do Linux já tem suporte nativo ao TProxy, sem a necessidade de Patch (versões >= 2.6.28).
O TProxy também evoluiu para a versão 4.1, a versão do Squid 3.1 já conta com isso e a configuração é extremamente simples, como pode ser visto no link: http://wiki.squid-cache.org/Features/Tproxy4

Abraços,

[2] Comentário enviado por leandromoreirati em 13/07/2009 - 15:06h

lopan,
Me desculpa pelo artigo então, ja o escrevi a um ano e meio e so publiquei pois nas listas que frequento tenho percebido que muitas pessoas pedem documentação sobre o tproxy, a proposito quem usa a versão estable do debian (kernel 2.6.26) não tem esse modulo embracado no kernel, portando e uma escolha que a pessoa tera de fazer, ou aplica o patch e recompila o kernel, ou usa o kernel nao disponível, mas sua observação é valida pois nao consegui aplicar de forma alguma o tproxy no squid3, vou olhar o seu link e testar a versção 3.1, obrigado pela dica.

Att.

Leandro Moreira.

[3] Comentário enviado por josefilhobr em 14/08/2009 - 10:17h

Precisei da solução neste momento e tentei a configuração a partir da versão mais nova disponível no site do SQUID enviada por lopan. Até agora não obtive sucesso. O IP SPOOFING está acontecendo, porém não está fazendo cache, nem o access.log é gravado.

As permissões dos arquivos estão ok e a configuração dos parâmetros do access_log no squid.conf está direcionada também ok, bem como o diretório do cache.

Vcs têm alguma luz?

Obg

[4] Comentário enviado por Rafaelmcosta em 26/08/2009 - 00:49h

LEandro,

muito bom artigo,

uma dúvida...vc nao usou tcp_outgoing_address?

Como ficou a saída dos endereços dos clientes? Estão saindo independentes, ou seja, sai cada um com seu IP e nao com o do proxy, evitando problemas com Rapidshare e afins.

Abraços

[5] Comentário enviado por leandromoreirati em 26/08/2009 - 11:31h

Ramc,
Nao usei o tcp_outgoin, na verdade eles saem com o ip do gateway da rede, pois o gateway-tproxy, fica entre a rede o gateway da rede. Com relaçao ao rapidshare e afins, os problemas que tem e os problemas corriqueiros de multiplos acessos de um mesmo IP, creio eu pois os meus clientes pedem o bloqueio de acesso a esses serviços. Com relacao a saida, fica listado o ip de origem. Pra evitar problemas, eu restinjo acesso a porta 3128 a apenas a minha(s) rede (s) interna(s).
Qualquer duvida estou a disposiçao.

Att.

Leandro Moreira.

[6] Comentário enviado por Rafaelmcosta em 30/08/2009 - 09:57h

eu preciso que os ips dos clientes saiam livremente...
de forma realmente transparente.
Alguma dica?

Abraço ;)

[7] Comentário enviado por modesto916 em 28/04/2010 - 17:15h

Cara, otima atitude de postar sobre o que voce ja teve experiencia, mas sinceramente, na minha opinião, o TPROXY no linux continua uma gambiarra, uso essa solução com FreeBSD, nas versões do FreeBSD inferiores à 8.0, é necessario aplicar um patch e recompilar o kernel, mesmo assim, é muito simples, agora ja no 8.0 ja tem o suporte nativo e 100% funcional.

[8] Comentário enviado por leandromoreirati em 29/04/2010 - 10:43h

Modesto,
No linux no kernel acima de 2.6.28 ele também é nativo, mas infelizmente ainda nao pude testar por falta de tempo, acredido que seja necessário apenas complila-lo sem a necessidade de aplicar o patch.

Att.

Leandro Moreira.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts