Politica di gestione dell'accesso ad internet

Questa è la guida per la configurazione del server con le seguenti politiche di accesso ad internet:

  • Utenti non autenticati non escono
  • Utenti autenticati escono solo se sono nei gruppi internet, internetflat o serale
  • L'accesso alla rete Internet è consentito da lunedì a venerdì dalle 7.00 alle 22.00 ed il sabato dalle 7.00 alle 14.00 per il gruppo internet, mentre per il gruppo serale l'orario è limitato dalle 18.00 alle 22.00. Il gruppo internetflat non ha limitazioni di orario.
  • Tutte le attività svolte vengono registrate in appositi log files.
  • La navigazione su Internet viene svolta in modalità protetta (filtro sui contenuti)

File di configurazione di squid

Riportiamo un file di esempio funzionante, commenteremo poi alcune sezioni:

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 128 MB
maximum_object_size 204800 KB
maximum_object_size_in_memory 32 KB
cache_dir ufs /var/spool/squid  1000 16 256
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      # https, snews
acl SSL_ports port 873          # rsync
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 631         # cups
acl Safe_ports port 873         # rsync
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


##### CONTROLLO SUL BROWSER #####
# controllo sul browser
# non facciamo uscire il browser internet explorer per problematiche di sicurezza (come suggerito
# dal Security Task Force) 
# abilitiamo il log degli user agent

useragent_log /var/log/squid/useragent_log
acl noexplorer browser MSIE

# blocco di explorer indipendemente da utente,gruppo, orario etc.

http_access deny noexplorer

# pagina personalizzata di errore. Il file deve esistere nella directory
# /usr/share/squid/errors/English/ altrimenti squid non parte. Allegato 
# alla pagina un esempio per questo file.

deny_info ERR_NO_INTERNET_EXPLORER noexplorer

##### FINE CONTROLLO SUL BROWSER #####

auth_param basic program /usr/lib/squid/ldap_auth -b ou=Users,dc=fuss,dc=local -h localhost -v 3

# definizione ACL per il gruppo 'internet'
external_acl_type gruppointernet %LOGIN /usr/lib/squid/squid_unix_group -g internet
acl acl_internet external gruppointernet

# definizione ACL per il gruppo 'internetflat'
external_acl_type gruppointernetflat %LOGIN /usr/lib/squid/squid_unix_group -g internetflat
acl acl_internetflat external gruppointernetflat

# definizione ACL per gruppo 'serale'
external_acl_type grupposerale %LOGIN /usr/lib/squid/squid_unix_group -g serale
acl acl_serale external grupposerale

# richiesta della password
acl password  proxy_auth REQUIRED

# orari di accesso.
acl orariogenerico time  M T W H F 7:00-22:00 A 7:00-14:00
acl orarioserale time M T W H F 18:00-22:00 A 13:00-18:00
acl orariodirigente time M T W H F 8:00-14:00

# acl per singoli utenti, in questo caso 'renata' e 'stefano'
acl dirigente proxy_auth renata stefano
http_access allow dirigente orariodirigente

# verifica con le acl del gruppo 'serale' con autenticazione e orario per il serale
http_access allow password acl_serale orarioserale localhost

# verifica con le acl del gruppo 'internet' assieme ad autenticazione e orario
http_access allow password acl_internet orariogenerico localhost

# idem come sopra, ma il gruppo 'internetflat' non ha limitazioni di orario
http_access allow password acl_internetflat localhost

# nessun altro puo' passare
http_access deny all


http_reply_access allow all

icp_access allow all
visible_hostname <NOME SERVER>.<DOMINIO>
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
coredump_dir /var/spool/squid
extension_methods REPORT MERGE MKACTIVITY CHECKOUT


IMPORTANTE: sostituire <DOMINIO> con il nome del dominio della scuola. Se non lo sapete o non lo ricordate lo potete trovare scritto in diversi file di configurazione, per esempio in /etc/resolv.conf

Vediamo in che modo viene implementata la policy che avevamo definito all'inizio:

  • Utenti non autenticati non escono

Questa regola viene implementata da

auth_param basic program /usr/lib/squid/ldap_auth -b ou=Users,dc=<DOMINIO>,dc=local -h localhost -v 3
acl password proxy_auth REQUIRED

ATTENZIONE: se gli username contengono lettere maiuscole l'autenticazione non funziona (vedi #190)

  • Utenti autenticati escono solo se sono nel gruppo Internet

Questa regola viene implementata da

external_acl_type unix_group %LOGIN /usr/lib/squid/squid_unix_group -g <NOME GRUPPO CHE ESCE SU INTERNET>
acl internet external unix_group
  • L'accesso alla rete Internet è consentito da lunedì a venerdì dalle 7.00 alle 22.00 ed il sabato dalle 7.00 alle 14.00

Questa regola viene implementata da

acl orario time  M T W H F 7:00-22:00 A 7:00-14:00

NOTA: da tenere presente se si desiderano fare degli aggiornamenti notturni attraverso cron

Come vedete nei tre casi precedenti abbiamo definito un'acl: è una mera definizione e non provoca alcuna azione. Per passare all'azione e utilizzare le acl che abbiamo definito dovremmo usare

http_access allow internet password orario localhost

che tradotto in italiano dice: regola di accesso: permetti l'uso del proxy alle richieste che soddisfano le acl "internet" "password" "orario" e "localhost"

Come agire per riconfigurare squid

  • Utilizzando l'utente root modificare il file /etc/squid/squid.conf prendendo come riferimento l'esempio portato sopra, possiamo addirittura cancellare il file che troviamo nel server e sostituirlo con il nostro esempio, a patto che ci ricordiamo di modificare le parti indicate (il dominio e il nome del gruppo)
  • Riavviare squid
    /etc/init.d/squid restart
    
  • Adesso per concludere il lavoro in modo pulito diamo un alias al server, in questo modo con una sola how-to copriamo tutte le scuole.

Il primo passo è fermare bind:

/etc/init.d/bind9 stop
  • Apriamo con un editor il file di database del DNS:
vi /var/cache/bind/db.local
  • Incrementiamo il seriale di 1 e aggiungiamo la seguente riga in fondo:
proxy  CNAME <NOME DEL SERVER>

NOTA: solitamente il nome è server, lo vediamo comuue indicato come record A nel file che stiamo modificando

  • Stop del server DHCP
/etc/init.d/dhcp3-server stop
  • Eliminare il journal di BIND, eseguendo:
rm /var/cache/bind/*.jnl
  • Riavviare il serer BIND:
/etc/init.d/bind9 start
  • Riavviare il server DHCP:
/etc/init.d/dhcp3-server start
  • Ultimo passaggio e' disabilitare nscd sul server.
update-rc.d -f nscd remove ; /etc/init.d/nscd stop
  • In alternativa possiamo ridurre la cache del servizio nscd sul server, editando il file /etc/nscd.conf per rispecchiare le direttive dello specchietto riportato qua sotto
        enable-cache            group           yes
        positive-time-to-live   group           60
        negative-time-to-live   group           60
        suggested-size          group           211
        check-files             group           yes

NOTA: l'utilità di nscd sul server è molto limitata, è quindi preferibile disabilitarlo

Come cambiare la lingua

Possiamo cambiare la lingua dei vari messaggi di errore che squid presenta agli utenti. Per esempio per utilizzare la lingua italiana è sufficiente aggiungere

error_directory /usr/share/squid/errors/Italian

nel file di configurazione. Le lingue supportate corrispondono alle directory presenti in /usr/share/squid/errors/

Verifiche

E' importante eseguire tutte le verifiche indicate per essere sicuri che il proxy funzioni veramente

  • provare a navigare con un utente autorizzato (=inserito nel gruppo internet) indicando correttamente username e password;
  • provare a navigare con un utente autorizzato indicando correttamente username ma sbagliando la password;
  • provare a navigare con un utente non autorizzato (=non inserito nel gruppo internet) indicando correttamente username e password;
  • provare a navigare con un utente autorizzato utilizzando le sue credenziali corrette, poi provare a toglierlo dal gruppo internet e verificare se il proxy lo blocca subito;

FTP

Per abilitare il traffico FTP e' necessario permettere il traffico di questo servizio attraverso il firewall. Vedi patch allegata alla pagina.

Troubleshooting

TODO: da inserire i comandi per fare troubleshooting

Attachments