Apache2: proteggere directory mediante autenticazione
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