nginx

Модуль ngx_mail_auth_http_module


english
русский

简体中文
עברית
日本語
türkçe

новости [en]
об nginx
скачать
безопасность [en]
pgp ключи [en]
документация
faq
ссылки [en]
книги [en]
поддержка
пожертвования [en]

trac
wiki
twitter
nginx.com
Директивы
     auth_http
     auth_http_header
     auth_http_timeout
Протокол

Директивы

синтаксис: auth_http URL;
умолчание:
контекст: mail, server

Задаёт URL HTTP-сервера аутентификации. Протокол описан ниже.

синтаксис: auth_http_header заголовок значение;
умолчание:
контекст: mail, server

Позволяет добавить указанный заголовок к запросам на сервер аутентификации. Можно использовать в качестве shared secret для проверки, что запрос поступил от nginx. Например:

auth_http_header X-Auth-Key "secret_string";

синтаксис: auth_http_timeout время;
умолчание:
auth_http_timeout 60s;
контекст: mail, server

Протокол

Для общения с сервером аутентификации используется HTTP. Данные в теле ответа игнорируются, информация передаётся только в заголовках.

Примеры запросов и ответов:

Запрос:

GET /auth HTTP/1.0
Host: localhost
Auth-Method: plain # plain или apop или cram-md5
Auth-User: user
Auth-Pass: password
Auth-Protocol: imap # imap, pop3 или smtp
Auth-Login-Attempt: 1 # какая по счёту попытка в рамках одной сессии
Client-IP: 192.168.1.1

Хороший ответ:

HTTP/1.0 200 OK # эта строка игнорируется
Auth-Status: OK
Auth-Server: 10.1.1.1
Auth-Port: 143

Плохой ответ:

HTTP/1.0 200 OK # эта строка игнорируется
Auth-Status: Invalid login or password
Auth-Wait: 3 # подождать три секунды перед выдачей ошибки клиенту

Если заголовка “Auth-Wait” нет, то после выдачи ошибки соединение будет закрыто. В текущей реализации на каждую попытку аутентификации выделяется память, которая освобождается только при завершении сессии. Поэтому число неудачных попыток аутентификации в рамках одной сессии должно быть ограничено — после 10-20 попыток (номер попытки передаётся в заголовке “Auth-Login-Attempt”) сервер должен выдать ответ без заголовка “Auth-Wait”.

При использовании APOP или CRAM-MD5 запрос-ответ будут выглядеть так:

GET /auth HTTP/1.0
Host: localhost
Auth-Method: apop
Auth-User: user
Auth-Salt: <238188073.1163692009@mail.example.com>
Auth-Pass: auth_response
Auth-Protocol: imap
Auth-Login-Attempt: 1 # какая по счёту попытка в рамках одной сессии
Client-IP: 192.168.1.1

Хороший ответ:

HTTP/1.0 200 OK # эта строка игнорируется
Auth-Status: OK
Auth-Server: 10.1.1.1
Auth-Port: 143
Auth-Pass: plain-text-pass

Для SMTP в ответе дополнительно учитывается заголовок “Auth-Error-Code” — если он есть, то используется как код ответа в случае ошибки. Если нет, то по умолчанию к “Auth-Status” будет добавлен код 535 5.7.0.

Например, если от сервера аутентификации будет получен ответ:

HTTP/1.0 200 OK
Auth-Status: Temporary server problem, try again later
Auth-Error-Code: 451 4.3.0
Auth-Wait: 3

то по SMTP клиенту будет выдана ошибка

451 4.3.0 Temporary server problem, try again later