Squid e Transparent Proxy

Mer, 09/03/2005 - 13:49

Squid e Transparent Proxy

Inviato da Incubus 17 commenti
SCOPO

Monitorare il traffico http/s della propria lan verso l'esterno senza l'utente se ne accorga

STRUMENTI

Per raggiungere il nostro scopo avremo bisogno di squid e iptables.
Con squid monitoreremo il traffico, con iptables forzeremo in modo invisibile la navigazione attraverso il proxy.

ATTENZIONE! In questa guida è indicata solo la regole di iptables per forzare la navigazione. La configurazione del firewall è lasciata al lettore
INSTALLAZIONE

L'installazione di squid è semplice:

# apt-get install squid

ed il gioco è fatto.

CONFIGURAZIONE

Il file principale di squid è /etc/squid/squid.conf, quindi non ci resta che andare ad aprirlo con l'editor di fiducia:


# NETWORK OPTIONS
# Nome host (FQDN) e porta dove il proxy sarà in ascolto
http_port proxy.valhalla.lan:8080

# TAG: icp_port
# Porta usata per comunicare con altri proxy
# 0: funziona disabilitata (inutile visto che useremo un solo proxy)
icp_port 0

# TAG: hierarchy_stoplist
# Lasciamo il default che va bene così Smile
hierarchy_stoplist cgi-bin ?

# TAG: no_cache
# Lasciamo il default che va bene così Smile
acl QUERY urlpath_regex cgi-bin \?

# TAG: maximum_object_size (bytes)
# Dimensione massima degli oggetti da tenere in cache.
# Uso un valore molto altro perchè avendo N pc con debian che si aggiornano in un lasso di tempo molto piccolo, mantengo in cache i pacchetti comuni che non devono quindi essere riscaricati da internet.
maximum_object_size 30 MB

# TAG: cache_access_log
# File di log degli accessi al proxy
cache_access_log /var/log/squid/access.log

# TAG: cache_log
# File di log della cache
cache_log /var/log/squid/cache.log

# TAG: cache_store_log
# File di log degli oggetti
cache_store_log /var/log/squid/store.log

# TAG: emulate_httpd_log on|off
# Simulo il log nel formato del demone http per poter generare le statistiche con awstats
emulate_httpd_log on

# TAG: pid_filename
# File con il pid del processo
pid_filename /var/run/squid.pid

# TAG: log_fqdn on|off
# Squid effettua un DNS lookup per sapere i nomi di chi vuole usarlo e salvare tali nomi nel log. Questo causa una latenza per cui lo disabilitiamo.
log_fqdn off

# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
# -----------------------------------------------------------------------------

# TAG: ftp_user
# Utente da usare per gli accessi ai server ftp
ftp_user anonymous@tin.it

# TAG: hosts_file
# Path assoluto del file hosts (solitamente /etc/hosts)
hosts_file /etc/hosts

# TAG: refresh_pattern
# Lasciamo i valori di default che vanno bene Smile
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

# ACCESS CONTROLS
# -----------------------------------------------------------------------------

# TAG: acl
# Definiamo le Access Control List
# Nome: all
# Tipo: filtrosu ip sorgente
# Valore: 0.0.0.0/0.0.0.0 (tutti)
acl all src 0.0.0.0/0.0.0.0

acl manager proto cache_object

# Nome: localhost
# Tipo: filtro su ip sorgente
# Valore: 127.0.0.1/255.255.255.255 (Solo il localhost)
acl localhost src 127.0.0.1/255.255.255.255

# Nome: to_localhost
# Tipo: filtro su ip di destinazione
# Valore: 127.0.0.0/8 (Solo gli ip che identificano il localhost)
acl to_localhost dst 127.0.0.0/8

# Nome: SSL_ports
# Tipo: filtro su numero porta
# Valore: 443 563 (Porte protocollo ssl)
acl SSL_ports port 443 563

acl SSL_ports port 873
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 631
acl Safe_ports port 873
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT

# Questa è l'acl che identifica la mia lan
acl Valhalla.lan src 192.168.1.0/255.255.255.0

# TAG: http_access
# Definiamo chi può usare il proxy e chi no sfruttando le ACL
# Tuti gli ip appartenenti alla LAN possono usare il proxy, il resto non lo tocchiamo e lasciamo i valori di default.
http_access allow Valhalla.lan
http_access allow manager localhost

# Only allow purge requests from localhost
http_access deny manager
http_access allow purge localhost
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny purge
#
http_access deny CONNECT !SSL_ports

# And finally deny all other access to this proxy
http_access allow localhost
http_access deny all

# TAG: http_reply_access
# Abilitiamo le risposte alle richieste dei client
http_reply_access allow all

# TAG: icp_access
# Abilitamo o meno le risposte alle richieste icp
icp_access allow all

# ADMINISTRATIVE PARAMETERS
# -----------------------------------------------------------------------------

# TAG: cache_mgr
# Email del gestore della cache
cache_mgr squidadmin@valhalla.lan

# TAG: visible_hostname
# Nome da mostrare in caso di errori
visible_hostname proxy.valhalla.lan

# OPTIONS FOR THE CACHE REGISTRATION SERVICE
# -----------------------------------------------------------------------------
#

# HTTPD-ACCELERATOR OPTIONS
# -----------------------------------------------------------------------------

# TAG: httpd_accel_host
# TAG: httpd_accel_port
# Necessarie per il transparent proxy
httpd_accel_host virtual
httpd_accel_port 80

# TAG: httpd_accel_with_proxy on|off
# Necessario per il transparent proxy
httpd_accel_with_proxy on

# TAG: httpd_accel_uses_host_header on|off
# Necessario per il transparent proxy
httpd_accel_uses_host_header on

# MISCELLANEOUS
# -----------------------------------------------------------------------------

# TAG: logfile_rotate
# Numero di log da tenere in memoria (da 0 a 9)
logfile_rotate 10

# TAG: error_directory
# Directory dove prendere i messaggi di errore
# E' possibile scegliere la lingua in base alle disponibili
error_directory /usr/share/squid/errors/Italian

# TAG: coredump_dir
# Dove mette i core-dump
coredump_dir /var/spool/squid

# TAG: ie_refresh on|off
# Necessaria per il transparent proxy con IE
ie_refresh on

# TAG: cache_replacement_policy
# TAG: memory_replacement_policy
# Metodo di gestione dei file in cache e su hdd
cache_replacement_policy lru
memory_replacement_policy lru

A questo punto squid è configurato:
la prima volta che lo si avvia, è necessario eseguire

# squid -z

per fare si che venga (ri)generata la struttura delle cartelle di cache.
Per quanto riguarda iptables, basta impostare una semplice regola:

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-destination 192.168.1.2:8080

ovvero Tutti i pacchetti tcp che arrivano sull'interfaccia eth0 che hanno come porta di destinazione la 80, redirigili a 192.168.1.2 sulla porta 8080

Ovviamente sulla porta 8080 del pc che ha ip 192.168.1.2 c'è in ascolto squid. Cambiate ip e porta secondo la vostra configurazione e sottorete
CREDITS

Autore: Incubus
E-Mail: incubus@gl-como.net
Membro del Gruppo Linux Como: http://www.gl-como.net


In:



Commenti

Ritratto di bonz79
#1

Inviato da bonz79 il Mer, 30/03/2005 - 21:53.

NTLM auth

ciao ragazzi, intanto mando un bravo all'autore di questa mini guida, io però chiedo se qualcuno sa dovre trovare documentazione per autenticare gli utenti proxy in un domain controller win2003 e avere quindi in /var/log/squid/access.log ip e username

grazie a tutti
bonz



Ritratto di Incubus
#2

Inviato da Incubus il Mer, 13/04/2005 - 14:32.

Re: NTLM auth

Hai provato cercando su google? Io non ho esperienza in merito a quello che chiedi così ho fatto questa ricerca generica:
http://www.google.it/search?hl=it&q=squid%2Bntlm%2Bauth&spell=1
e ho trovato parecchio materiale ma nn avendo modo di provare nn so a che link specifico indirizzarti Thinking



Ritratto di beaver
#3

Inviato da beaver il Lun, 01/10/2007 - 15:38.

richiesta correzione

innanzitutto complimenti per la guida.

credo che a causa di qualche aggiornamento
non è più possibile specificare --to-destination dopo il target redirect di iptables

come si potrebbe impostare netfilter per avere lo stesso risultato?



Ritratto di Incubus
#4

Inviato da Incubus il Lun, 15/10/2007 - 13:33.

Re: richiesta correzione

Al momento non ho modo di provare se la regola funziona ma, per quanto riguarda iptables, dovrebbe diventare:
<br /># iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:8080<br />
Per quanto riguarda la configurazione di squid vera e propria, se usi una versione 2.6.X (per la serie 2.5.X nn ho idea) c'è da modificare un po' di roba:
Tutta la parte
<br /># HTTPD-ACCELERATOR OPTIONS<br /># -----------------------------------------------------------------------------<br /><br /># TAG: httpd_accel_host<br /># TAG: httpd_accel_port<br /># Necessarie per il transparent proxy<br />httpd_accel_host virtual<br />httpd_accel_port 80<br /><br /># TAG: httpd_accel_with_proxy on|off<br /># Necessario per il transparent proxy<br />httpd_accel_with_proxy on<br /><br /># TAG: httpd_accel_uses_host_header on|off<br /># Necessario per il transparent proxy<br />httpd_accel_uses_host_header on<br />
diventa inutile, e basta aggiungere transparent alla direttiva http_port così che
<br />http_port proxy.valhalla.lan:8080<br />
diventa
<br />http_port proxy.valhalla.lan:8080 transparent<br />

Ciao Laughing



Ritratto di paolo
#5

Inviato da paolo il Lun, 15/10/2007 - 14:00.

Re: richiesta correzione

Grazie per aver aggiunto le correzioni da fare per Squid 2.6, le stavo per aggiungere io Smile

Che ne dici di dare un aggiornata all'intera guida ?

Ciao

Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network



Ritratto di Incubus
#6

Inviato da Incubus il Lun, 15/10/2007 - 15:51.

Re: richiesta correzione

Penso sia l'unico modo dato che io non posso modificare la guida :-P



Ritratto di Damianodd
#7

Inviato da Damianodd il Gio, 19/11/2015 - 16:13.

Re: Squid e Transparent Proxy

Ciao a tutti, volevo chiedere alcune informazioni, con tale impostazione posso monitorare il traffico, come posso poi vedere i log? Dopo tale configurazione come posso dare delle restrizioni a dei determinati URL? Avete qualche soluzione per la configurazione di SquidGuard?