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
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.