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

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

Instalando e configurando o Nagios com e sem MySQL

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

Monitorando Host via IPMI no Zabbix

Recuperando RouterOS na RouterBOARD 450

Integrando autenticação do Squid ao Active Directory

Leitura recomendada

Kernel 2.6 hacks

Compilando um novo kernel em distribuições RPM-like

kernel-ck para Arch Linux

Aventuras e desventuras com o kernel 2.6

Mitigando Erro de Kernel: Neighbour Table Overflow

  
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