mercoledì 9 aprile 2008

Squid e autenticazione su ldap

Uno dei commenti al blog degli ultimi giorni mi ha fatto venire in mente una cosa che avevo messo in piedi tempo fa, che funziona molto bene e che può tornare molto utile per gestire/limitare/loggare gli accessi al web da una rete privata. Volevo fare in modo che il proxy server squid effettuasse le autenticazioni su un directory server openldap, ma ricordo di aver trovato qualche difficoltà nel reperire documentazione e di aver sudato non poco prima di riuscire. Quindi, nella speranza che sia utile a qualcuno, riporto qua le 4 righe da inserire in squid.conf per abilitare questa funzionalità.



1 - auth_param basic program /usr/lib/squid/ldap_auth -b ou=People,dc=zaffa,dc=org -f "(&(objectClass=gosaProxyAccount)(uid=%s))" -P -v 3
2 - auth_param basic children 5
3 - auth_param basic realm Squid proxy-caching web server
3 - auth_param basic credentialsttl 2 hours


Chiarisco cosa fanno queste righe. Intanto premetto che sto usando GOSA, un framework per la gestione di account su directory ldap. Usando l'interfaccia web di GOSA sono in grado di modificare rapidamente gli account utente e macchina (e un mucchio di altre cose).
Per ogni utente posso decidere se abilitarlo o meno all'uso del proxy (gli utenti non abilitati ovviamente non devono poter navigare senza usare il proxy, altrimenti il marchingegno non ha molto senso). A tutti gli account di utenti abilitati, e solo a loro, viene aggiunta la objectclass "gosaProxyAccount".

La riga 1 quindi significa: fai una autenticazione di base usando il programma /usr/lib/squid/ldap_auth, cerca gli utenti a partire da ou=People,dc=zaffa,dc=org (-b), metti un filtro e utilizza per l'autenticazione solo quelli che presentano la objectclass gosaProxyAccount (-f), usa una connessione ldap persistente (-P), usa il protocollo ldap versione 3 (-v).
A riga 2 si dice di far partire in contemporanea 5 istanze del programma di autenticazione.
La riga 3 serve a inserire le informazioni che diventeranno poi il titolo della form di autenticazione.
Riga 4 definisce la durata della validità delle credenziali fornite.

Non avendo specificato alcun indirizzo viene usato localhost di default, in questo caso quindi squid e ldap risiedono sulla stessa macchina.
Comunque digitando da linea di comando semplicemente /usr/lib/squid/ldap_auth si ottiene una schermata riepilogativa della sintassi e delle opzioni.

Ah ... dimenticavo ... la distribuzione è Ubuntu, ma non credo ci siano molte differenze anche su altri sistemi.

5 commenti:

  1. Molto utili le tue info! Grazie!
    come impedisci a chi non si autentica con squid di utilizzare il server come router?
    Hai impostato qualche regola particolare in iptables o semplicemente non hai abilitato il forwarding tra le schede eth del server?

    RispondiElimina
  2. ok. Mi rispondo parzialmente.
    È necessario creare delle ACL adatte tipo:

    acl ldapauth proxy_auth REQUIRED
    acl our_networks src 192.168.1.0/24
    http_access allow our_networks ldapauth
    http_access allow localhost

    Ma ora mi sfugge come gestire i filtri per i contenuti web da gosa (tipo violenti, porno etc..)
    In gosa c'è un flag che imposta se l'utente deve avere i filtri sui contenuti e l'orario nel quale è permesso navigare ma in realtà impostano solo degli attributi dell'albero LDAP.
    Ne sai niente?

    RispondiElimina
  3. Ciao, sono via da casa per tutta settimana, per cui le risposte arriveranno (se arriveranno) con un po' di ritardo. Secondo me la maniera di bloccare gli accessi ad internet non autorizzati dipende dal livello di accesso generale che vuoi dare agli utenti. Questo vuol dire che se agli utenti vuoi dare solo web filtrato devi agire a livello di firewall o router. Es. consenti gli accessi verso porte 80 e 443 remote solo dalla macchina proxy e chiudi tutto (ma proprio tutto) il resto.
    Per i contenuti prova dansguardian. Ha la possibilità di selezionare addirittura diversi livelli di filtraggio per diversi utenti (dal massimo filtraggio, ad es. per bambini) a nessun filtraggio. Si accompagna bene a squid e funziona bene con l'autenticazione.
    ciao

    RispondiElimina
  4. ooops scusa ... dimenticavo un pezzo ... nella configurazione che ho provato gosa e dansguardian non avevano niente a che fare.

    RispondiElimina
  5. Ciao qualcuno sa se è possibile far si che squid non richieda la password agli utenti che sono già autenticati nel dominio ? Francesco

    RispondiElimina