La direttiva Order in Apache
Uno dei punti fondamentali1 da comprendere per il controllo del proprio server Apache è la direttiva Order
, quella in cui vediamo Allow,Deny
o Deny,Allow
. Non è di immediata comprensione ma, una volta capito il meccanismo che sta alla base, non dovrebbe risultare difficile applicarla con relativa semplicità.
Poniamo il caso che abbiamo queste direttive nel nostro file .htaccess
:
<Directory "/www">
Order Deny,Allow
Deny from all
Allow from 192.168.0.100 123.456.
Allow from example.org example.com
Allow from foo.example.
</Directory>
Quello su cui questo post si concentra è la riga che inizia con Order
. Questa direttiva dice ad Apache in quale ordine deve applicare le successive direttive Deny
e Allow
, vale a dire se prima l’una o l’altra. Nel caso in esempio, l’ordine è prima quelle Deny
e poi quelle Allow
. L’ordine è importante perché in Apache l’ultima direttiva ha priorità sulle precedenti.
Detta in modo semplice quelle righe significano:
- nega (
Deny
) a tutti l’accesso alla directory/www
; - permettilo (
Allow
) a chi proviene dall’indirizzo IP192.168.0.100
e a chi abbia indirizzo IP che comincia con123.456.
; - permettilo (
Allow
) a chi proviene dal dominioexample.org
o daexample.com
; - permettilo (
Allow
) a chi proviene dal dominiofoo.example.
di qualsiasi TLD.
Se, invece, invertissimo l’ordine della direttiva Order
da Order Deny,Allow
a Order Allow,Deny
, l’effetto sarebbe di bloccare tutti. Avremmo infatti che Apache leggerebbe così:
- permetti l’accesso all’indirizzo IP
192.168.0.100
e a chi abbia…; - permetti l’accesso al dominio
example.org
…; - ecc…
- nega a tutti l’accesso.
La regola finale avrebbe la prevalenza sulle precedenti, finendo così per bloccare tutti.
L’ordine con cui le direttive sono scritte nel blocco di codice non ha invece alcuna influenza.2 Potremmo anche scriverle così:
<Directory "/www">
Order Deny,Allow
Allow from 192.168.0.100 123.456.
Allow from example.org example.com
Deny from all
Allow from foo.example.
</Directory>
In ogni caso Apache leggerà e applicherà in blocco prima tutte le direttive Deny
e poi tutte quelle Allow
.
In linea generale, Jeff Starr3 consiglia di tenere queste due regole di base:
-
Quando si vogliono bloccare specifici indirizzi, usare
Order Allow,Deny
, quindi la direttivaAllow from all
e a seguire le direttiveDeny from ...
. Ad esempio:<Directory "/www"> Order Allow,Deny Allow from all Deny from 192.168.0.100 </Directory>
-
Quando si vogliono permettere specifici indirizzi, usare
Order Deny,Allow
, quindi la direttivaDeny from all
e a seguire le direttiveAllow from ...
. Ad esempio:<Directory "/www"> Order Deny,Allow Deny from all Allow from 192.168.0.100 </Directory>
Fonti:
- The Apache Software Foundation, Apache Module mod_access_compat.
- Ben Laurie – Peter Laurie, Apache: The Definitive Guide, O’Reilly & Associates, 2001.
- Jeff Starr, .htaccess made easy, Perishable Press Books, aprile 2023.
-
«Getting the order and syntax of these directives is critical to their operation». Jeff Starr, .htaccess made easy, Perishable Press Books, aprile 2023, p. 123. ↩︎
-
«The order in which lines appear in the configuration files is not significant — all Allow lines are processed as one group, all Deny lines are considered as another, and the default state is considered by itself». Cfr. The Apache Software Foundation, Apache Module mod_access_compat, par. “Order Directive”. ↩︎
-
Jeff Starr, op. cit., p. 123. ↩︎