Home Linux Controllo accesso internet con squid e php

Menu Principale

Informatica

Controllo accesso internet con squid e php
Domenica 13 Settembre 2009 10:55

Lo scopo è quello di realizzare una pagina in php per controllare l'accesso ad internet di un gruppo di computer.

Questo sistema l'ho utilizzato in alcune scuole per permettere all'insegnante di attivare / disattivare l'accesso ad internet dell'aula di informatica.

 

Il tutto si basa su squid, e apache (ma potrebbe essere qualsiasi altro server web che supporta php).

 

IMPORTANTE: A CAUSA DELLA NON CONFORMITÀ DI INTERNET EXPLORER 6 CHE NON GESTISCE CORRETTAMENTE  I TAG HTML FORM-ACTION, PER LA PROCEDURA SI DEVE UTILIZZARE FIREFOX O OPERA.

 

Supponiamo di trovarsi in una aula di informatica: ci sarà sicuramente una postazione per il docente che dovrà avere la possibilità di gestire la connessione dei pc dell'aula. Ogni pc  dovrà essere dotato di indirizzo ip statico che sarà utilizzato per autorizzare o negare l'accesso ad internet.

 

Tramite il pc dell'insegnante ci si collega al server web che dovrà ospitare anche squid (nelle configurazioni che ho creato il pc funge anche da firewall con proxy trasparente) e tramite uno script in php si modifica il file di configurazione di squid che contiene l'elenco dei pc autorizzati: quando si attiva il collegamento lo script genera un file con tutti gli indirizzi (scritti in modo sequenziale esempio da 192.168.1.1 a 192.168.1.25), mentre quando si disattiva il file contiene solo l'indirizzo ip del pc  docente che è sempre il primo (in questo caso 192.168.1.1).

 

Nel caso che esistano più aule di informatica, c'è la possibilità di attivare uno o tutti i pc dei docenti in modo da poter amministrare tutte le aule di informatica (cioè il pc cattedra dell'aula 1 può attivare o disattivare anche i pc dell'aula 2 ecc.

 

Naturalemte è previsto anche il controllo dell'indirizzo ip di chi accede alla pagina amministrativa: se non è quella dei pc docenti, viene visualizzata una pagina di errore.

 

Per configurare i vari indirizzi, i percorsi e gli altri parametri, esiste un solo file: config.php

 

/

 

/*la attivazione disattivazione dell'accesso ad internet avviene tramite squid

 

squid viene configurato con *N_AULE* file di gruppi di indirizzi IP

 

in ciascuno di questi files ci sono gli indirizzi  ip abilitati all'accesso

 

per ogni gruppo esiste un indirizzo provilegiato (ip cattedra) che ha l'autorizzazione  

 

per attivare /disattivare l'accesso per il gruppo

 

ciascun indirizzo amministratore può essere impostato come SUPER amministratore

 

ed ha la possibilità di amministratre TUTTI i gruppi di  pc

 

*/

 

// file della configurazione del programma di gestione aule

 

// definizione dei nomi ruoli degli indirizzi ip  delle aule

 

//definisco un array di  4 array

 

//  [nome] [ip-amministratore] [ip riservati] [SUPER amministratore]

 

//  [ string ]        [intero]               [intero]             [booleano]

 

$AULE = array (

 

                        array ("aula 1", "aula 2", "aula 3", "aula 4", "aula 5", "aula 6"),

 

                        array(1, 21, 61, 101, 201, 221),

 

                        array(20,20,20,20,20,20),

 

                        array(1,0,0,1,1,0)

 

                        );

 

$RETE= '172.16.200.'; // rete di lavoro

 

$N_AULE=sizeof($AULE[0]);    //numero dei gruppi da amministrare

 

$SRV_WEB = '172.16.200.2' ;  // indirizzo del server web con apache che amministra  squid

 

$IND_SCRIPT = '/form-action.php' ; //percorso e nome degli script di attivazione

 

//$FILE_X_SQUID = '/tmp/'; //percorso dei file degli indirizzi ip per squid

 

$FILE_X_SQUID = '/etc/squid/elenchi/'; //percorso dei file degli indirizzi ip per squid

 

$NOME='aula'; //prefisso per il nome dei file da utilizzare con squid

 

$ESTENS='.txt'; // suffisso per i file

 

$FILE_LOG='/var/www/log/accessi.log';

 

?>

 

La pagina da chiamare  per la gestione  e 24mar.php (24 marzo 2007 è la data in cui ho creato la versione funzionante) che a sua volta richiama il file form-action.php e il file controllo.php che scrive le operazioni di log.

 

Tutti questi file (24mar.php, form-action.php, controllo.php e config.php)  sono  allegati nel file controllo.tgz. e devono essere scompattati nella cartella root del server web (in debian /var/www)

A questo punto  si deve configurare squid che prelevi dal file generato dallo script (aula1.txt) in php gli indirizzi da abilitare come nel seguente esempio:

# rete informatica
acl aula src "/etc/squid3/elenchi/aula1.txt"
#domini vietati
acl siti-vietati dstdomain "/etc/squid3/elenchi/siti-vietati.txt"
#ip vierìtati
acl ip-vietati dst "/etc/squid3/elenchi/ip-vietati.txt"
#parole-vietate
acl parole-vietate urlpath_regex -i  /etc/squid3/elenchi/parole-vietate.txt" # regex matching on URL path

 

Ultimo passo da fare  è quello di far leggere a squid i dati aggiornati nel file degli elenchi.

Nella prima stesura, aggiungendo  l'utente www-data al gruppo root, riuscivo a lanciare lo script di aggiornamento ( squid -k reconfigure) ma da un certo aggiornamento del sistema in poi, non ci sono più riuscito ricevendo un messaggio di permesso negato.

Allora ho dovuto impostare  il sistema ad aggiornarsi ogni minuto con cron (* * * * 1-6  /usr/sbin/squid3 -k reconfigure)

Ultima cosa da fare è aggiornare sarg (programma che genera i report di squid) e ruotare i file di glog di squid stesso

Sempre con cron alla mezzanotte si avvia uno script in  cui:

  • viene fermato squid
  • viene lanciato sarg
  • viene fatta la rotazione dei file di log (squid -k rotate)
  • viene riavviato squid.

 

Questo è tutto,  se qualcuno ha voglia di commentare e  suggerire eventuali modifiche, sono a disposizione: paolex66"at"gmail.com

paolex66"chiocciola"gmail.com

 

 

 

 

 

Ultimo aggiornamento Lunedì 21 Settembre 2009 20:02
 
Copyright © 2010 Scuola, Computer e dintorni. Tutti i diritti riservati.
Joomla! è un software libero rilasciato sotto licenza GNU/GPL.