auth-digest: Authentification Digest pour NGINX
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-auth-digest
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-auth-digest
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_http_auth_digest_module.so;
Ce document décrit nginx-module-auth-digest v1.0.0 publié le 23 mars 2018.
Changements par rapport à d'autres forks
Ajout d'un message de log pour les tentatives de connexion invalides
Description
Le module ngx_http_auth_digest complète
l'authentification de base intégrée de Nginx
module en fournissant un support
pour l'RFC 2617 Authentification
Digest.
Le module est actuellement fonctionnel mais n'a été testé et examiné
que par son auteur. Étant donné qu'il s'agit de code de sécurité, un seul
regard est presque certainement insuffisant pour garantir qu'il est 100 % correct. Jusqu'à ce que quelques rapports de bogues arrivent et que certains des 'inconnus inconnus' dans le code soient résolus, considérez ce module comme un 'alpha' et traitez-le avec le scepticisme approprié.
Une liste des problèmes connus avec le module peut être trouvée dans le fichier bugs.txt
ainsi que dans le suivi des problèmes.
Veuillez envisager de contribuer un patch si vous avez le temps et l'envie. Toute aide pour corriger les bogues ou modifier l'implémentation pour une approche plus idiomatique de NGINX serait grandement appréciée.
Exemple
Vous pouvez protéger par mot de passe un arbre de répertoires en ajoutant les lignes suivantes
dans une section server de votre fichier de configuration Nginx :
auth_digest_user_file /opt/httpd/conf/passwd.digest; # un fichier créé avec htdigest
location /private{
auth_digest 'ceci n'est pas pour vous'; # définir le domaine pour ce bloc de localisation
}
Les autres directives contrôlent les valeurs par défaut de la durée de vie pour la session d'authentification. Ce qui suit est équivalent à l'exemple précédent mais démontre toutes les directives :
auth_digest_user_file /opt/httpd/conf/passwd.digest;
auth_digest_shm_size 4m; # l'espace de stockage alloué pour suivre les sessions actives
location /private {
auth_digest 'ceci n'est pas pour vous';
auth_digest_timeout 60s; # permettre aux utilisateurs d'attendre 1 minute entre la réception du
# défi et l'envoi dans la boîte de dialogue du navigateur
auth_digest_expires 10s; # après un défi/réponse réussi, laisser le client
# continuer à utiliser le même nonce pour des demandes supplémentaires
# pendant 10 secondes avant de générer un nouveau défi
auth_digest_replays 20; # générer également un nouveau défi si le client utilise le
# même nonce plus de 20 fois avant la limite de temps d'expiration
}
Ajouter une authentification digest à une localisation affectera toutes les URI qui
correspondent à ce bloc. Pour désactiver l'authentification pour des sous-arbres spécifiques
d'une URI, définissez auth_digest sur off :
location / {
auth_digest 'ceci n'est pas pour vous';
location /pub {
auth_digest off; # cet sous-arbre sera accessible sans authentification
}
}
Directives
auth_digest
Syntaxe
auth_digest [nom-de-domaine | off]
Par défaut
off
Contexte
server, location
Description
Activer ou désactiver l'authentification digest pour un bloc serveur ou de localisation.
Le nom du domaine doit correspondre à un domaine utilisé dans le fichier utilisateur. Tout
utilisateur dans ce domaine pourra accéder aux fichiers après
s'être authentifié.
Pour désactiver sélectivement l'authentification dans une hiérarchie URI protégée,
définissez auth_digest sur “off” dans un bloc de localisation plus spécifique (voir
exemple).
auth_digest_user_file
Syntaxe
auth_digest_user_file /chemin/vers/fichier/passwd
Par défaut
non défini
Contexte
server, location
Description
Le fichier de mots de passe doit être au format créé par la commande apache htdigest
(ou le script inclus
htdigest.py).
Chaque ligne du fichier est une liste séparée par des deux-points composée d'un
nom d'utilisateur, d'un domaine et d'un hachage md5 combinant nom, domaine et mot de passe. Par
exemple : joi:enfield:ef25e85b34208c246cfd09ab76b01db7
auth_digest_timeout
Syntaxe
auth_digest_timeout délai
Par défaut
60s
Contexte
server, location
Description
Lorsqu'un client demande pour la première fois une page protégée, le serveur renvoie un code d'état 401
accompagné d'un défi dans l'en-tête www-authenticate.
À ce stade, la plupart des navigateurs présenteront une boîte de dialogue à l'utilisateur l'invitant à se connecter. Cette directive définit combien de temps les défis resteront valides. Si l'utilisateur attend plus longtemps que ce temps avant de soumettre son nom et son mot de passe, le défi sera considéré comme ‘périmé’ et il sera invité à se connecter à nouveau.
auth_digest_expires
Syntaxe
auth_digest_expires durée-en-secondes
Par défaut
10s
Contexte
server, location
Description
Une fois qu'un défi digest a été correctement répondu par le client,
les demandes suivantes tenteront de réutiliser la valeur ‘nonce’ du
défi original. Pour compliquer les
attaques MitM,
il est préférable de limiter le nombre de fois qu'un nonce mis en cache sera accepté.
Cette directive définit la durée de cette période de réutilisation après la première
authentification réussie.
auth_digest_replays
Syntaxe
auth_digest_replays nombre-d'utilisations
Par défaut
20
Contexte
server, location
Description
La réutilisation du nonce doit également être limitée à un nombre fixe de demandes. Notez
que l'augmentation de cette valeur entraînera une augmentation proportionnelle de l'utilisation de la mémoire
et que la shm_size peut devoir être ajustée pour suivre un trafic important dans les blocs de localisation protégés par digest.
auth_digest_evasion_time
Syntaxe
auth_digest_evasion_time temps-en-secondes
Par défaut
300s
Contexte
server, location
Description
La durée pendant laquelle le serveur ignorera les demandes d'authentification
d'une adresse client une fois que le nombre d'authentifications échouées
de ce client atteint auth_digest_maxtries.
auth_digest_maxtries
Syntaxe
auth_digest_maxtries nombre-de-tentatives
Par défaut
5
Contexte
server, location
Description
Le nombre de tentatives d'authentification échouées d'une adresse client
avant que le module n'entre dans des tactiques d'évasion. À des fins d'évasion, seuls
les clients réseau sont suivis, et uniquement par adresse (sans inclure le numéro de port).
Une authentification réussie réinitialise les compteurs.
auth_digest_shm_size
Syntaxe
auth_digest_shm_size taille-en-octets
Par défaut
4096k
Contexte
server
Description
Le module maintient un cache de taille fixe des sessions digest actives pour
sauvegarder l'état entre les demandes authentifiées. Une fois ce cache plein, aucune
authentification supplémentaire ne sera possible jusqu'à ce que les sessions actives expirent.
En conséquence, choisir la taille appropriée est un peu délicat car cela
dépend des valeurs définies dans les directives liées à l'expiration. Chaque
défi stocké occupe 48 + ceil(replays/8) octets et vivra jusqu'à
auth_digest_timeout + auth_digest_expires secondes. En utilisant
les paramètres par défaut du module, cela se traduit par la possibilité d'autoriser environ 82k
demandes non répétées toutes les 70 secondes.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-auth-digest.