Zum Inhalt

auth-digest: Digest-Authentifizierung für NGINX

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

  • RedHat Enterprise Linux 7, 8, 9 und 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 und 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

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_http_auth_digest_module.so;

Dieses Dokument beschreibt nginx-module-auth-digest v1.0.0, veröffentlicht am 23. März 2018.


Änderungen von anderen Forks

Fehlerbehebungen 1, 2, 3

Lognachricht für ungültige Anmeldeversuche hinzugefügt

Beschreibung

Das ngx_http_auth_digest Modul ergänzt Nginx's integrierte Basis-Authentifizierung module, indem es Unterstützung für RFC 2617 Digest Authentifizierung bietet. Das Modul ist derzeit funktional, wurde jedoch nur von seinem Autor getestet und überprüft. Angesichts der Tatsache, dass es sich um Sicherheitscode handelt, ist eine einzige Sichtweise wahrscheinlich nicht ausreichend, um zu garantieren, dass es zu 100 % korrekt ist. Bis einige Fehlerberichte eingehen und einige der ‘unbekannten Unbekannten’ im Code beseitigt sind, betrachten Sie dieses Modul als ‘Alpha’ und behandeln Sie es mit dem entsprechenden Maß an Skepsis.

Eine Liste bekannter Probleme mit dem Modul finden Sie in der Datei bugs.txt sowie im Issue Tracker. Bitte ziehen Sie in Betracht, einen Patch beizutragen, wenn Sie die Zeit und die Neigung haben. Jede Hilfe bei der Behebung von Fehlern oder der Änderung der Implementierung in eine idiomatischere nginx-y wäre sehr willkommen.

Beispiel

Sie können einen Verzeichnisbaum durch Hinzufügen der folgenden Zeilen in einen server-Abschnitt in Ihrer Nginx Konfigurationsdatei passwortgeschützt machen:

auth_digest_user_file /opt/httpd/conf/passwd.digest; # eine mit htdigest erstellte Datei
location /private{
  auth_digest 'dies ist nicht für Sie'; # setzen Sie den Bereich für diesen Standortblock
}

Die anderen Direktiven steuern die Lebensdauer-Standardeinstellungen für die Authentifizierungssitzung. Folgendes ist äquivalent zum vorherigen Beispiel, zeigt jedoch alle Direktiven:

auth_digest_user_file /opt/httpd/conf/passwd.digest;
auth_digest_shm_size 4m;   # der Speicherplatz, der für die Verfolgung aktiver Sitzungen zugewiesen ist

location /private {
  auth_digest 'dies ist nicht für Sie';
  auth_digest_timeout 60s; # erlauben Sie Benutzern, 1 Minute zu warten, bevor sie die
                           # Herausforderung annehmen und auf Senden im Browser-Dialogfeld klicken
  auth_digest_expires 10s; # nach einer erfolgreichen Herausforderung/Antwort kann der Client
                           # denselben Nonce für zusätzliche Anfragen
                           # für 10 Sekunden weiter verwenden, bevor eine neue Herausforderung generiert wird
  auth_digest_replays 20;  # auch eine neue Herausforderung generieren, wenn der Client den
                           # gleichen Nonce mehr als 20 Mal vor Ablauf der Zeitgrenze verwendet
}

Das Hinzufügen der Digest-Authentifizierung zu einem Standort wirkt sich auf alle URIs aus, die mit diesem Block übereinstimmen. Um die Authentifizierung für bestimmte Unterzweige eines URIs zu deaktivieren, setzen Sie auth_digest auf off:

location / {
  auth_digest 'dies ist nicht für Sie';
  location /pub {
    auth_digest off; # dieser Unterbaum ist ohne Authentifizierung zugänglich
  }
}

Direktiven

auth_digest

Syntax
auth_digest [realm-name | off]

Standard
off

Kontext
server, location

Beschreibung
Aktivieren oder Deaktivieren der Digest-Authentifizierung für einen Server- oder Standortblock. Der Bereichsname sollte einem Bereich entsprechen, der in der Benutzerdatenbank verwendet wird. Jeder Benutzer innerhalb dieses Bereichs kann nach der Authentifizierung auf Dateien zugreifen.

Um die Authentifizierung innerhalb einer geschützten URI-Hierarchie selektiv zu deaktivieren, setzen Sie auth_digest auf “off” innerhalb eines spezifischeren Standortblocks (siehe Beispiel).

auth_digest_user_file

Syntax
auth_digest_user_file /path/to/passwd/file

Standard
unset

Kontext
server, location

Beschreibung
Die Passwortdatei sollte in der Form erstellt werden, die durch den Apache htdigest Befehl (oder das enthaltene htdigest.py Skript) erzeugt wurde. Jede Zeile der Datei ist eine durch Doppelpunkte getrennte Liste, die aus einem Benutzernamen, einem Bereich und einem md5-Hash besteht, der Name, Bereich und Passwort kombiniert. Zum Beispiel: joi:enfield:ef25e85b34208c246cfd09ab76b01db7

auth_digest_timeout

Syntax
auth_digest_timeout delay-time

Standard
60s

Kontext
server, location

Beschreibung
Wenn ein Client zum ersten Mal eine geschützte Seite anfordert, gibt der Server einen 401 Statuscode zusammen mit einer Herausforderung im www-authenticate Header zurück.

Zu diesem Zeitpunkt zeigen die meisten Browser ein Dialogfeld an, das den Benutzer auffordert, sich anzumelden. Diese Direktive definiert, wie lange Herausforderungen gültig bleiben. Wenn der Benutzer länger als diese Zeit wartet, bevor er seinen Namen und sein Passwort eingibt, wird die Herausforderung als ‘veraltet’ betrachtet und er wird aufgefordert, sich erneut anzumelden.

auth_digest_expires

Syntax
auth_digest_expires lifetime-in-seconds

Standard
10s

Kontext
server, location

Beschreibung
Sobald eine Digest-Herausforderung erfolgreich vom Client beantwortet wurde, versuchen nachfolgende Anfragen, den ‘Nonce’-Wert aus der ursprünglichen Herausforderung wiederzuverwenden. Um MitM Angriffe zu erschweren, ist es am besten, die Anzahl der Male zu begrenzen, die ein zwischengespeicherter Nonce akzeptiert wird. Diese Direktive legt die Dauer für diesen Wiederverwendungszeitraum nach der ersten erfolgreichen Authentifizierung fest.

auth_digest_replays

Syntax
auth_digest_replays number-of-uses

Standard
20

Kontext
server, location

Beschreibung
Die Wiederverwendung von Nonces sollte ebenfalls auf eine feste Anzahl von Anfragen begrenzt werden. Beachten Sie, dass eine Erhöhung dieses Wertes einen proportionalen Anstieg des Speicherverbrauchs zur Folge hat und die shm_size möglicherweise angepasst werden muss, um mit hohem Datenverkehr innerhalb der digest-geschützten Standortblöcke Schritt zu halten.

auth_digest_evasion_time

Syntax
auth_digest_evasion_time time-in-seconds

Standard
300s

Kontext
server, location

Beschreibung
Die Zeitspanne, für die der Server Authentifizierungsanfragen von einer Client-Adresse ignoriert, sobald die Anzahl der fehlgeschlagenen Authentifizierungen von diesem Client auth_digest_maxtries erreicht.

auth_digest_maxtries

Syntax
auth_digest_maxtries number-of-attempts

Standard
5

Kontext
server, location

Beschreibung
Die Anzahl der fehlgeschlagenen Authentifizierungsversuche von einer Client-Adresse, bevor das Modul evasive Taktiken anwendet. Zu Evasionszwecken werden nur Netzwerkclients verfolgt, und zwar nur nach Adresse (ohne Portnummer). Eine erfolgreiche Authentifizierung löscht die Zähler.

auth_digest_shm_size

Syntax
auth_digest_shm_size size-in-bytes

Standard
4096k

Kontext
server

Beschreibung
Das Modul verwaltet einen Cache fester Größe für aktive Digest-Sitzungen, um den Status zwischen authentifizierten Anfragen zu speichern. Sobald dieser Cache voll ist, ist keine weitere Authentifizierung möglich, bis aktive Sitzungen ablaufen.

Daher ist die Wahl der richtigen Größe etwas knifflig, da sie von den in den ablaufbezogenen Direktiven festgelegten Werten abhängt. Jede gespeicherte Herausforderung benötigt 48 + ceil(replays/8) Bytes und bleibt bis zu auth_digest_timeout + auth_digest_expires Sekunden bestehen. Bei Verwendung der Standardeinstellungen des Moduls bedeutet dies, dass etwa 82k Nicht-Wiederholungsanfragen alle 70 Sekunden erlaubt sind.

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub Repository für nginx-module-auth-digest.