Indice del forum www.zeroshell.net
Distribuzione Linux ZeroShell
 
 FAQFAQ   CercaCerca  GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo  Log inLog in   Messaggi privatiMessaggi privati 

Proxy trasparente esterno dietro Captive Portal ZeroShell

 
Nuovo argomento   Rispondi    Indice del forum -> ZeroShell
Precedente :: Successivo  
Autore Messaggio
svenny



Registrato: 18/09/08 12:11
Messaggi: 245

MessaggioInviato: Mar Lug 28, 2009 5:13 pm    Oggetto: Proxy trasparente esterno dietro Captive Portal ZeroShell Rispondi citando

Vorrei sapere se è possibile realizzare un proxy trasparente con Squid, su hardware dedicato, da piazzare dietro il Captive Portal di ZeroShell:

clients -> Captive Portal ZS -> Squid -> Gateway (ZS) -> Internet

E' possibile realizzare qualcosa di simile? Magari qualcuno di voi che ha già sperimentato questo setup, potrebbe darmi delle informazioni a riguardo.

Credo si possa agire allo stesso modo in cui ZeroShell gestisce il proxy: tramite una HTTP Capturing Rules, catturare le richieste dei client verso le porte 80 e 443 e redirigerle non più verso localhost:8080 ma verso IP_server_proxy:3128. Potrebbe funzionare? Per quanto riguarda il QoS, potrei utilizzare la catena di OUTPUT per le connessioni HTTP e HTTPS.

Grazie del vostro aiuto, ciao,
Top
Profilo Invia messaggio privato
svenny



Registrato: 18/09/08 12:11
Messaggi: 245

MessaggioInviato: Mer Lug 29, 2009 6:32 pm    Oggetto: Rispondi citando

Come ho visto in un altro post, ho provato a modificare lo script cp_authorize_client nel seguente modo:

#!/bin/sh
. /etc/kerbynet.conf
ENABLE="$1"
echo "$2" | grep -q "\." && IP=$2
echo "$3" | grep -q "\." && IP=$3
echo "$2" | grep -q ":" && MAC=$2
echo "$3" | grep -q ":" && MAC=$3
if [ "$IP" == "" -a "$MAC" == "" ] ; then
echo "Usage: cp_authorize_client yes|no {IP [MAC]}|{MAC [IP]}"
exit 1
fi
if iptables -L CapPortWL -n 2>/dev/null >/dev/null ; then
[ "$IP" != "" ] && FILTER="-s $IP"
[ "$MAC" != "" ] && FILTER="$FILTER -m mac --mac-source $MAC"

# Aggiunto.
iptables -t nat -D CapPortHTTP -p tcp --dport 80 $FILTER -j DNAT --to-destination IP_SERVER_PROXY:3128 2>/dev/null


iptables -D CapPortWL $FILTER -j ACCEPT 2>/dev/null
# iptables -t nat -D CapPortHTTP $FILTER -j ACCEPT 2>/dev/null


iptables -t nat -D CapPortHTTP $FILTER -j CapPortProxy 2>/dev/null
iptables -t nat -D CapPortHTTPS $FILTER -j ACCEPT 2>/dev/null
if [ "$ENABLE" == yes ] ; then

# Aggiunto.
iptables -t nat -I CapPortHTTP -p tcp --dport 80 $FILTER -j DNAT --to-destination IP_SERVER_PROXY:3128 2>/dev/null

iptables -I CapPortWL 1 $FILTER -j ACCEPT
# iptables -t nat -I CapPortHTTP 1 $FILTER -j ACCEPT

iptables -t nat -I CapPortHTTP 1 $FILTER -j CapPortProxy
iptables -t nat -I CapPortHTTPS 1 $FILTER -j ACCEPT
fi
fi

Collegandomi attraverso il Captive Portal, la navigazione non passa per il proxy e continua a funzionare come se nulla fosse. Lo script ora modifica la catena CapPortHTTP nel seguente modo:

Chain CapPortHTTP (1 references)
pkts bytes target prot opt in out source destination
3 180 CapPortProxy all -- * * xxxxxxxxxxx 0.0.0.0/0 MAC xxxxxxxxxxxxxxxx
0 0 DNAT tcp -- * * xxxxxxxxxxxxxx 0.0.0.0/0 tcp dpt:80 MAC XXXXXXXXXXXXXX to:IP_SERVER_PROXY:3128
0 0 CapPortProxy all -- * * XXXXXXXXX 0.0.0.0/0 MAC XXXXXXXXXXXX
0 0 CapPortProxy all -- * * XXXXXXXXXXX 0.0.0.0/0 MAC XXXXXXXXXXXX
1 60 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 redir ports 12080

Ma non avviene alcuna redirezione......

Qualcuno potrebbe darmi una mano a capire come fare?

Ciao e grazie.
Top
Profilo Invia messaggio privato
giancagianca



Registrato: 14/08/07 20:10
Messaggi: 320

MessaggioInviato: Mer Lug 29, 2009 7:37 pm    Oggetto: Rispondi citando

Da quando Fulvio ha inserito nel progretto il proxy gli script sono un po cambiati.
Le modifiche allo script mi sembrano quelle applicabili alle versioni di ZS che non aveva il proxy interno.

La soluzione più veloce, dal mio punto di vista, sarebbe quella di modificare il file di configurazione di havp in modo da abilitare un parent proxy.

Non ho analizzato a fondo ma mi sembra che il file havp.config venga rigenerato ogni volta partendo da un template. Il template lo trovi in /root/kerbynet.cgi/template. In questo modo avresti havp con funzioni di antivirus e squid con funzione di caching.

Puoi modificare il file in una cartella in /Database e copiarlo con uno script in preboot nella posizione corretta.


Ciao
Top
Profilo Invia messaggio privato
svenny



Registrato: 18/09/08 12:11
Messaggi: 245

MessaggioInviato: Mer Lug 29, 2009 8:03 pm    Oggetto: Rispondi citando

Ciao Giancarlo e grazie per la tua risposta. Io vorrei tenere distinte le funzionalità di routing/firewalling da quelle relative al proxy. In questo modo posso installare ZeroShell su di un dispositivo embedded (tipo Alix) e far fare da proxy ad un sistema un po' più robusto. Inoltre il proxy di ZeroShell ha funzionalità limitate, serve più che altro come antivirus.

Ho già implementato con successo un server proxy esterno autenticato Squid dietro ZeroShell, ma senza utilizzare il Captive Portal di ZeroShell. Credo sia molto importante, avere anche la possibilità di poter installare un proxy esterno trasparente dietro Captive Portal.

Anche io avevo pensato ad implementare Squid come parent proxy di HAVP, ma come detto sopra, finirei con l'avere un proxy che gira su di un sistema embedded: avendo diversi utenti collegati, non sarebbe il massimo.....

Ciao e grazie ancora.
Top
Profilo Invia messaggio privato
giancagianca



Registrato: 14/08/07 20:10
Messaggi: 320

MessaggioInviato: Gio Lug 30, 2009 11:15 am    Oggetto: Rispondi citando

Ora sono fuori ufficio e non posso verificare il tutto ma devi inserire il reindirizzamento verso il proxy nella catena CapPortProxy.

Ciao
Top
Profilo Invia messaggio privato
svenny



Registrato: 18/09/08 12:11
Messaggi: 245

MessaggioInviato: Ven Lug 31, 2009 9:24 pm    Oggetto: Rispondi citando

Ho provato ad utilizzare la catena CapPortProxy, come da te suggerito, in particolare ho modificato lo script cp_start, aggiungendo:

Codice:
# stop del proxy.
iptables -t nat -F Proxy
iptables -t nat -X Proxy


dopo la riga:

Codice:
iptables -t nat -X CapPortProxy 2>/dev/null


e:

Codice:
 # start del proxy.
  iptables -t nat -N Proxy
  iptables -t nat -I CapPortProxy 1 -p tcp --dport 80 -j Proxy 2>/dev/null
  iptables -t nat -A Proxy -i ETH02 -p tcp --dport 80 -j DNAT --to-destination IP_SERVER_PROXY:3128


dopo la riga:

Codice:
 iptables -t nat -A CapPortProxy -j ACCEPT


In questo modo, gli utenti che passano attraverso il Captive Portal e che richiedono connessioni HTTP, vengono correttamente rediretti al proxy Squid esterno. L'unica nota negativa è che il proxy risponde al client con un bel "INVALID URL". La URL nella pagina di risposta di Squid è tagliata: compare solo la parte di URL dalla / in poi. E' come se il DNAT tirasse via il dominio dalla URL. Per fare un esempio, accedendo ad un webmailer, nei log di Squid trovo questo:

1249037377.390 1 XXXXXXXXX NONE/400 1808 GET /cgi-bin/webmail.cgi - NONE/- text/html

E' ovvio che Squid non riesce a raggiungere quella URL, ma non riesco a capire per quale motivo venga passata in questo modo.....

Ciao
Top
Profilo Invia messaggio privato
svenny



Registrato: 18/09/08 12:11
Messaggi: 245

MessaggioInviato: Dom Ago 02, 2009 4:41 pm    Oggetto: Rispondi citando

Ho risolto il problema delle URL tagliate inserendo nella configurazione di Squid la seguente direttiva:

http_port 3128 vhost

Ora le richieste arrivano correttamente al proxy, ma questo mi risponde con un errore:

Unable to forward this request at this time

Credo sia un problema relativo al NAT. Comincio a pensare che la cosa non sia fattibile...........

Ciao
Top
Profilo Invia messaggio privato
giancagianca



Registrato: 14/08/07 20:10
Messaggi: 320

MessaggioInviato: Dom Ago 02, 2009 6:38 pm    Oggetto: Rispondi citando

Dalla documentazione che ho la sintassi generale dovrebbe essere cosi ( non riguarda specificatamente ZS ma è la sintassi generica).

iptables -t nat -A PREROUTING -i eth? -s ! squid-box -p tcp --dport 80 -j DNAT --to squid-box:3128
iptables -t nat -A POSTROUTING -o eth? -s local-network -d squid-box -j SNAT --to iptables-box


Altro metodo

iptables -t mangle -A PREROUTING -j ACCEPT -p tcp --dport 80 -s squid-box
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp --dport 80
ip rule add fwmark 3 table 2
ip route add default via squid-box dev eth? table 2

Inserire sulla squid-box

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

Non ho modo di fare prove spero ti possano essere utili.

Ciao.
Top
Profilo Invia messaggio privato
svenny



Registrato: 18/09/08 12:11
Messaggi: 245

MessaggioInviato: Lun Ago 03, 2009 5:26 pm    Oggetto: Rispondi citando

Ho provato a seguire il primo metodo, ma non funziona. Il problema è che facendo NAT, la richiesta che arriva a Squid perde la destinazione originaria del pacchetto. Squid non è in grado di instradare correttamente la richiesta proprio a causa di questa mancanza e restituisce il suddetto errore. Credo che il secondo metodo, da te consigliato, porti alle stesse conseguenze.....

Grazie ancora per i tuoi consigli.

Ciao
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> ZeroShell Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it