Authentification HTTP avancée sur Nginx et Apache
Un peu de nourriture pour Sysadmin, ça vous dit ? Julien vous a rappelé comment protéger simplement un emplacement de votre serveur Web si vous utilisez le serveur Web Nginx. Cette protection est simple, mais a ce souci de loger tout le monde à la même enseigne. On va donc regarder comment gérer plus de situations, et notamment éviter de demander un mot de passe si vous avez la bonne adresse IP.
Apache
Allez, on va commencer par le serveur Web qui reste le plus utilisé encore à l’heure actuelle. Pour rappel pour protéger un emplacement par mot de passe, on placera l’authentification de la façon suivante :
1 2 3 4 |
AuthUserFile /var/www/blog/.htpasswd AuthName "Accès Restreint" AuthType Basic require valid-user |
Et donc votre mot de passe doit se trouver dans ce fichier .htpasswd. Mais maintenant, tout le monde y compris vous doit rentrer un mot de passe à chaque nouvelle visite. Voyons donc comment faire en sorte que vous seul (en tout cas votre adresse IP) soit autorisé à accéder sans avoir besoin de saisir le mot de passe en question. Il faudra quelques lignes de plus :
1 2 3 4 5 6 7 8 |
Order Deny, Allow Deny All Allow from 192.168.1.1 AuthUserFile /homez.XXX/votre_login_ftp/www/.htpasswd AuthName "Accès Restreint" AuthType Basic Require valid-user Satisfy any |
Qu’a-t-on donc ajouté ? On force le serveur à interdire par défaut pour tout le monde (Deny All). On autorise ensuite une adresse IP, puis on rajoute le mot de passe. Et ensuite, la commande magique : Satisfy Any. Cette directive permet d’autoriser l’accès si n’importe quelle condition (any), IP ou mot de passe, est remplie. Et on peut ajouter ça aussi bien dans la configuration du VirtualHost qu’un fichier .htaccess (dans la mesure où Apache est configuré pour les lire).
Nginx
Une fois de plus, Nginx simplifie un peu les choses, et pourtant, la syntaxe est très proche :
1 2 3 4 5 6 7 8 9 |
location / { satisfy any; allow 192.168.1.1; deny all; auth_basic "Accès Restreint"; auth_basic_user_file /var/www/blog/.htpasswd; } |
J’ai pris un contexte location en exemple, n’importe lequel conviendra (il est possible de placer ce genre de configuration au niveau http ou server également). Contrairement à Apache, on place satisfy dès le début. On ajoute l’adresse IP, puis le mot de passe, et donc, même motif même punition que pour Apache, si on la bonne adresse, on n’a pas besoin de renseigner un mot de passe. Moins de ligne, plus de lisibilité, par contre, contrairement à Apache, on est obligé de modifier la configuration a minima du VirtualHost.
Je vous laisse par contre le soin de trouver les possibilités de configuration aussi bien pour Apache qu’Nginx pour le cas que vous aurez choisi. Je montre la voie, je vous laisse la parcourir 🙂