Controllo d'Acesso Le politche di accesso ad internet possano basarsi su particolari orari o lassi di tempo, di cache, particolari siti o gruppi di siti e molte altre opzioni... Il sistema di accesso è basato su due specifici componenti: elementi di ACL e liste d'acesso.. Difatti una lista d'accesso permette di autorizzare o negare l'utilizzo del servizio stesso. Alcuni tipi e definizioni delle politche di ACL sono qui elencati * src : Origine: Indirizzo IP del client * dst : Destinazione: Indirizzo IP del server * srcdomain : Dominio di origine: Dominio del client * dstdomain : Dominio di destinazione: il dominio del server * time : Ora del giorno e giorno della settimana * url_regex : Ricerca una sottostringa nell'URL * urlpath_regex: Rierca una sottosrtinga nell'URL, escudendo dalla ricerca e il protocollo e l'hostname * proxy_auth : Autentifica il client per mezzo di procedure esterne * maxconn : Numero massimo di connessioni concomitati dall'IP di un client Per utilizzare i controlli di acesso, si debbono prima definire delle politiche di acesso ed applicare le regole a queste ultime. Il formato di una dicharazione ACL è acl nome_elemento_acl tipo_di_elemento_acl valore_della_acl Nota : 1. nome_elemento_acl è un nome, definto a piacere da un utente, assegnato ad una ACL. 2. Non vi possono essere due elementi ACL con lo stesso nome. 3. Ogni ACL consiste in una lista di valori. Quando viene eseguita la ricerca di riscontro, molteplici valori sono considerati con l'operatore logico OR. Ciò significa che, si ha un riscontro positivo allorchè si abbia almeno un elmento che risponda alla rchiesta. 4. Non tutti gli elementi ACL possono esser usati in congiunzione con le liste di accesso. 5. Più elementi ACL possono essere definiti creando molteplici righe di definizione. Squid li combinerà poi in una singola lista. Sono disponibili diverse liste di accesso. Quelle che noi ora andremo a considerare per la nostra configurazione sono: * http_access: Permette ai client che effettuino richieste di tipo HTTP di accedere alla porta HTTP. Questa è la lista di controllo di accesso controllo primario. * no_cache: Definisce il metodo della cache basandosi sulle risposte. Una lista di regole di accesso consiste in un gruppo di parole chiave come allow(permetti) e deny(vieta), autorizzando o negando l'utlizzo di un servizio ad una particolare ACL o ad un gruppo delle medesime. Nota: 1. Le regole sono controllate nell'ordine in cui esse sono definite (ovvero scritte nel file di configurazione). Appena si ha un riscontro positivo con una regola la ricerca termina. 2. Una lista di accesso è formata da più regole. 3. Se non si ha alcun riscontro tra le regole definite, il comportamento del server sarà pari al contrario dell'ultima regola espressa. È, quindi bene, definire un comportamento predefinito. 4. Tutti gli elementi di una voce di accesso sono trattati con l'operatore logico AND. Il tutto viene trattato come di seguito evidenziato: http_access Azione dichiarazione1 AND dichiarazione2 AND dicharazione OR. http_access Azione dichiarazone3 Più dichiazioni http_access sono trattate con l'operatore logico OR. 5. Mi raccomando ancora... vi ricordo che le regole sono lette dalla prima scritta all'ultima. Utilizzare la funzionalità di controllo di accesso Molte ACL e regole permettono di controllare l'accesso ad Internet dei client in maniera molto flessibile e funzionale. Esempi di metodi di controllo sono qui riportati. Non esistono solo queste regole di controllo, non consideratele quindi come le uniche appliccabili. 1. Autorizzare un gruppo di macchine di accedere ad Internet: acl allowed_clients src 192.168.0.10 192.168.0.20 192.168.0.30 http_access allow allowed_clients http_access deny !allowed_clients Queste definizioni permettono solo alle macchine che hanno come indirizzo IP 192.168.0.20, 192.168.0.10 e 192.168.0.30 di accedere ad Internet e negare l'accesso ad Internet alle altre macchine (che non sono presenti nella dichiarazione allowed_clients). 2. Restringere l'accesso durante determinati periodi della giornata. acl allowed_clients src 192.168.0.1/255.255.255.0 acl regular_days time MTWHF 10:00-16:00 http_access allow allowed_clients regular_days http_access deny allowed_clients Questo permette di accedere ad Internet a tutte le macchine della classe di rete 192.168.0.1 dalle ore 10:00 alle ore 16:00 nei giorni dal Lunedì al Venerdì. 3. Accesso differenziato per orari e client acl hosts1 src 192.168.0.10 acl hosts2 src 192.168.0.20 acl hosts3 src 192.168.0.30 acl mattino time 10:00-13:00 acl ora_di_pranzo time 13:30-14:30 acl sera time 15:00-18:00 http_access allow host1 mattino http_access allow host1 sera http_access allow host2 ora_di_pranzo http_access allow host3 sera http_access deny all Queste dichiarazioni permettono al client host1 di accedere ad Internet sia la mattina sia la sera; i client host2 ed host3 possono invece accedere al servizio rispettivamente solo all'ora di pranzo e la sera. Nota: Tutte le definizioni di accesso sono unite tra loro con un AND logico ed eseguite con la seguente modalità http_access Action statement1 AND staement2 AND statement OR. Più dichiarazioni http_access sono valutate con operatore logico OR mentre le dichiarazioni in una singola riga sono trattate con l'operatore AND. Per questo motivo la riga http_access allow host1 mattino sera non avrebbe di certo fatto accedere al client sia la mattina che la sera in quanto non può verificarsi la condizione data dall'ora (mattino AND sera). 4. Interdizione verso alcuni siti Squid puù vietare l'accesso a particolari siti o a siti che contengono specifiche parole. Ciò può essere implementato nella seguente maniera: acl allowed_clients src 192.168.0.1/255.255.255.0 acl banned_sites url_regex abc.com *()(*.com http_access deny banned_sites http_access allow allowed_clients La stessa operezione può essere attuata bloccando l'accesso a siti che contengono specifiche parole. Per esempio le parole dummy , fake acl allowed_clients src 192.168.0.1/255.255.255.0 acl banned_sites url_regex dummy fake http_access deny banned_sites http_access allow allowed_machines Risulta poco funzionale inserire tutti siti e le parole che si vogliano bloccare all'interno del file di configuarazione. Possiamo invece includere questa lista in un file esterno (per esempio il file /etc/banned.list) e la ACL può inglobare queste informazioni prelevandole dal file da noi definito. acl allowed_clients src 192.168.0.1/255.255.255.0 acl banned_sites url_regex "/etc/banned.list" http_access deny banned_sites http_access allow allowed_clients 5. Ottimizzarne l'uso Squid può limitare il numero di connessioni da un client; questa funzionalità si attiva per mezzo della definizione maxconn. Per poter utlizzare questa limitazione si deve prima attivare la funzionalità client_db. acl mynetwork 192.168.0.1/255.255.255.0 acl numconn maxconn 5 http_access deny mynetwork numconn Nota: La ACL maxconn utilizza un confronto basato su minore di. Essa quindi è vera allorquando il numero di connessioni supera il valore (numconn) da noi definito. Questo è il motivo per cui non abbiamo una dichiarazione http_access allow. 6. Memorizzazione dei dati richiesti Le risposte alle richieste sono immediamente messe in cache. Questa è una ottima cosa se tratta di pagine il cui contenuto sia statico. Non vi è, dall`altro canto, la minima utlità di memorizzare localmente pagine cgi o Servlet. Si può prevenire la memorizzazione locale di queste pagine per mezzo della ACL no_cache. acl cache_prevent1 url_regex cgi-bin /? acl cache_prevent2 url_regex Servlet no_cache deny cache_prevent1 no_cache deny cache_prevent2 7. Personalizzare i messaggi d'errore. È possibile creare i propri messaggi di errore associati ad una regola di divieto. Questo viene implementato per mezzo della dichiarazione deny_info. Tutti i messaggi d'errore di Squid sono memorizzati in /etc/squid/errors/ La cartella contenente i messaggi d'errore può essere cambiata con un'altra per mezzo della dichiarazione error_directory. Un'altra soluzione è quella di ricorrere alla modifica dei messagi d'errore già presenti. acl allowed_clients src 192.168.0.1/255.255.255.0 acl banned_sites url_regex abc.com *()(*.com http_access deny banned_sites deny_info ERR_BANNED_SITE banned_sites http_access allow allowed_clients Nell'esempio precedente, un messaggio personalizzato verrà visualizzato allorquando un utente cercherà di accedere al sito contenente i termini che vogliamo interdire. Il file che viene dato come parametro (in tal caso ERR_BANNED_SITE) deve esistere nella cartella degli errori. Questo tipo di file deve esser scritto con codice HTML. Gli esempi qui esposti sono solo alcune opzioni, capacità e delle dichiarazioni di una ACL. Il lettore può trovare nella sezione inerente le FAQ (sito in inglese) molte altre spiegazioni su un uso più complesso e funzionale delle opzioni inerenti le dichiarazioni ACL e le poltiche di accesso al servizio.