Перейти к содержанию

auth-digest: Аутентификация Digest для NGINX

Установка

Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:

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

Активируйте модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_auth_digest_module.so;

Этот документ описывает nginx-module-auth-digest v1.0.0, выпущенный 23 марта 2018 года.


Изменения по сравнению с другими форками

Исправления ошибок 1, 2, 3

Добавлено сообщение в журнал для недействительных попыток входа

Описание

Модуль ngx_http_auth_digest дополняет встроенную базовую аутентификацию Nginx модулем, предоставляя поддержку для RFC 2617 Digest Authentication. Модуль в настоящее время функционален, но был протестирован и проверен только его автором. Учитывая, что это код безопасности, одного взгляда вполне недостаточно, чтобы гарантировать его 100% корректность. Пока не поступят несколько отчетов об ошибках и некоторые из «неизвестных неизвестных» в коде не будут устранены, рассматривайте этот модуль как «альфа» и относитесь к нему с соответствующей долей скептицизма.

Список известных проблем с модулем можно найти в файле bugs.txt, а также в Issue Tracker. Пожалуйста, подумайте о том, чтобы внести патч, если у вас есть время и желание. Любая помощь в исправлении ошибок или изменении реализации на более идиоматически подходящую для nginx будет очень признательна.

Пример

Вы можете защитить директорию паролем, добавив следующие строки в секцию server в вашем конфигурационном файле Nginx:

auth_digest_user_file /opt/httpd/conf/passwd.digest; # файл, созданный с помощью htdigest
location /private {
  auth_digest 'this is not for you'; # задайте область для этого блока местоположения
}

Другие директивы контролируют параметры продолжительности жизни аутентификационной сессии. Следующий пример эквивалентен предыдущему, но демонстрирует все директивы:

auth_digest_user_file /opt/httpd/conf/passwd.digest;
auth_digest_shm_size 4m;   # объем памяти, выделенный для отслеживания активных сессий

location /private {
  auth_digest 'this is not for you';
  auth_digest_timeout 60s; # разрешить пользователям ждать 1 минуту между получением
                           # вызова и нажатием отправки в диалоговом окне браузера
  auth_digest_expires 10s; # после успешного вызова/ответа, разрешить клиенту
                           # продолжать использовать тот же nonce для дополнительных запросов
                           # в течение 10 секунд, прежде чем сгенерировать новый вызов
  auth_digest_replays 20;  # также сгенерировать новый вызов, если клиент использует тот же
                           # nonce более 20 раз до истечения времени
}

Добавление аутентификации Digest к местоположению повлияет на любые URI, которые соответствуют этому блоку. Чтобы отключить аутентификацию для определенных подветвей URI, установите auth_digest в off:

location / {
  auth_digest 'this is not for you';
  location /pub {
    auth_digest off; # это поддерево будет доступно без аутентификации
  }
}

Директивы

auth_digest

Синтаксис auth_digest [realm-name | off]

По умолчанию off

Контекст server, location

Описание Включить или отключить аутентификацию digest для блока сервера или местоположения. Имя области должно соответствовать области, используемой в файле пользователей. Любой пользователь в этой области сможет получить доступ к файлам после аутентификации.

Чтобы выборочно отключить аутентификацию в защищенной иерархии URI, установите auth_digest в “off” в более специфичном блоке местоположения (см. пример).

auth_digest_user_file

Синтаксис auth_digest_user_file /path/to/passwd/file

По умолчанию unset

Контекст 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.

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 секунд.

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-auth-digest.