Apache2: proteggere directory mediante autenticazione

Versione del 16 apr 2011 alle 13:52 di Ferdybassi (discussione | contributi) (Creata pagina con '== Introduzione == In molte situazioni i servizi HTTP sono pubblici e pensati per essere accessibili da chiunque abbia la possibilità di connettersi. <br/> Ci sono però diversi...')
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Introduzione

In molte situazioni i servizi HTTP sono pubblici e pensati per essere accessibili da chiunque abbia la possibilità di connettersi.
Ci sono però diversi casi in cui gli amministratori hanno bisogno di ottenere un qualche controllo sugli accessi a particolari directory o file del sito; ad esempio la pagina delle statistiche o la pagina di configurazione di Apache o PHP non dovrebbero essere raggiungibili da chiunque. In questa guida vedremo due dei possibili metodi di controllo degli accessi:

  • controllo degli accessi credential-based
  • controllo degli accessi rule-based

Controllo degli accessi Rule-Based

Questo tipo di controllo degli accessi è basato su delle regole (rules) definite all'interno del file di configurazione di Apache o, meglio, all'interno del file di configurazione del Virtual Host o del servizio che vogliamo proteggere.

Regole base

Nel file di configurazione del Virtual Host inseriamo le prime regole base:

<Directory /var/www/esempio.it/www/>
          Order deny,allow
          Deny from all
          Allow from 192.168.90.0/24
</Directory>

La direttiva:

  • Order Deny,Allow indica ad Apache di processare la regola Deny (proibisci) sempre prima della regola Allow (consenti)
  • Deny from all dice ad Apache di proibire a chiunque l'accesso alla directory
  • Allow from indica ad Apache di consentire l'accesso alla risorsa a tutte le macchine della rete 192.168.90.0/24

Regole addizionali

Le direttive Deny e Allow possono essere combinate e ripetute, come in questo esempio:

<Directory /var/www/esempio.it/www/>
          Order deny,allow
          Deny from 192.168.100.100
          Deny from 10.0.0.0/24
          Allow from 192.168.90.0/24
          Allow from 10.0.0.11
</Directory>

Apache permette anche di specificare regole di accesso basate sugli hostname e non solo sugli indirizzi IP. Ad esempio:

<Directory /var/www/esempio.it/www/>
          Order deny,allow
          Deny from 192.168.100.100
          Deny from 10.0.0.0/24
          Deny from dominio.it
          Allow from dominio.org
          Allow from 192.168.90.0/24
          Allow from 10.0.0.11
</Directory>

E' anche possibile costruire delle regole di accesso basate sulle variabili della sessione HTTP: questo ci permette di creare regole leggendo ad esempio il tipo di browser (user agent) o il referrer. Ad esempio:

<Directory /var/www/esempio.it/www/>
          SetEnvIf Referer google.it search_traffic
          Order Deny,Allow
          Deny from all
          Allow from env=search_traffic
</Directory>
Questa regole lavora insieme al modulo Apache mod_setenvif, in questo modo:
# se il referrer del visitatore coincide con google.it viene inizilizzata la variabile search_traffic
# viene negato a tutti l'accesso alla risorsa
# viene consentito l'accesso s chi ha la variabile search_traffic impostata