Aller au contenu

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

Corrections de bugs 1, 2, 3

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.