View previous topic :: View next topic |
Author |
Message |
gioi Apprentice
Joined: 14 Feb 2006 Posts: 236
|
Posted: Tue Feb 28, 2006 10:17 pm Post subject: [SOLVED] [IPTABLES] Proxy Firewall server |
|
|
Ciao a tutti
è da un po' che lurko il forum, ma questo è il mio primo post.
Cercherò di essere sintetico.
La rete su cui sto "sperimentando" è composta da un pc Gentoo su cui girano firewall (iptables) e server proxy (squid), con due schede ethernet, una attaccata al router fastweb e l'altra ad un gateway/AP a cui collego portatile e palmare.
Iptables è così configurato (con uno script da me realizzato)
Policy di default DROP (su INPUT, OUTPUT, FORWARD e naturalmente PRE e POSTROUTING).
regole su input:
ACCEPT per quanto viene dalla rete LAN e per le connessioni ESTABLISHED e RELATED
REJECT per protocollo tcp con --reject-with tcp-reset
regole su output:
ACCEPT per le connessioni NEW, ESTABLISHED e RELATED.
regole su forward
ACCEPT per quandto viene dalla rete LAN (-s $CLASS_LAN) e va verso ovunque (-d 0/0).
ed ovviamente MASQUERADE per il POSTROUTING verso l'interfaccia WAN.
Ovviamente si tratta di una configurazione di base, molto semplice, per fare dei test su un progetto che devo realizzare per lavoro, ed andrà piano piano popolata con regole più precise e restrittive.
Il mio grosso problema, ora, è questo: Vorrei impostare un filtro che reindirizzi tutte le connessioni provenienti dalla rete LAN sulla porta 80, verso squid che gira sul PC con gentoo (ed il firewall).
ho provato con:
/sbin/iptables -t nat -A PREROUTING -p tcp -s $CLASS_LAN -d 0/0 -dport www -j DNAT --to-dest $IP_GATEWAY:8080
Ma non funziona! Naturalmente ho configurato squid affinchè si connetta sulla porta 8080 (invece che 3128) ed accetti connessioni dal range di ip della LAN, ma non funge. Eppure se imposto nel browser (firefox) l'indirizzo del proxy manualmente nell'apposita voce funziona tutto.
Dove sbaglio?
Last edited by gioi on Thu Mar 02, 2006 6:38 pm; edited 1 time in total |
|
Back to top |
|
|
.:chrome:. Advocate
Joined: 19 Feb 2005 Posts: 4588 Location: Brescia, Italy
|
Posted: Tue Feb 28, 2006 10:29 pm Post subject: Re: [IPTABLES] Proxy Firewall server |
|
|
non ho capito perché hai messo squid sulla 8080, invece che sulla 3128...
la regola per fare transparent proxy va nella tabella nat, ed è questa:
-A PREROUTING -i interfaccia -m tcp -s rete sorgente --dport 80 -j REDIRECT --to-ports 3128
ovviamente squid deve essere in ascolto sulla porta 3128 sull'indirizzo appartenente alla rete locale.
devi però aggiungere alcune direttive al file di configurazione di squid per permettergli di fare da transparent proxy, diversamente non funzionerà.
purtroppo a memoria non le ricordo. se cerchi "squid transparent proxy" le trovi sicuramente.
io direi: per evitare di fare casino, fai una cosa alla volta: prima metti in piedi squid, e prova ad impostare il proxy esplicitamente per i browser. successivamente metti le direttive per il TP, togli il proxy dall'impostazione del browser, e vedi se le connessioni gli vengono passate oppure no (lo vedi dall'access.log) |
|
Back to top |
|
|
gioi Apprentice
Joined: 14 Feb 2006 Posts: 236
|
Posted: Tue Feb 28, 2006 10:47 pm Post subject: Re: [IPTABLES] Proxy Firewall server |
|
|
Ti ringrazio per la risposta.
Cmq il problema non è squid che se chiamato esplicitamente (cioè impostato nella sezione proxy del browser dei vari pc della rete) funziona perfettamente.
Io però vorrei che la connessione sulla porta 80/http passi sempre attraverso il proxy.
Il motivo per cui uso la porta 8080 è molto semplice. Queste stesse impostazioni, (con minime modifiche), andranno applicate su una macchina che già fa parte di una rete (mista linux/winsozz), in cui già girano i vari server tra cui il proxy, sulla porta 8080 e su cui non dovrei mettere mano se non in caso di estrema necessità. Per cui, per "semplicità" ho cercato, nei parametri di configurazione, di replicare quanto più possibile le condizioni della rete "reale".
_bye
Quanto al tuo suggerimento... non ho capito bene cosa intendi. Se non erro la regola che hai postato tu serve semplicemente per il redirecting della porta 80 sulla porta 3128, ma non forza l'indirizzo di destinazione a quello del proxy. O mi sbaglio?
Domattina farò delle prove, cmq ancora grazie per la risposta! |
|
Back to top |
|
|
.:chrome:. Advocate
Joined: 19 Feb 2005 Posts: 4588 Location: Brescia, Italy
|
Posted: Tue Feb 28, 2006 11:18 pm Post subject: Re: [IPTABLES] Proxy Firewall server |
|
|
no, non sbagli, ma è proprio questo il fatto.
se il proxy deve essere trasparente, l'indirizzo di destinazione non deve variare. deve essere il firewall che senza dire niente a nessuno intercetta le connessioni e le "sposta", se mi passi il termine.
infine, se squid risponde correttamente quando chiamato direttamente, allora gli mancano le regole per fare il TP. ci sono alcune direttive da aggiungere a squid.conf, per fare questo |
|
Back to top |
|
|
makoomba Bodhisattva
Joined: 03 Jun 2004 Posts: 1856
|
Posted: Wed Mar 01, 2006 9:45 am Post subject: |
|
|
REDIRECT cambia l'indirizzo di destinazione del pacchetto, assegnandogli l'ip dell'interfaccia di provenienza.
può essere usato solo se il proxy risiede sulla stessa macchina del firewall e non funziona se è richiesta l'autenticazione.
se proxy e frw sono 2 macchine distinte, si può ottenere comunque la configurazione trasparente ma la conf di iptables è diversa (DNAT + SNAT). _________________ When all else fails, read the instructions. |
|
Back to top |
|
|
spugna Tux's lil' helper
Joined: 26 Nov 2004 Posts: 97
|
Posted: Wed Mar 01, 2006 10:41 am Post subject: |
|
|
Ciao, per far lavorare squid in modalità transparent devi mettere, nel file /etc/squid/squid.conf...
Code: |
#squid.conf
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
|
Come diceva makoomba l'autenticazione in questa modalità NON funziona (a meno di non intervenire a mano su un file header e ricompilare a manina).
Per quanto riguarda iptables quoto k.gothmog
Code: |
iptables -t nat -A PREROUTING -i ethn -p tcp --dport 80 -j REDIRECT --to-port 3128
|
_________________ Don't think, drink your wine, watch the fire burn... his problems not mine...
Just be that model citizen. |
|
Back to top |
|
|
gioi Apprentice
Joined: 14 Feb 2006 Posts: 236
|
Posted: Wed Mar 01, 2006 2:46 pm Post subject: |
|
|
Ringrazio ancora una volta tutti per le risposte, ma non funziona!
Allora il mio squid.conf è questo:
Code: | ssl_unclean_shutdown off
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 8 MB
cache_dir ufs /var/cache/squid 100 16 25
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
mime_table /etc/squid/mime.conf
pid_filename /var/run/squid.pid
hosts_file /etc/hosts
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
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 to_localhost dst 127.0.0.0/8
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
acl our_networks src 192.168.1.0/24
http_access allow our_networks
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
visible_hostname Ganimede
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
forwarded_for off
coredump_dir /var/cache/squid
|
mentre lo script di configurazione del firewall è al momento questo:
Code: |
#!/bin/bash
# Parametri
WANIF="eth2"
LANIF="eth0"
CLASS_LAN="192.168.1.0/24"
GW_IP="192.168.1.1"
# Impostazione regole catena INPUT
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -s $CLASS_LAN -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
# Impostazione regole catena OUTPUT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/sbin/iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Impostazione regole catena FORWAR
/sbin/iptables -A FORWARD -s $CLASS_LAN -d 0/0 -j ACCEPT
# Impostazione regole NAT
/sbin/iptables -t nat -A POSTROUTING -o $WANIF -j MASQUERADE
/sbin/iptables -t nat -A PREROUTING -i $LANIF -p tcp --dport 80 -j REDIRECT --to-port 3128 |
Ma non naviga e lanciando un tail -f /var/log/squid/access.log lo stesso rimane "vuoto", sintomo che squid non viene "chiamato".
Lanciando inoltre un iptables -t nat -L -v ottengo:
Code: |
Chain PREROUTING (policy DROP 573 packets, 179K bytes)
pkts bytes target prot opt in out source destination
0 0 REDIRECT tcp -- eth0 any anywhere anywhere tcp dpt:http redir ports 3128
Chain POSTROUTING (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
5 310 MASQUERADE all -- any eth2 anywhere anywhere
Chain OUTPUT (policy ACCEPT 5 packets, 310 bytes)
pkts bytes target prot opt in out source destination |
Come potete vedere per quanto riguarda il prerouting 0 pkts, mentre per queanto riguarda l'IP MASQUERADE c'è effettivamente traffico... mi viene il dubbio, a questo punto, che la catena di FORWARD ignori il REDIRECT... |
|
Back to top |
|
|
makoomba Bodhisattva
Joined: 03 Jun 2004 Posts: 1856
|
Posted: Wed Mar 01, 2006 3:01 pm Post subject: |
|
|
posta
_________________ When all else fails, read the instructions. |
|
Back to top |
|
|
spugna Tux's lil' helper
Joined: 26 Nov 2004 Posts: 97
|
Posted: Wed Mar 01, 2006 4:55 pm Post subject: |
|
|
Domanda forse scontata:
ma nel file /etc/sysctl.conf hai impostato
Code: | net.ipv4.ip_forward = 1 |
oppure hai dato
Code: |
echo 1 > /proc/sys/net/ipv4/ip_forward
|
_________________ Don't think, drink your wine, watch the fire burn... his problems not mine...
Just be that model citizen. |
|
Back to top |
|
|
gioi Apprentice
Joined: 14 Feb 2006 Posts: 236
|
Posted: Wed Mar 01, 2006 5:27 pm Post subject: |
|
|
spugna wrote: | Domanda forse scontata:
ma nel file /etc/sysctl.conf hai impostato
Code: | net.ipv4.ip_forward = 1 |
oppure hai dato
Code: |
echo 1 > /proc/sys/net/ipv4/ip_forward
|
|
Naturalmente si, c'è anche nello script, solo che ho tagliato ed incollato male (ho eliminato dallo script le parti con dati sensibili, quali l'ip pubblico ed altre informazioni del genere)... |
|
Back to top |
|
|
gioi Apprentice
Joined: 14 Feb 2006 Posts: 236
|
Posted: Wed Mar 01, 2006 5:30 pm Post subject: |
|
|
Ecco:
Code: | Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 11724/named
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 11827/(squid)
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 11724/named
|
|
|
Back to top |
|
|
makoomba Bodhisattva
Joined: 03 Jun 2004 Posts: 1856
|
Posted: Wed Mar 01, 2006 6:40 pm Post subject: |
|
|
2 domande
- le prove le stai facendo dai clients ?
- il frw è il default gw per la rete 192.168.1.0/24 ? _________________ When all else fails, read the instructions. |
|
Back to top |
|
|
gioi Apprentice
Joined: 14 Feb 2006 Posts: 236
|
Posted: Wed Mar 01, 2006 11:10 pm Post subject: |
|
|
Ovviamente le prove sono tutte fatte sui client (ma il netstat l'ho lanciato sul server).
La topologia della rete è questa:
PC gentoo 2005.1 stage 2: eth0 <-------> switch <----> Portatile gentoo 2005.1 stage 3
eth1
eth2 <-------> router Fastweb
All'eth1 collegherò nella seconda fase del progetto uno o due pc che fungeranno da DMZ (su uno girerà un Server WEB), l'altro sarà un PC civetta (con lo scopo di monitorare e migliorare il comportamento del fw).
La rete connessa all'eth0 è di classe C (192.168.1.0/24) con default gw 192.168.1.1 che corrisponde al pc su cui girano proxy e firewall. L'utilizzo dello switch è giustificato dall'utilizzo saltuario di altri pc. |
|
Back to top |
|
|
gioi Apprentice
Joined: 14 Feb 2006 Posts: 236
|
Posted: Thu Mar 02, 2006 6:40 pm Post subject: |
|
|
Risolto... il dhcp non "aggiornava" /etc/resolv.conf
Era un problema nel dhcpd.conf
In pratica è bastato aggiungere l'opzione
Code: | option domain-name-server x.y.w.z |
ed ora funziona tutto...
Grazie a tutti dell'aiuto! |
|
Back to top |
|
|
|