Iptables e proxy transparente (Squid) definitivo

Publicado por Matuzalém Guimarães em 29/10/2008

[ Hits: 59.918 ]

 


Iptables e proxy transparente (Squid) definitivo



Pessoal,

Vi inúmeros tópicos pela net sobre problemas com o uso do Squid como proxy transparente com milhares de respostas que nunca funcionavam.

Depois de algum tempo de análise, cheguei a seguinte conclusão:

1- Todos os "tutoriais" indicam o uso desta regra para redirecionar o tráfego da rede local para a internet na porta 3128:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Essa regra tenta fazer com que as requisições que vierem da rede interna para acesso web (no caso eth1 na porta 80) sejam redirecionadas para a porta 3128 usada pelo Squid. Porém mesmo o Squid estando configurado como proxy transparente, essa regra não o ativava.

Mas se você usar esta regra aqui ao invés da regra de cima, tudo irá funcionar "normalmente", pelo menos o proxy transparente irá!

iptables -t nat -A PREROUTING -s SUA_REDE_LOCAL/MASCARA -p tcp --dport 80 -j REDIRECT --to-port 3128

A única diferença é que ao invés de especificar "-i eth1" você declara "-s SUA_REDE_LOCAL/MASCARA". O proxy transparente funcionará de forma correta!

Obs.: Todos que relataram ter problemas com o uso do iptables e Squid transparente solucionariam seus problemas facilmente com essa observação. Todos usavam a regra que não funciona (a que você usa a interface e não a rede).

Abraço galera.

Outras dicas deste autor

Java 7 da Oracle no Ubuntu - Instalação e atualização fácil e rápida

Squid com bloqueio definitivo do Orkut

Pesquisa entre datas no MySQL

Leitura recomendada

Configurando a tecla PrintScreen pra capturar a tela no KDE

Linux Mint com LXDE: Caixas de som USB

Problemas com áudio no Linux Educacional 3 [Resolvido]

Instalando placa de rede Agere Systems ET131x PCI-E no Linux

Como instalar temas no Ubuntu

  

Comentários
[1] Comentário enviado por irado em 30/10/2008 - 08:16h

embora essa (nova) regra aja corretamente, fiquei curioso e fui conferir as minhas: funcionam com a primeira delas (indicação de NIC, não da rede); então, fica a duvida no ar: funciona com alguns, e não com todos? ou (eventualmente) é o CONJUNTO de regras que define o bom ou mau funcionamento do redirecionamento?

[2] Comentário enviado por matux em 30/10/2008 - 10:18h

Fala irado!! blz?
Foi muito bom vc ter comentado isso.
A versão do squid que eu usei para esse trabalho foi a 2.6 stable. E o slack foi a versão 11.
Em outras distros e outras versões dos squid não testei. Mas de ante-mão como já tinha dito: todos que usaram a definição do NIC e não da rede tiveram que setar manualmente no navegador o endereço do proxy, retirando assim sua característica de uso transparente.
Pois o squid não usa definição da placa de rede, ele faz o controle sobre os endereços do host ou da rede.

[3] Comentário enviado por afdominguez em 28/12/2008 - 18:05h

Bom dia Colegas

Fiz um teste aqui em ksa, e com nenhuma das duas opções esta funcionando a regra citada acima. segue me rc.local
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

iptables -t nat -A PREROUTING -s 10.15.84.13/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

Pelo que entendi, esta regra acima deveria redirecionar o trafico tcp da porta 80 para a porta 3128, mas nao esta fazendo isso, preciso ir la no IE e setar o proxy manualmente. Oque pode estar acontecendo?

Obrgado

[4] Comentário enviado por eduardofraga em 03/01/2009 - 22:51h

Pessoal, não esqueçam de colocar a regra:

http_port 3128 transparent

no lugar de:

http_port 3128


[5] Comentário enviado por fernandofranco em 24/03/2009 - 12:30h

amigo na segunda regra quando eu colo a rede para de navega
já estou ficando sem cabelos , e nao acho nada que me ajuda.

[6] Comentário enviado por matux em 24/03/2009 - 14:46h

Olá fernandofranco

Me diz aí qual é o teu problema real?
Qual a versão do squid vc tá usando?


[7] Comentário enviado por toniher em 03/04/2009 - 16:26h

OLá pessoal. estou tendo problemas com o tema.

quando usava o squid 2.4 transparente com redirecionamento no iptables, os sites https funcionavam sem problemas.

migrei para o squid 2.6 e fiz as auterações do iptables conforme o artigo mas mesmo assim não funciona.

coloquei essas regras o script de firewall

Na cadeia Input
$IPTABLES -A INPUT -p tcp -s $LANIP --dport 443 -j ACCEPT

Na cadeia Forward
$IPTABLES -A FORWARD -s $LANIP -p tcp --dport 443 -j ACCEPT
$IPTABLES -A FORWARD -d $LANIP -p udp --dport 443 -j ACCEPT

e
########### CHAIN PREROUTING ############################################
######### squid transparente
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

############ CHAIN POSTROUTING ###################################
# Masqueding ligacao entre a rede interna e a externa
$IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
############################################################

e mesmo assim não esta funcionando.

Alguém tem uma luz...

Grato pela atenção.

[8] Comentário enviado por eduardofraga em 03/04/2009 - 21:35h

Talvez seja o roteamento que não esteja ativado.

echo 1 > /proc/sys/net/ipv4/ip_forward


[9] Comentário enviado por verdin em 08/07/2011 - 17:16h

Muito boa a dica, agora funcionou. Salvou a pátria.

[10] Comentário enviado por wasleyalmeida em 15/06/2012 - 19:39h

Seu artigo funcionou!!! mas estou tentou problemas relacionado a minha estrutura, tenho algumas maquinas na qual utilizo NAT, sou seja navegam na internet sem passarem pelas restrições de proxy, entretanto ao aplicar o proxy transparente as maquinas que eram para navegar pela NAT estou saindo pelo porta 3128 (porta do squid) ou seja estão navegando pelo proxy.

Veja as regras que criei para disponibilizar o serviço, e por favor me digam onde estou errando ou me deem um luz:


# Regra Nat p maquina diretor
iptables -t nat -A POSTROUTING -s 192.168.0.2\324 -o ppp0 -j MASQUERADE

# Regra direcionamento squid
iptables -t nat -A PREROUTING -s 192.168.0.0\24 -p tcp --dport 80 -j REDIRECT --to-port 3128

Lembrando que no squid habilitei a opção:
http_port 3128 transparent

Agradeço desde já

[11] Comentário enviado por matux em 18/06/2012 - 12:27h

Wasleyalmeida,

Quando você habilita o proxy transparente e o firewall na mesma máquina, todos os hosts da rede vão passar pelo proxy, por padrão. A menos que você crie uma regra no proxy para não criar restrições para determinados IPs, MAC ou Usuários (depende da configuração do proxy que vc esteja usando).
Outra opção seria você usar uma regra como esta, antes da regra de Redirecionamento para o squid.

#iptables -t nat -A PREROUTING -i <INT_LOCAL> -s <IP> -p tcp --dport 80 -j ACCEPT

Espero ter ajudado.


[12] Comentário enviado por vinicius311068 em 01/10/2013 - 01:51h

ja apanhei por anos com esse proxy transparente e espero que esta
nova regra realmente funcione com o centos 5.9 pois ja tentei com o centos 5.4, 5.5, 5.8 e 5.9

obrigado antecipado

vinicius

[13] Comentário enviado por luafeitosa em 23/12/2016 - 14:07h

ola !!
bom dia pessoal
estou um uma dificulda de deixar meu proxy transparente no debia 7
Squid Cache: Version 3.1.20
esta e minha configuracao
minha rede eth0 esta como dhcp pegando a rede interna do meu roteador
e a eth1 esta com ip static 172.16.0.1/24
# Porta do Squid
http_port 172.16.0.1:3128 intercept
# Nome do servidor
visible_hostname debian
# Cache
cache_mem 64 MB
maximum_object_size_in_memory 128 KB
maximum_object_size 512 MB # guarda em disco
minimum_object_size 0 KB # guarda em disco
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid3 100 16 256
# Logs de acesso
access_log /var/log/squid3/access.log squid
#coloque seu email
cache_mgr [email protected]
# Regras acl padrão
acl manager proto cache_object
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # swat
acl Safe_ports port 1025-65535 # portas altas
acl CONNECT method CONNECT # site seguranca
acl redelocal src 172.16.0.0/24 # permissao rede ocal

# Bloqueio de sites por URL
acl bloqueados url_regex -i "/etc/squid3/regras"
acl downloads_proibidos url_regex -i \.torrent \.avi\.mp3 \.flv \.mov \.w$ \.exe
#controle de bloqueio#
http_access deny bloqueados
http_access deny downloads_proibidos
# Permissões e bloqueios padrão
#http_access allow localhost manager # gerenciar o cache
#http_access deny manager
#http_access allow localhost purge # deletar arquivo do cache
#http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow redelocal

# Bloqueio de usuarios fora da rede
http_access deny all

coloqueia as regras iptables
nano /etc/init.d/rc.local

sh -e /etc/init.d/firewall
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -s 172.16.0.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

a pergunda e o seguindo quando vou no navegador e retiro o proxy ele deixa passar tudo gostaria muito da ajuda de voces onde esta o meu erro desde já agradeco a todos



Contribuir com comentário