Apache2: proteggere directory mediante autenticazione: differenze tra le versioni
mNessun oggetto della modifica |
|||
(3 versioni intermedie di un altro utente non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili}} | {{Versioni compatibili|Squeeze|Wheezy|Jessie}} | ||
== Introduzione == | == Introduzione == | ||
In molte situazioni i servizi HTTP sono pubblici e pensati per essere accessibili da chiunque abbia la possibilità di connettersi. | In molte situazioni i servizi HTTP sono pubblici e pensati per essere accessibili da chiunque abbia la possibilità di connettersi. | ||
Riga 23: | Riga 23: | ||
* ''Deny from all'' dice ad Apache di proibire a chiunque l'accesso alla directory | * ''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 | * ''Allow from'' indica ad Apache di consentire l'accesso alla risorsa a tutte le macchine della rete 192.168.90.0/24 | ||
'''Da Debian Jessie (Apache 2.4.x)''': | |||
<pre> | |||
<Directory /var/www/esempio.it/www/> | |||
Require ip 192.168.90.0/24 | |||
</Directory> | |||
</pre> | |||
La direttiva non prevede più l'utilizzo di ''Order deny,allow'' e ''Deny from all'' | |||
In questo caso specifico basta: | |||
* ''Require ip'' per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutte le macchine della rete 192.168.90.0/24 | |||
=== Regole addizionali === | === Regole addizionali === | ||
Riga 35: | Riga 46: | ||
</Directory> | </Directory> | ||
</pre> | </pre> | ||
'''Da Debian Jessie (Apache 2.4.x)''': | |||
<pre> | |||
<Directory /var/www/esempio.it/www/> | |||
Require not ip 192.168.100.100 | |||
Require not ip 10.0.0.0/24 | |||
Require ip 192.168.90.0/24 | |||
Require ip 10.0.0.11 | |||
</Directory> | |||
</pre> | |||
La direttiva non prevede più l'utilizzo di ''Order deny,allow'', ''Deny from'' e ''Allow from'' | |||
In questo caso specifico basta: | |||
* ''Require not ip'' per indicare ad Apache di negare l'accesso alla risorsa a tutte le macchine delle reti 192.168.100.100 e 10.0.0.0/24 | |||
* ''Require ip'' per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutte le macchine delle reti 192.168.90.0/24 e 10.0.0.11 | |||
Apache permette anche di specificare regole di accesso basate sugli hostname e non solo sugli indirizzi IP. Ad esempio: | Apache permette anche di specificare regole di accesso basate sugli hostname e non solo sugli indirizzi IP. Ad esempio: | ||
<pre> | <pre> | ||
Riga 47: | Riga 74: | ||
</Directory> | </Directory> | ||
</pre> | </pre> | ||
'''Da Debian Jessie (Apache 2.4.x)''': | |||
<pre> | |||
<Directory /var/www/esempio.it/www/> | |||
Require not ip 192.168.100.100 | |||
Require not ip 10.0.0.0/24 | |||
Require not host dominio.it | |||
Require host dominio.org | |||
Require ip 192.168.90.0/24 | |||
Require ip 10.0.0.11 | |||
</Directory> | |||
</pre> | |||
La direttiva non prevede più l'utilizzo di ''Order deny,allow'', ''Deny from'' e ''Allow from'' | |||
In questo caso specifico sono state aggiunte due regole: | |||
* ''Require not host'' per indicare ad Apache di negare l'accesso alla risorsa a tutti gli host del dominio "dominio.it" | |||
* ''Require host'' per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutti gli host del dominio "dominio.org" | |||
È 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: | È 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: | ||
<pre> | <pre> | ||
Riga 120: | Riga 166: | ||
{{Autori | {{Autori | ||
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 16:09, 16 apr 2011 (CEST) | |Autore = [[Utente:Ferdybassi|Ferdybassi]] 16:09, 16 apr 2011 (CEST) | ||
|Estesa_da = | |||
: [[Utente:Selky|Selky]] | |||
}} | }} | ||
[[Categoria:Web server]] | [[Categoria:Web server]] | ||
[[Categoria:Debian e sicurezza]] | [[Categoria:Debian e sicurezza]] |
Versione attuale delle 14:14, 13 nov 2015
Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.
Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione. |
Versioni Compatibili Debian 6 "squeeze" Debian 7 "wheezy" Debian 8 "jessie" |
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
Da Debian Jessie (Apache 2.4.x):
<Directory /var/www/esempio.it/www/> Require ip 192.168.90.0/24 </Directory>
La direttiva non prevede più l'utilizzo di Order deny,allow e Deny from all In questo caso specifico basta:
- Require ip per indicare ad Apache che l'accesso alla risorsa è consentito solo 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>
Da Debian Jessie (Apache 2.4.x):
<Directory /var/www/esempio.it/www/> Require not ip 192.168.100.100 Require not ip 10.0.0.0/24 Require ip 192.168.90.0/24 Require ip 10.0.0.11 </Directory>
La direttiva non prevede più l'utilizzo di Order deny,allow, Deny from e Allow from In questo caso specifico basta:
- Require not ip per indicare ad Apache di negare l'accesso alla risorsa a tutte le macchine delle reti 192.168.100.100 e 10.0.0.0/24
- Require ip per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutte le macchine delle reti 192.168.90.0/24 e 10.0.0.11
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>
Da Debian Jessie (Apache 2.4.x):
<Directory /var/www/esempio.it/www/> Require not ip 192.168.100.100 Require not ip 10.0.0.0/24 Require not host dominio.it Require host dominio.org Require ip 192.168.90.0/24 Require ip 10.0.0.11 </Directory>
La direttiva non prevede più l'utilizzo di Order deny,allow, Deny from e Allow from In questo caso specifico sono state aggiunte due regole:
- Require not host per indicare ad Apache di negare l'accesso alla risorsa a tutti gli host del dominio "dominio.it"
- Require host per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutti gli host del dominio "dominio.org"
È 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 regola lavora insieme al modulo Apache mod_setenvif, in questo modo:
- se il referrer del visitatore coincide con google.it viene inizializzata la variabile search_traffic
- viene negato a tutti l'accesso alla risorsa
- viene consentito l'accesso a chi ha la variabile search_traffic impostata
Controllo degli accessi Credential-based
Un altro modo per proteggere le directory del nostro web server è attraverso una richiesta di autenticazione.
Configurare la HTTP Authentication
Per proteggere tramite password una directory del web server occorre innanzitutto inserire le seguenti linee all'interno della sezione <Directory>
appropriata del nostro file di configurazione di Apache o del Virtual Host:
<Directory /var/www/esempio.it/www/> AuthType Basic AuthUserFile /var/auth/.htpasswd AuthName "Richiedi le credenziali per entrare" Require valid-user </Directory>
La direttiva:
- AuthType specifica quale metodo di autenticazione dovrà essere utilizzato da Apache quando stabilisce una connessione con un client. Basic è il metodo più semplice, ma invia in chiaro la password di autenticazione
- AuthUserFile specifica il percorso completo dove si trova il file delle password
- AuthName contiene il messaggio visualizzato dal browser all'atto della richiesta di autenticazione
- Require valid-user indica ad Apache che solo gli utenti validi possono essere autenticati
A questo punto dobbiamo creare il file delle password.
Generazione del file HTTP AUTH Passwords
Per generare questo file abbiamo bisogno di alcuni tool:
# apt-get update # apt-get upgrade # apt-get install apache2-utils
Procediamo poi con la creazione del file:
# htpasswd -c /var/auth/.htpasswd utente_ok Pssword: ******** Retype Password: ********
Una volta creato il file e aggiunto l'utente utente_ok possiamo in ogni momento aggiungere altri utenti semplicemente ripetendo il comando precedente, ma omettendo l'opzione -c
(create):
# htpasswd -b /srv/auth/.htpasswd ferdy 5t1ck6
L'opzione -b
ci permette di specificare la password direttamente nel comando.
Il file di autenticazione sarà quindi qualcosa del genere:
# less /var/auth/.htpasswd utente_ok:isiA3Q4djD/.Q ferdy:{SHA}x9VvwHI6dmgk9VTE0A8o6hbCw2s= utente2:$apr1$vVzQJxvX$6EyHww61nnZr6IdQv0pVx/
Possiamo restringere ulteriormente gli accessi alla risorsa sostituendo la linea:
Require valid-user
con:
Require utente_ok ferdy
Con queste indicazioni all'utente utente2, pur appartenendo egli al file di autenticazione, sarà impedito l'accesso alla directory.
Guida scritta da: Ferdybassi 16:09, 16 apr 2011 (CEST) | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |