Содержание

Директивы модуля ngx_mail_auth_http_module

Директивы

auth_http

syntax: auth_http URL
default: нет
context: mail, server

Директива указывает URL http-сервера авторизации. Протокол описан ниже.

auth_http_header

syntax: auth_http_header заголовок значение
default: нет
context: mail, server

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

Например:

  auth_http_header X-Auth-Key "secret_string";

auth_http_timeout

syntax: auth_http_timeout время
default: 60
context: 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.ru>
  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: plan-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