<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
        <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=koi8-r">
        <TITLE></TITLE>
        <META NAME="GENERATOR" CONTENT="OpenOffice.org 2.3  (Linux)">
        <META NAME="CREATED" CONTENT="0;0">
        <META NAME="CHANGED" CONTENT="20080401;12022600">
        <STYLE TYPE="text/css">
        <!--
                @page { size: 21cm 29.7cm; margin: 2cm }
                P { margin-bottom: 0.21cm }
                PRE { font-family: "Courier New", monospace; font-size: 10pt }
                H2 { margin-bottom: 0.21cm; page-break-after: avoid }
                H2.western { font-family: "Arial", sans-serif; font-size: 14pt; font-style: italic; font-weight: bold }
                H2.cjk { font-family: "Lucida Sans Unicode"; font-size: 14pt; font-style: italic; font-weight: bold }
                H2.ctl { font-family: "Tahoma"; font-size: 14pt; font-style: italic; font-weight: bold }
                H1 { margin-bottom: 0.21cm; page-break-after: avoid }
                H1.western { font-family: "Arial", sans-serif; font-size: 16pt; font-weight: bold }
                H1.cjk { font-family: "Lucida Sans Unicode"; font-size: 16pt; font-weight: bold }
                H1.ctl { font-family: "Tahoma"; font-size: 16pt; font-weight: bold }
                TH P { font-weight: bold; text-align: center }
        -->
        </STYLE>
</HEAD>
<BODY LANG="ru-RU" LINK="#000080" VLINK="#800000" DIR="LTR">
<H1 CLASS="western">Файл конфигурации</H1>
<PRE></PRE>
<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0>
        <COL WIDTH=256*>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">mail {</FONT>
        <FONT FACE="Courier New, monospace">server_name  some-mail.com;</FONT>
        <FONT FACE="Courier New, monospace">auth_http    192.168.0.1:1666/nginxauth.cgi;</FONT>
        <FONT FACE="Courier New, monospace">proxy_pass   192.168.0.2:25;</FONT>
        <FONT FACE="Courier New, monospace">server {</FONT>
                <FONT FACE="Courier New, monospace">listen             25;</FONT>
                <FONT FACE="Courier New, monospace">protocol           mx;</FONT>
                <FONT FACE="Courier New, monospace">timeout            300s;</FONT>
        <FONT FACE="Courier New, monospace">}</FONT>
<FONT FACE="Courier New, monospace"><FONT SIZE=2>}</FONT></FONT></PRE>
                </TD>
        </TR>
</TABLE>
<PRE></PRE><H2 CLASS="western">
Протокол 
</H2>
<PRE> <FONT FACE="Courier New, monospace">Для работы nginx в качестве smtp фронтэнда к MX'ам в файле конфигурации необходимо задать протокол &quot;mx&quot; </FONT></PRE><H2 CLASS="western">
Хттп-скрипт 
</H2>
<PRE> <FONT FACE="Courier New, monospace">URL для хттп-авторизации задается по-прежнему - директивой auth_http </FONT></PRE><H2 CLASS="western">
Смтп-бэкенд 
</H2>
<PRE> <FONT FACE="Courier New, monospace">В оригинале, nginx получает адрес/порт смтп-сервера в заголовках от хттп-скрипта. </FONT>
 <FONT FACE="Courier New, monospace">Для протокола mx возможно задавать смтп-бэкенд в конфигурационном файле при помощи знакомой нам по работе с хттп-модулями директивы proxy_pass. </FONT>
 <FONT FACE="Courier New, monospace">Если бэкенд не задан - он может быть взят из всё тех-же хттп заголовков. </FONT>
 <FONT FACE="Courier New, monospace">(По правде-говоря - бэкэнд задаётся в конфиге не только для &quot;mx&quot; протокола - он _просто_задаётся_ для любого протокола.) </FONT>
 <FONT FACE="Courier New, monospace">Если его нет ни в конфиге ни в заголовках - клиенту отдаётся ошибка. </FONT>
 <FONT FACE="Courier New, monospace">Адрес бэкэнда из заголовков естественным образом имеет приоритет над заданным в конфиге. Т.е. это даёт нам возможность для отдельной сессии переопределить бэкэнд. </FONT></PRE><H1 CLASS="western">
Заголовки хттп</H1>
<PRE> <FONT FACE="Courier New, monospace">На вход хттп-скрипта авторизации даются следующие хттп-заголовки: </FONT></PRE>
<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0>
        <COL WIDTH=256*>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">Host: 192.168.0.1</FONT></PRE>
                </TD>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">Client-Helo: test.org</FONT></PRE>
                </TD>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">Client-Mail: test@test.org</FONT></PRE>
                </TD>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">Client-Rcpt: to@tset.ru</FONT></PRE>
                </TD>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace"><FONT SIZE=2>Client-IP: 192.168.0.3</FONT></FONT></PRE>
                </TD>
        </TR>
</TABLE>
<PRE>
 <FONT FACE="Courier New, monospace">Тут всё понятно. </FONT>

 <FONT FACE="Courier New, monospace">Ответить скрипт должен как-минимум: </FONT>
<FONT FACE="Courier New, monospace">Auth-Status:</FONT>

 <FONT FACE="Courier New, monospace">Который может быть: OK, WAIT, Или любой фигнёй текстуально описывающей ошибку. В дополнение к последнему варианту статуса может задаваться smtp-код ответа: </FONT>
<FONT FACE="Courier New, monospace">Auth-Error-Code: 550</FONT>

 <FONT FACE="Courier New, monospace">Который будет подставлен перед текстуальным статусом в smtp-ответе клиенту. </FONT>
 <FONT FACE="Courier New, monospace">В совою очередь Auth-Status: WAIT дополняется заголовком: </FONT>
<FONT FACE="Courier New, monospace">Auth-Wait: время</FONT>

 <FONT FACE="Courier New, monospace">указывающим время таймаута для WAIT </FONT>
 <FONT FACE="Courier New, monospace">Также, для отдельно взятой смтп-сессии мы можем переопределить заданный в конфиге бэкенд при помощи заголовков: </FONT>
<FONT FACE="Courier New, monospace">Auth-Server:</FONT>
<FONT FACE="Courier New, monospace">Auth-Port:</FONT>

 <FONT FACE="Courier New, monospace">для адреса/имени и порта соответственно. </FONT>
 <FONT FACE="Courier New, monospace">Для передачи произвольной информации смтп-бэкэнду можно использовать заголовок: </FONT>
<FONT FACE="Courier New, monospace">Auth-Helo-Addition: что-то там</FONT>

 <FONT FACE="Courier New, monospace">который через пробел добавится к клиентскому HELO. </FONT></PRE><H1 CLASS="western">
Примеры сессий</H1>
<PRE></PRE>
<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0>
        <COL WIDTH=256*>
        <TR>
                <TH WIDTH=100% VALIGN=TOP>
                        <P>Входящее соединение говорит нам, а мы ему: 
                        </P>
                </TH>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">220 tset.org ESMTP ready</FONT>
<FONT FACE="Courier New, monospace">HELO test.org</FONT>
<FONT FACE="Courier New, monospace">250 tset.org</FONT>
<FONT FACE="Courier New, monospace">MAIL FROM: test@test.org</FONT>
<FONT FACE="Courier New, monospace">250 2.0.0 OK</FONT>
<FONT FACE="Courier New, monospace"><FONT SIZE=2>RCPT TO: to@tset.ru</FONT></FONT></PRE>
                </TD>
        </TR>
</TABLE>
<PRE></PRE>
<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0>
        <COL WIDTH=256*>
        <TR>
                <TH WIDTH=100% VALIGN=TOP>
                        <P>В этот момент мы начинаем говорить с хттп-сервером так: 
                        </P>
                </TH>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">GET /nginxauth.cgi HTTP/1.0</FONT>
<FONT FACE="Courier New, monospace">Host: 192.168.0.1</FONT>
<FONT FACE="Courier New, monospace">Client-Helo: test.prg</FONT>
<FONT FACE="Courier New, monospace">Client-Mail: test@test.org</FONT>
<FONT FACE="Courier New, monospace">Client-Rcpt: to@tset.ru</FONT>
<FONT FACE="Courier New, monospace">Client-IP: 192.168.0.3</FONT>

<FONT FACE="Courier New, monospace"><FONT SIZE=2>Auth-Status: Temporary unavailable</FONT></FONT></PRE>
                </TD>
        </TR>
</TABLE>
<PRE></PRE>
<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0>
        <COL WIDTH=256*>
        <TR>
                <TH WIDTH=100% VALIGN=TOP>
                        <P>И как результат клиенту отдается: 
                        </P>
                </TH>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace"><FONT SIZE=2>535 5.7.0 Temporary unavailable</FONT></FONT></PRE>
                </TD>
        </TR>
</TABLE>
<PRE>
<FONT FACE="Courier New, monospace">Также, для ошибки задаваемой заголовком Auth-Status: мы можем задать свой код, при помощи заголовка Auth-Error-Code: </FONT>
</PRE>
<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0 RULES=NONE>
        <COL WIDTH=256*>
        <TR>
                <TH WIDTH=100% VALIGN=TOP>
                        <P> То-есть хттп-сессия будет выглядеть так: 
                        </P>
                </TH>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">GET /nginxauth.cgi HTTP/1.0</FONT>
<FONT FACE="Courier New, monospace">Host: 192.168.0.1</FONT>
<FONT FACE="Courier New, monospace">Client-Helo: test.org</FONT>
<FONT FACE="Courier New, monospace">Client-Mail: test@test.org</FONT>
<FONT FACE="Courier New, monospace">Client-Rcpt: to@tset.ru</FONT>
<FONT FACE="Courier New, monospace">Client-IP: 192.168.0.3</FONT>

<FONT FACE="Courier New, monospace">Auth-Status: Temporary unavailable</FONT>
<FONT FACE="Courier New, monospace"><FONT SIZE=2>Auth-Error-Code: 550</FONT></FONT></PRE>
                </TD>
        </TR>
</TABLE>
<PRE></PRE>
<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0 RULES=NONE>
        <COL WIDTH=256*>
        <TR>
                <TH WIDTH=100% VALIGN=TOP>
                        <P> А смтп-сессия, соответственно так: 
                        </P>
                </TH>
        </TR>
        <TR>
                <TD WIDTH=100% VALIGN=TOP>
                        <PRE><FONT FACE="Courier New, monospace">220 tset.org ESMTP ready</FONT>
<FONT FACE="Courier New, monospace">HELO test.org</FONT>
<FONT FACE="Courier New, monospace">250 tset.org</FONT>
<FONT FACE="Courier New, monospace">MAIL FROM: test@test.org</FONT>
<FONT FACE="Courier New, monospace">250 2.0.0 OK</FONT>
<FONT FACE="Courier New, monospace">RCPT TO: to@tset.ru</FONT>
<FONT FACE="Courier New, monospace"><FONT SIZE=2>550 Temporary unavailable</FONT></FONT></PRE>
                </TD>
        </TR>
</TABLE>
<PRE></PRE>
</BODY>
</HTML>