# HG changeset patch # User Ruslan Ermilov # Date 1345017396 0 # Node ID a235ce0f8eefd2fa7bfe5e63f9b4c4d42f0c0ed9 # Parent 7e4805858796901de3affc7181bcf2b76be1dd9c Initial mail proxy server documentation in Russian. Obtained from Anton Yuzhaninov. diff -r 7e4805858796 -r a235ce0f8eef xml/ru/GNUmakefile --- a/xml/ru/GNUmakefile Mon Aug 13 14:30:36 2012 +0000 +++ b/xml/ru/GNUmakefile Wed Aug 15 07:56:36 2012 +0000 @@ -65,6 +65,10 @@ http/ngx_http_upstream_module \ http/ngx_http_userid_module \ http/ngx_http_xslt_module \ + mail/ngx_mail_core_module \ + mail/ngx_mail_auth_http_module \ + mail/ngx_mail_proxy_module \ + mail/ngx_mail_ssl_module \ REFS_XML = $(foreach name, $(REFS), xml/$(DOC_LANG)/docs/$(name).xml) REFS_HTML = $(foreach name, $(REFS), $(OUT)/$(DOC_LANG)/docs/$(name).html) diff -r 7e4805858796 -r a235ce0f8eef xml/ru/docs/index.xml --- a/xml/ru/docs/index.xml Mon Aug 13 14:30:36 2012 +0000 +++ b/xml/ru/docs/index.xml Wed Aug 15 07:56:36 2012 +0000 @@ -285,6 +285,32 @@ + + + + + +ngx_mail_core_module + + + + +ngx_mail_auth_http_module + + + + +ngx_mail_proxy_module + + + + +ngx_mail_ssl_module + + + + + diff -r 7e4805858796 -r a235ce0f8eef xml/ru/docs/mail/ngx_mail_auth_http_module.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/ru/docs/mail/ngx_mail_auth_http_module.xml Wed Aug 15 07:56:36 2012 +0000 @@ -0,0 +1,160 @@ + + + + + + + + +
+ + +URL + +mail +server + + +Задаёт URL HTTP-сервера авторизации. +Протокол описан ниже. + + + + + + +заголовок значение + +mail +server + + +Позволяет добавить указанный заголовок к запросам на сервер авторизации. +Можно использовать в качестве shared secret для проверки, +что запрос поступил от nginx. +Например: + +auth_http_header X-Auth-Key "secret_string"; + + + + + + + +время +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 + + + +
+ +
diff -r 7e4805858796 -r a235ce0f8eef xml/ru/docs/mail/ngx_mail_core_module.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/ru/docs/mail/ngx_mail_core_module.xml Wed Aug 15 07:56:36 2012 +0000 @@ -0,0 +1,394 @@ + + + + + + + + +
+ + +По умолчанию этот модуль не собирается, его сборку необходимо +разрешить с помощью конфигурационного параметра +--with-mail. + + +
+ + +
+ + + +worker_processes 1; + +error_log /var/log/nginx/error.log info; + +mail { + server_name mail.example.com; + auth_http localhost:9000/cgi-bin/nginxauth.cgi; + + imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA; + + pop3_auth plain apop cram-md5; + pop3_capabilities LAST TOP USER PIPELINING UIDL; + + smtp_auth login plain cram-md5; + smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN; + xclient off; + + server { + listen 25; + protocol smtp; + # По RFC 2821 таймаут должен быть 300 секунд + timeout 300s; + } + server { + listen 110; + protocol pop3; + proxy on; + proxy_pass_error_message on; + } + server { + listen 143; + protocol imap; + proxy on; + } + server { + listen 587; + protocol smtp; + timeout 300s; + } +} + + + +
+ + +
+ + +расширение ... +IMAP4 IMAP4rev1 UIDPLUS +mail +server + + +Позволяет указать список расширений +протокола IMAP, +выдаваемый клиенту по команде +CAPABILITY. +К этому списку автоматически добавляется +STARTTLS, +если включена директива . + + + +В данной директиве имеет смысл указать расширения, +поддерживаемые IMAP-бэкендами, +на которые проксируются клиенты (если эти расширения относятся к командам, +используемым после авторизации, когда nginx прозрачно проксирует подключение +клиента на бэкенд). + + + +Текущий список стандартизованных расширений опубликован на +www.iana.org. + + + + + + +размер +4k|8k +mail +server + + +Задаёт размер буфера для чтения IMAP-команд. +По умолчанию размер одного буфера равен размеру страницы. +В зависимости от платформы это или 4K, или 8K. + + + + + + + + адрес:порт + [bind] + +server + + +Задаёт адрес и порт сокета, на котором сервер +будет принимать запросы. +Можно указать только порт. +Кроме того, адрес может быть именем сервера, например: + +listen 127.0.0.1:110; +listen *:110; +listen 110; # то же, что и *:110 +listen localhost:110; + + + + +Необязательный параметр bind +указывает, что для данной пары +адрес:порт нужно делать +bind отдельно. +Дело в том, что если описаны несколько директив listen +с одинаковым портом, но разными адресами и одна из директив +listen слушает на всех адресах для данного порта +(*:порт, то nginx сделает +bind только на *:порт. +Необходимо заметить, что в этом случае для определения адреса, на которой +пришло соединение, делается системный вызов getsockname. + + + +Разные виртуальные серверы должны слушать на разных парах +адрес:порт. + + + + + + +метод ... +plain +mail +server + + +Задаёт разрешённые методы аутентификации POP3-клиентов. +Поддерживаемые методы: + + +plain + +USER/PASS, +AUTH PLAIN, +AUTH LOGIN. +Данные методы отключить нельзя. + + +apop + +APOP. +Для работы этого метода пароль должен храниться в незашифрованном виде. + + +cram-md5 + +AUTH CRAM-MD5. +Для работы этого метода пароль должен храниться в незашифрованном виде. + + + + + + + + + +расширение ... +TOP USER UIDL +mail +server + + +Позволяет указать список расширений +протокола POP3, +выдаваемый клиенту по команде +CAPA. +К этому списку автоматически добавляются +методы авторизации, указанные в директиве +(расширение SASL) и +STLS, +если включена директива . + + + +В данной директиве имеет смысл указать расширения, +поддерживаемые POP3-бэкендами, +на которые проксируются клиенты (если эти расширения относятся к командам, +используемым после авторизации, когда nginx прозрачно проксирует подключение +клиента на бэкенд). + + + +Текущий список стандартизованных расширений опубликован на +www.iana.org. + + + + + + + + imap | + pop3 | + smtp + +server + + + + + + + + + + +mail + + +Задаёт конфигурацию для виртуального сервера. + + + + + + +имя +имя хоста +mail +server + + +Задаёт имя сервера, используемое: + + + + +в начальном приветствии POP3/SMTP-сервера; + + + +в salt при авторизации SASL-методом CRAM-MD5; + + + +в команде EHLO при подключении к SMTP-бэкенду, +если включена команда . + + + + + + + + + + +метод ... +login plain +mail +server + + +Задаёт разрешённые методы +SASL-аутентификации +SMTP-клиентов. +Поддерживаемые методы: + + +login + +AUTH LOGIN + + +plain + +AUTH PLAIN + + +cram-md5 + +AUTH CRAM-MD5. +Для работы этого метода пароль должен храниться в незашифрованном виде. + + + + + + + + + +расширение ... + +mail +server + + +Позволяет указать список расширений протокола SMTP, +выдаваемый клиенту в ответе на команду +EHLO. +К этому списку автоматически добавляются +методы авторизации, указанные в директиве . + + + +В данной директиве имеет смысл указать расширения, +поддерживаемые MTA, +на который проксируются клиенты (если эти расширения относятся к командам, +используемым после авторизации, когда nginx прозрачно проксирует подключение +клиента на бэкенд). + + + +Текущий список стандартизованных расширений опубликован на +www.iana.org. + + + + + + +on | off +off +mail +server + + +При подключении к IMAP/POP3-бэкенду определяет для сокета поведение +“TCP keepalive”. +Если директива не указана, то для сокета будут действовать +настройки операционной системы. +Если включено, то для сокета +включается параметр SO_KEEPALIVE. +Если выключено, то для сокета +параметр SO_KEEPALIVE выключается. + + + + + + +время +60s +mail +server + + +Задаёт таймаут, который используется до начала проксирования на бэкенд. + + + + +
+ +
diff -r 7e4805858796 -r a235ce0f8eef xml/ru/docs/mail/ngx_mail_proxy_module.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/ru/docs/mail/ngx_mail_proxy_module.xml Wed Aug 15 07:56:36 2012 +0000 @@ -0,0 +1,136 @@ + + + + + + + + +
+ + + + + +размер +4k|8k +mail +server + + +Задаёт размер буфера, используемого при проксировании. +По умолчанию размер одного буфера равен размеру страницы. +В зависимости от платформы это или 4K, или 8K. + + + + + + +on | off +off +mail +server + + +Определяет, передавать ли клиенту сообщение об ошибке, +полученное при авторизации на бэкенде. + + + +Обычно, если авторизация в nginx прошла успешно, +бэкенд не может вернуть ошибку, и если она всё же есть, +значит есть какая-то ошибка внутри системы. +В таких случаях сообщение бэкенда может содержать информацию, +которую нельзя показывать клиенту. +Однако для некоторых POP3-серверов ошибка в ответ на правильный пароль +является штатным поведением. +Например, CommuniGatePro извещает пользователя о +переполнении +ящика или других событиях, периодически выдавая +ошибку +авторизации. +В этом случае директиву стоит включить. + + + + + + +время +24h +mail +server + + +Задаёт таймаут, который используется после начала проксирования на бэкенд. + + + + + + +on | off +on +mail +server + + +Разрешает или запрещает передачу команды XCLIENT +при подключении к SMTP-бэкенду. +Для работы команды XCLIENT необходим Postfix с +патчем, +который добавляет параметр LOGIN. +Если не использовать XCLIENT, то MTA не сможет писать в лог +IP/HELO/LOGIN +клиента и применять различные ограничения на основе этих данных. + + + +Если xclient включено, +то при подключении к бэкенду nginx сначала передаёт + +EHLO server_name + +потом + +XCLIENT PROTO=ESMTP HELO=client_hello ADDR=192.168.1.1 LOGIN=good_user NAME=[UNAVAILABLE] + +Если клиент при подключении к nginx передал EHLO, то в +команде XCLIENT передаётся PROTO=ESMTP. +В противном случае передаётся PROTO=SMTP. +В параметре ADDR указывается IP-адрес клиента, +а поскольку nginx не обращается к DNS для получения имени хоста, +то указывается NAME=[UNAVAILABLE]. + + + +Если же xclient выключено, +то при подключении к бэкенду nginx передаёт +EHLO, если его передал клиент, +и HELO в остальных случаях. + + + + +
+ +
diff -r 7e4805858796 -r a235ce0f8eef xml/ru/docs/mail/ngx_mail_ssl_module.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/ru/docs/mail/ngx_mail_ssl_module.xml Wed Aug 15 07:56:36 2012 +0000 @@ -0,0 +1,214 @@ + + + + + + + + +
+ + +on | off +off +mail +server + + +Включает протокол SSL/TLS для данного виртуального сервера. + + + + + + +файл + +mail +server + + +Указывает файл с сертификатом в формате PEM +для данного виртуального сервера. +Если вместе с основным сертификатом нужно указать промежуточные, +то они должны находиться в этом же файле в следующем порядке — сначала +основной сертификат, а затем промежуточные. +В этом же файле может находиться секретный ключ в формате PEM. + + + + + + +файл + +mail +server + + +Указывает файл с секретным ключом в формате PEM +для данного виртуального сервера. + + + + + + +on | off +off +mail +server + + +Указывает, чтобы при использовании протоколов SSLv3 и TLS +серверные шифры были более приоритетны, чем клиентские. + + + + + + + + [SSLv2] + [SSLv3] + [TLSv1] + [TLSv1.1] + [TLSv1.2] +SSLv3 TLSv1 TLSv1.1 TLSv1.2 +mail +server + + +Разрешает указанные протоколы. +Параметры TLSv1.1 и TLSv1.2 работают +только при использовании библиотеки OpenSSL версии 1.0.1 и выше. + +Параметры TLSv1.1 и TLSv1.2 поддерживаются +только начиная с версий 1.1.13 и 1.0.12, +поэтому при использовании OpenSSL версии 1.0.1 +и выше на старых версиях nginx эти протоколы работать будут, однако их нельзя +будет отключить. + + + + + + + + + off | + none | + [builtin[:размер]] + [shared:название:размер] +none +mail +server + + +Задаёт тип и размеры кэшей для хранения параметров сессий. +Тип кэша может быть следующим: + + +off + +жёсткое запрещение использования кэша сессий: +nginx явно говорит клиенту, что сессии не могут использоваться повторно. + + +none + +мягкое запрещение использования кэша сессий: +nginx говорит клиенту, что сессии могут использоваться повторно, но +на самом деле не используются. + + +builtin + +встроенный в OpenSSL кэш, используется в рамках только одного рабочего процесса. +Размер кэша задаётся в сессиях. +Если размер не задан, то он равен 20480 сессиям. +Использование встроенного кэша может вести к фрагментации памяти. + + +shared + +разделяемый между всеми рабочими процессами. +Размер кэша задаётся в байтах, в 1 мегабайт может поместиться +около 4000 сессий. +У каждого разделяемого кэша должно быть произвольное название. +Кэш с одинаковым названием может использоваться в нескольких +виртуальных серверах. + + + + + + +Можно использовать одновременно оба типа кэша, например: + +ssl_session_cache builtin:1000 shared:SSL:10m; + +однако использование только разделяемого кэша без встроенного должно +быть более эффективным. + + + + + + +время +5m +mail +server + + +Задаёт время, в течение которого клиент может повторно +использовать параметры сессии, хранящейся в кэше. + + + + + + + + on | + off | + only +off +mail +server + + + + +on + +разрешить использование команд STLS для POP3 +и STARTTLS для IMAP; + + +off + +запретить использование команд STLSSTARTTLS; + + +only + +требовать предварительного перехода на TLS. + + + + + + + +
+ +