auth-digest: Digest Аутентификация для NGINX
Установка на Debian/Ubuntu
Эти документы относятся к APT пакету nginx-module-auth-digest, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте APT репозиторий, как описано в настройке APT репозитория.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-auth-digest
Показатьверсии и архитектуры
| Дистрибутив | Версия | Компонент | Архитектуры |
|-------------|-------------------|-------------|-----------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline | main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |
Изменения от других форков
Добавлено сообщение в журнал для недействительных попыток входа
Описание
Модуль ngx_http_auth_digest дополняет встроенную базовую аутентификацию
Nginx модулем с помощью поддержки
RFC 2617 Digest
Аутентификации.
Модуль в настоящее время функционирует, но был протестирован и проверен
только его автором. Учитывая, что это код безопасности, одно мнение
в значительной степени недостаточно, чтобы гарантировать его 100% правильность. Пока
не поступит несколько сообщений об ошибках и не будут устранены некоторые из "неизвестных неизвестных" в коде,
рассматривайте этот модуль как "альфа" и относитесь к нему с
соответствующей долей скептицизма.
Список известных проблем с модулем можно найти в файле bugs.txt
а также в Трекере проблем.
Пожалуйста, подумайте о том, чтобы внести свой вклад в патч, если у вас есть время и
настроение. Любая помощь в исправлении ошибок или изменении реализации на
более идиоматичную для nginx была бы очень полезной.
Пример
Вы можете защитить каталог паролем, добавив следующие строки
в раздел server в вашем конфигурационном файле Nginx:
auth_digest_user_file /opt/httpd/conf/passwd.digest; # файл, созданный с помощью htdigest
location /private {
auth_digest 'это не для вас'; # установите область для этого блока location
}
Другие директивы контролируют значения по умолчанию для продолжительности аутентификационной сессии. Следующее эквивалентно предыдущему примеру, но демонстрирует все директивы:
auth_digest_user_file /opt/httpd/conf/passwd.digest;
auth_digest_shm_size 4m; # объем памяти, выделенный для отслеживания активных сессий
location /private {
auth_digest 'это не для вас';
auth_digest_timeout 60s; # разрешить пользователям подождать 1 минуту между получением
# запроса и нажатием отправить в диалоговом окне браузера
auth_digest_expires 10s; # после успешного запроса/ответа разрешить клиенту
# продолжать использовать тот же nonce для дополнительных запросов
# в течение 10 секунд до генерации нового запроса
auth_digest_replays 20; # также сгенерировать новый запрос, если клиент использует
# тот же nonce более 20 раз до истечения времени
}
Добавление digest аутентификации к location повлияет на любые uri, которые
соответствуют этому блоку. Чтобы отключить аутентификацию для конкретных подветвей
от uri, установите auth_digest в off:
location / {
auth_digest 'это не для вас';
location /pub {
auth_digest off; # это поддерево будет доступно без аутентификации
}
}
Директивы
auth_digest
Синтаксис
auth_digest [realm-name | off]
По умолчанию
off
Контекст
server, location
Описание
Включить или отключить digest аутентификацию для блока server или location.
Имя области должно соответствовать области, используемой в файле пользователей. Любой
пользователь в этой области сможет получать доступ к файлам после
аутентификации.
Чтобы выборочно отключить аутентификацию в защищенной иерархии uri,
установите auth_digest в “off” внутри более специфичного блока location (см.
пример).
auth_digest_user_file
Синтаксис
auth_digest_user_file /path/to/passwd/file
По умолчанию
не установлено
Контекст
server, location
Описание
Файл паролей должен быть в форме, созданной с помощью команды apache htdigest
(или включенного скрипта
htdigest.py).
Каждая строка файла представляет собой список, разделённый двоеточием, состоящий из
имени пользователя, области и md5 хеша, объединяющего имя, область и пароль. Например: joi:enfield:ef25e85b34208c246cfd09ab76b01db7
auth_digest_timeout
Синтаксис
auth_digest_timeout delay-time
По умолчанию
60s
Контекст
server, location
Описание
Когда клиент впервые запрашивает защищённую страницу, сервер возвращает код состояния 401
вместе с запросом в заголовке www-authenticate.
В этот момент большинство браузеров представляют пользователю диалоговое окно, предлагающее выполнить вход. Эта директива определяет, как долго запросы будут оставаться действительными. Если пользователь ждёт дольше этого времени, прежде чем подать своё имя и пароль, запрос будет считаться "устаревшим", и ему будет предложено выполнить вход снова.
auth_digest_expires
Синтаксис
auth_digest_expires lifetime-in-seconds
По умолчанию
10s
Контекст
server, location
Описание
После успешного ответа на запрос digest клиентом,
последующие запросы будут пытаться повторно использовать значение "nonce" из
оригинального запроса. Чтобы усложнить
атаки MitM,
лучше ограничить количество раз, когда кешированный nonce будет приниматься.
Эта директива устанавливает продолжительность для этого периода повторного использования после первого
успешного аутентификации.
auth_digest_replays
Синтаксис
auth_digest_replays number-of-uses
По умолчанию
20
Контекст
server, location
Описание
Повторное использование nonce также должно быть ограничено фиксированным количеством запросов. Обратите внимание,
что увеличение этого значения приведёт к пропорциональному увеличению использования памяти,
и shm_size может потребоваться настроить, чтобы справиться с большим
трафиком в защищённых digest блоках location.
auth_digest_evasion_time
Синтаксис
auth_digest_evasion_time time-in-seconds
По умолчанию
300s
Контекст
server, location
Описание
Количество времени, в течение которого сервер будет игнорировать запросы на аутентификацию
с адреса клиента, как только количество неудачных аутентификаций
с этого клиента достигает auth_digest_maxtries.
auth_digest_maxtries
Синтаксис
auth_digest_maxtries number-of-attempts
По умолчанию
5
Контекст
server, location
Описание
Количество неудачных попыток аутентификации с адреса клиента
перед тем, как модуль перейдет к уклончивым тактикам. В целях уклонения отслеживаются только
сетевые клиенты, и только по адресу (без учета номера порта). Успешная аутентификация сбрасывает счетчики.
auth_digest_shm_size
Синтаксис
auth_digest_shm_size size-in-bytes
По умолчанию
4096k
Контекст
server
Описание
Модуль поддерживает кэш фиксированного размера для активных сессий digest, чтобы
сохранять состояние между аутентифицированными запросами. Как только этот кеш заполнен, дальнейшая аутентификация будет невозможна, пока активные сессии не истекут.
В результате выбор правильного размера немного сложен, поскольку он
зависит от значений, установленных в директивах, связанных с истечением срока. Каждый
хранимый запрос занимает 48 + ceil(replays/8) байтов и будет жить до
auth_digest_timeout + auth_digest_expires секунд. При использовании
умолчательных настроек модуля это переводится в позволение примерно 82k
запросов без повторного использования каждые 70 секунд.