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 года.
Изменения по сравнению с другими форками
Добавлено сообщение в журнал для недействительных попыток входа
Описание
Модуль 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.