Squid - proxy transparente não funciona

Iniciado por alexandre, 21 de Maio de 2008, 23:33

tópico anterior - próximo tópico

alexandre

tenho um servidor com squid instalado, 2 placas de rede: eth0 (internet), eth1 (rede local).

o proxy está ativo, mas só funciona se configurar manualmente no firefox. Estou testando com o firefox dentro do servidor onde o squid está.

estou usando o squid 2.6.stable18 no hardy.

estou seguindo um tutorial do morimoto. Basicamente, estes comandos:

# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128


meu squid.conf:

# Proxy transparente
http_port 3128 transparent
visible_hostname tyrone

# Configuração do cache
cache_mem 32 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 700 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256

# Localização do log de acessos do Squid
cache_access_log /var/log/squid/access.log

refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
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 purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# Filtros por palavras e por dominios
acl bloqueados dstdomain orkut.com www.orkut.com playboy.abril.com.br
http_access deny bloqueados

# Libera para a rede local
acl redelocal src 192.168.0.0/24
http_access allow localhost
http_access allow redelocal

# Bloqueia acessos externos
http_access deny all
:?)

rafasnn

alexandre,

duas perguntas, o dhcp está configurado? como está o seu arquivo /etc/network/interfaces?
Macbook Pro 2,33 4GB 250GB
iPhone 8GB

raidicar

alexandre, o comando esta incorreto.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
aqui vc tem de indicar a placa de rede conectada a rede local, que é onde chegam os pedidos dos clientes, como sua placa de rede ligada a rede é eth1, o comando seria:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
vc esta indicando a placa de rede que recebe a internet, ou seja, não esta fazendo absolutamente nada.
diz ai se funcionou.

um abraço.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

alexandre

Citação de: rafasnn online 22 de Maio de 2008, 01:17
duas perguntas, o dhcp está configurado? como está o seu arquivo /etc/network/interfaces?

resposta: não estou usando dhcp ainda, a configuração da rede foi feita na mão.

Citação de: raidicar online 22 de Maio de 2008, 09:01
alexandre, o comando esta incorreto.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
aqui vc tem de indicar a placa de rede conectada a rede local, que é onde chegam os pedidos dos clientes, como sua placa de rede ligada a rede é eth1, o comando seria:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
vc esta indicando a placa de rede que recebe a internet, ou seja, não esta fazendo absolutamente nada.
diz ai se funcionou.

beleza, 50% do problema foi corrigido. Minha rede interna está usando o proxy transparente, porém não consigo utilizar o proxy de maneira transparente no servidor. Só configurando manualmente.
:?)

raidicar

#4
removeu essa regra que vc adicionou incorretamente?
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
vc mesmo redirecionou o trafego da sua eth0 da porta 80 para a porta 3128 o que lhe obriga a especificar isso no browser, mas não tem nada a ver com proxy transparente, o proxy transparente "por padrão", não se aplica a eth0, e sim, somente aos pcs que fazem as requisições que chegam a eth1, por isso, esqueça proxy transparente para o servidor, pois ele esta acima do proxy, a eth0 esta acima do proxy, o servidor tem a internet liberada e as regras por padrão, não se aplicam a ele, sómente aos pcs que chegam a eth1 (isso não é 100% verdade, mas assim fica melhor de entender). Não sei exatamente qual tutorial vc seguiu, mas sei que vc seguiu cegamente e quando isso ocorre, vc pode causar um problema de dificil solução, vc tem de estar atento se sua estrutura é igual a do tutorial, se algo tem versão diferente da qual esta no tutorial e fazer alterações que não constam no tutorial, pois o mesmo não foi escrito seguindo sua estrutura. Tenho certeza que nesse que estava seguindo, a pessoa simulou uma rede inversa da sua, onde a rede local estava na eth0 e a internet na eth1 e vc não percebeu, copiou e colou, e, algumas vezes, um erro assim pode não ter concerto.

Remova a regra para ai, estabelecer o trafego novamente a porta 80 na eth0.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

alexandre

Citação de: raidicar online 23 de Maio de 2008, 14:36
removeu essa regra que vc adicionou incorretamente?
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

já removi. Na verdade o que ocorreu foi um erro de digitação. Estou atento aos detalhes do tuto.

agora me interessei pelo assunto e vou procurar saber mais sobre iptables e nat.
Fica a pergunta: Qual a regra de iptables devo usar para redirecionar o tráfego do servidor para o squid ???


:?)

raidicar

ok alexandre, sem crise.

è que ja fiz um tuto e a pessoa seguiu, e me culpou pelos problemas, a culpa é minha do dito cujo não saber ler, estava tudo mais claro que agua de torneira, mas ele ainda assim, errou.

Então se seu problema foi 100% resolvido, vamos ao outro.

Eu não entendi bem sua pergunta, ao ativar o proxy, o trafego que passa no servidor passa por ele antes de ir aos pcs da rede, vc não precisa de uma regra para redirecionar o trafego para o squid, basta ativar o proxy, configurar e pronto. Por que vc quer tal regra, curiosidade ou por que seu squid esta com algum problema?

Ou vc quer que o seu servidor de internet esteja sujeito as regras de trafego que passam pelo squid? é isso?
Se for é loucura, mas como disse, não entendi muito bem onde quer chegar, o que quer fazer, etc...
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

alexandre

pensei em aproveitar o cache feito pelo squid.

ok, eu posso configurar o servidor para usar o proxy em 127.0.0.1. Foi o que eu fiz.

mas ficou a dúvida de como fazer esse redirecionamento com iptables.
:?)

Icebreaker

Olá galera,

Tô tendo o mesmo que nosso amigo Alexandre e talvez seja
só ignorância mesmo. Pelo que entendi não é possível fazer com que
o servidor de internet siga as mesmas regras estabelecidas pelo
próprio... exceto se o proxy for configurado no browser... é isso mesmo
que entendi? Só preciso saber isso mesmo, aí vou ficar conformado... rsrsrs

Abraços,

Tio Ice.