Objet de la manipulation : protéger certaines URL par une authentification basique http, sauf pour certaines adresses IP.
Ceci peut être intéressant dans plusieurs cas :
- Sécuriser l'accès à des pages d'administration
- Limiter les accès à un site en construction (ou une partie de site)
- Réduire les tentatives de piratage par attaque en force, par exemple sur la page de login d'un CMS
Je présente ici le paramétrage pour Apache (version 2.2 et 2.4) ainsi que pour Nginx.
Avec Apache 2.2
Tout se passe dans le fichier de déclaration du VirtualHost, ou dans le fichier .htaccess si vous autorisez leur utilisation.
La syntaxe est la suivante :
<Directory /var/www/monsite/repertoire > Order deny,allow # acces interdit par défaut Deny from all # Fichier d'autorisation AuthName "Protected Area" AuthType Basic AuthUserFile /var/www/monsite.htpasswd # Permet l'accès si l'un des critères est OK : utilisateur ou adresse IP Satisfy Any require valid-user # Adresses IP Authorisées Allow from 1.2.3.4 11.22.33.44 </Directory>
La création du fichier htpasswd s'effectue avec la commande htpasswd, de la manière suivante :
cd /var/www htpasswd -c monsite.htpasswd monuser
Pour ajouter un utilisateur ou modifier le mot de passe on utilise la commande sans l'option '-c' :
htpasswd monsite.htpasswd newuser
Exemple : protection du back-office Wordpress
L'accès à l'administration de Wordpress s'effectue via le script wp-login.php, puis via les scripts php présents dans le répertoire wp-admin. Dans ce cas on peut protéger un fichier :
<Files wp-login.php> AuthType Basic AuthName "WP-ADMIN is Restricted" AuthUserFile "/home/hostinguser/passwd" Require valid-user # If you have a fixed IP address, you can add the following # three lines replacing x.x.x.x with your fixed IP address Order allow,deny Allow from x.x.x.x Satisfy any </Files> # Protection du repetoire d'admin <Directory /var/www/wordpress/monsite/wp-admin > AuthName "Admins Only" AuthUserFile /etc/www/monsite.htpasswd AuthGroupFile /dev/null AuthType basic require user monSiteAdmin Allow from 1.2.3.4 11.22.33.44 Satisfy Any </Directory>
Avec Apache 2.4
La version 2.4 du serveur a modifié pas mal de paramètres (Allow et Satisfy ne sont plus supportés, par exemple). La syntaxe correcte est maintenant la suivante :
<Directory /var/www/monsite/repertoire > AuthType Basic AuthUserFile /www/.site_htpasswd AuthName "Protected Area" <RequireAny> # Adresses IP Authorisées Require ip 1.2.3.4 11.22.33.44 Require valid-user </RequireAny> </Directory>
Avec Nginx
La syntaxe pour Nginx est assez proche de celle utilisée pour Apache (syntaxe 2.2).
A noter qu'on utilise plutôt location qui cible une URL
location /wp-admin { satisfy any ; # Adresses IP Authorisées allow 1.2.3.4 ; allow 11.22.33.44 ; deny all; auth_basic "Restricted access"; auth_basic_user_file conf.d/basicauthpasswd; .../... try_files $uri @gitlist; }
A la différence de Apache, le mot de passe présent dans le fichier utilisé est généré de la manière suivant :
openssl passwd Password: Verifying - Password: Fipx.a4Q5fjjw
Il faut ensuite mettre à jour le fichier avec le nom et le mot de passe de l'utilisateur, séparés par ':'. Par exemple :
cat /etc/nginx/conf.d/basicauthpasswd httpadmin:Fipx.a4Q5fjjw