Google Analytics

понедельник, 13 сентября 2010 г.

Проверка отправителя в Exim

Намедни понадобилось добавить в Exim проверку отправителей почты для того, чтобы требовать авторизацию. Решение простое, но так как последний раз я конфигурировал exim более года назад, то потратил кучу времени на чтение документации. Мое решение выглядит следующим образом.
Добавил список поиска адресов локальных отправителей:
addresslist local_senders = ${lookup pgsql{SELECT m.name||'@'||d.localdomain \
               FROM mail m \
               LEFT JOIN localdomains d ON d.id = m.localdomain \
               WHERE d.localdomain='${quote_pgsql:$sender_address_domain}' and \
               m.name='${quote_pgsql:$sender_address_local_part}' and \
               not m.block}}
Сначала забыл о существовании $sender_address_domain и $sender_address_local_part пытался использовать $domain и $local_part.
В секцию acl_smtp_rcpt списков контроля доступа добавил следующие проверки:
deny    message         = $sender_address must be authenticated.
        !authenticated  = *
        senders         = +local_senders

deny    message         = sender $sender_address has \
                    authenticated as $authenticated_id
        authenticated   = *
        condition       = ${if eq {$authenticated_id}{$sender_address}\
                            {no}{yes}}
Первая запрещает отправлять сообщения подписанные от имени локальных пользователей без авторизации. Второе запрещает авторизованным пользователям подписываться отлично от имени авторизованного пользователя.
Вывод: не следует недооценивать временные затраты на выполнение действий в областях, с которыми редко имеешь дело.

2 комментария:

  1. Вот-спасибо-хорошо! Именно то, что нужно.

    Немного переделал запрос для vexim:


    addresslist local_senders = ${lookup mysql{SELECT m.name||'@'||d.localdomain \
    FROM users m LEFT JOIN domains d ON d.id = m.localdomain \
    WHERE d.localdomain='${quote_mysql:$sender_address_domain}' and \
    m.name='${quote_mysql:$sender_address_local_part}' and not m.block}}

    ОтветитьУдалить