Объясните плиз про SMTP-проксирование

Igor Muratov migor at altlinux.org
Thu Jul 9 19:47:54 MSD 2009


Вот простейший пример для проксирования SMTP

====8<=====
mail {
    auth_http   192.168.5.11:80/cgi-bin/auth;
    auth_http_timeout   10000;

    server {
        listen      25;
        protocol    smtp;
        server_name nginx.reasoningmind.org;

        proxy       on;
        xclient     off;
    }
}
====8<=====

А это скрипт на который ссылается директива auth_http. В функцию 
auth_user можно добавить какую-нибудь авторизацию по вкусу.

====8<=====
#!/bin/sh

IMAP_SERVER="192.168.1.201"
POP3_SERVER="192.168.1.201"
SMTP_SERVER="192.168.5.11"

auth_user() {
    return 0
}

send_fail() {
    echo "Auth-Status: Invalid login or password"
    echo ""
    exit
}

send_pass() {
    local server="$1"
    local port="$2"

    echo "Auth-Status: OK"
    echo "Auth-Server: $server"
    echo "Auth-Port: $port"
    echo ""
    exit
}

if [ -z "$HTTP_AUTH_USER" -o -z "$HTTP_AUTH_PASS" ]
then
    send_fail;
fi

username=$HTTP_AUTH_USER
userpass=$HTTP_AUTH_PASS
protocol=$HTTP_AUTH_PROTOCOL

сase "$protocol" in
imap)
    backend_ip=$IMAP_SERVER
    backend_port=143
    ;;
pop|pop3)
    backend_ip=$POP3_SERVER
    backend_port=110
    ;;
smtp)
    backend_ip=$SMTP_SERVER
    backend_port=25
    ;;
*)
    backend_ip=$POP3_SERVER
    backend_port=110
    ;;
esac

auth_user $username $userpass || send_fail
send_pass $backend_ip $backend_port
====8<=====



Виктор Вислобоков пишет:
> Здравствуйте.
>
> Что-то никак не могу вьехать в возможности nginx в плане 
> SMTP-проксирования. Документации на эту тему тоже как-то не слишком 
> много, поэтому сильно не пинайте, пожалуйста.
>
> Что мне непонятно. Как вообще это работает? Находил конфиги для SMTP, 
> но ясности они не добавили :(
> Например написано про проксирование SMTP, IMAP и POP3, но каким 
> образом nginx понимает куда должен передать запрос я так и не понял.
>
> В общем что мне надо.
> Надо SMTP-прокси прозрачно пробрасывал входящие SMTP-соединения на 
> бакенд (у меня exim), причём чтобы и SMTP-авторизация работала, и 
> чтобы при этом я бы мог пользоваться таким вкусностями nginx как 
> limit_zone и limit_conn, например для того, чтобы ограничить 
> количество SMTP соединений с одного IP, ещё до передачи в бакенд. Могу 
> я такое сделать с помощью nginx или нет?
>
> Буду благодарен любым ответам или ссылкам на доки, где могу найти эти 
> ответы.
> С уважением, Виктор






More information about the nginx-ru mailing list