Newsgroup: it.comp.os.linux.sys
Titolo: Iptables e squid: Forwarding loop detected

Salve,
volendo attivare il proxy trasparente per gli utenti della macchina su cui
è installato Squid, ho inserito la seguente regola in iptables:
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
Quello che accade è però un tentativo di loop (iptables ridirige le
richieste dalla porta 80 alla 3128, poi squid prende ed inoltra queste
richieste alla porta 80, quindi iptables ridirige.......).
In pratica al secondo passaggio della stessa richiesta Squid si rifiuta
ovviamente di proseguire.
Qualcuno ha qualche suggerimento su come superare questa impasse? Con
ogni probabilità bisognerà fare qualcosa con iptables per evitare di
rimandare indietro a Squid la richiesta al secondo passaggio, ma non ho
idea di come fare.
Ringrazio in anticipo
Andrea Benetton

  Andrea Benetton
ciao ...
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0}; printf("%s",c); return 0;}

 
Mi sono dimenticato di aggiungere una cosa fondamentale: La macchina su
cui gira Squid č la stessa sulla quale gira il firewall. Quindi questa
regola non funziona perchč il source address č sempre 127.0.0.1!
Adesso sto guardando la documentazione su iptables e mi sembra che il
"mangling" dei pacchetti possa sortire qualche risultato. Perň se
qualcuno avesse idee piů semplici, č il benvenuto.
Andrea Benetton

  regola non funziona perchè il source address è sempre 127.0.0.1!
scusa, ma mica puoi uscire con il source address 127.0.0.1 !!


 iptables da un po' di tempo ;-))
<OT>
usi FBSD a quanto mi ricordo, vero? ti trovi meglio col firewall rispetto
a iptables?
</OT>
A scanso di equivoci il f/up l'ho impostato, vedi tu :)
-- 
The fish doesn't think ,
cause the fish knows everything
	>>>:/OuZ\:<<<
per rispondermi in mail rimuovere TOGLIQUESTO

 
Sicuramente mi sono espresso male, poiché la mia conoscenza di iptables è
pressoché infima. Quello che volevo dire è che i pacchetti vengono
originati dalla stessa macchina sulla quale girano sia iptables sia Squid
e quindi non posso fare match (almeno mi sembra) su interfacce o IP
"esterni", che in questo caso non entrano in gioco.
Ora ti mostro il tentativo di soluzione che vorrei provare ma che ahime'
non funziona; il principio che vorrei applicare è quello di marcare i
pacchetti che vengono rediretti, in maniera tale da NON redirigerli la
seconda volta che vengono processati da iptables/netfilter.
#Se è la seconda volta che passa...
iptables -t mangle -A OUTPUT -p tcp --dport 80 -m mark --mark 1 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 80 -m mark --mark 2 -j ACCEPT
#Se è la prima...
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
#Se è la seconda volta che passa NON ridirigere il pacchetto
iptables -t nat -A OUTPUT -p tcp -m mark --mark 2 -j ACCEPT
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
Ma, come detto sopra, non funziona; sembra che i mark non vengano fatti o
non vengano mantenuti o chissà che altro.
Andrea Benetton

  "esterni", che in questo caso non entrano in gioco.
allora potresti provare a filtrare solo i pacchetti provenienti da una porta
diversa dalla 3128 .... qualcosa tipo
iptables -t nat -A OUTPUT -p tcp --sport !3128 --dport 80 
	-j REDIRECT --to-port 3128
controlla la sintassi, ma il concetto e' questo ... 


 >  Andrea Benetton 
ciao ...

  
Non ho visto nulla su squid.conf che faccia ciò. Inoltre ci sarebbe il
problema che _tutte_ le richieste per la porta 80 uscirebbero su internet
con la stessa source port, cosa che non so se sarebbe desiderabile dal
punto di vista, ad esempio, della sicurezza.
In compenso ho fatto qualche prova provando a modificare tramite la
tabella di mangling i pacchetti diretti all'esterno verso la porta 80;
però, come detto nel mio post precedente, non funziona, forse perché
Squid non utilizza i pacchetti rediretti ma ne "fabbrica di nuovi",
oppure perché deve mandare fuori effettivamente dei nuovi pacchetti
(dovrei riguardarmi un po' di specifiche del protocollo http...).
Andrea Benetton