Limitazione di accesso alle directory sui siti Web di Apache

Esistono molti modi per limitare l’accesso a contenuti specifici all’interno di Apache. Questo articolo mostrerà semplicemente un paio di esempi.

Alcuni di questi esempi ti mostreranno come limitare l’accesso a una directory con un nome utente e una password. Per questa guida, il file htpasswd verrà inserito in /etc/httpd/example-htpasswd. Puoi creare un nome utente e una password utilizzando semplicemente il sito esterno di terze parti oppure puoi utilizzare lo strumento integrato htpasswd.

Di seguito un esempio:

[root@web01 ~]# vim /etc/httpd/vhost.d/example.com.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/vhosts/example.com
<Directory /var/www/vhosts/example.com>
	Options -Indexes +FollowSymLinks -MultiViews
	AllowOverride All

        # Password protect site
	AuthType Basic
	AuthName "Restricted"
	AuthUserFile /etc/httpd/example-htpasswd
	Require valid-user
</Directory>
...

Se si desidera consentire solo in specifici IP o reti senza password e richiedere a tutti gli altri su Internet di avere un nome utente/password:

[root@web01 ~]# vim /etc/httpd/vhost.d/example.com.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/vhosts/example.com
<Directory /var/www/vhosts/example.com>
	Options -Indexes +FollowSymLinks -MultiViews
	AllowOverride All

	# Password protect site
	Allow from 127.0.0.1
	Allow from 1.2.3.4
	Allow from 192.168.1.0/24

	AuthType Basic
	AuthName "Restricted"
	AuthUserFile /etc/httpd/example-htpasswd
	Require valid-user

	# Allow password-less access for allowed IPs
	Satisfy any
</Directory>
...

Di seguito è riportato un esempio per la protezione della password della pagina wp-admin di WordPress tramite un file .htaccess:

[root@web01 ~]# vim /var/www/vhosts/example.com/wp-admin/.htaccess
# Password protect wp-admin
<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>
AuthType Basic
AuthName "Restricted"
AuthUserFile /etc/httpd/example-htpasswd
Require valid-user

Ecco uno per limitare l’accesso a una directory consentendo solo in specifici IP all’interno di example.com/admin:

[root@web01 ~]# vim /var/www/vhosts/example.com/admin/.htaccess
order deny,allow
deny from all
allow from 1.2.3.4
allow from 192.168.1.0/24

Su Apache 2.4, ecco come è possibile proteggere con password un intero sito Web escludendo un URI. Questo è utile se usi qualcosa come CakePHP o Laravel in cui la directory fisica non esiste, tutto semplicemente filtra attraverso il file index.php. In questo esempio, qualsiasi richiesta ad example.com/test non richiederà una password, ma qualsiasi altra cosa su esempio.com richiederà un nome utente e una password:

[root@web01 ~]# vim /etc/httpd/vhost.d/example.com.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/vhosts/example.com/current/public
<Directory /var/www/vhosts/example.com/current/public>
	Options -Indexes +FollowSymLinks -MultiViews
	AllowOverride All
</Directory>

<Location "/">
	# Password protect site
	AuthType Basic
	AuthName "Restricted"
	AuthUserFile /etc/httpd/example-htpasswd
	Require valid-user

	# If the request goes to /test: bypass basic auth
	SetEnvIf Request_URI ^/test$ noauth=1
	Allow from env=REDIRECT_noauth
	Allow from env=noauth

	Order Deny,Allow
	Satisfy any
	Deny from all
</Location>
...