Здравствуйте, Павел.

Вы писали 4 октября 2013 г., 0:05:49:

> Добрый день.

> Имеется почтовый сервер с exim.
> Работает в связке с mysql базой данных.

> Роутер для почтовых алиасов:

> system_aliases:
>    driver = redirect
>    allow_fail
>    allow_defer
>    file_transport = address_file
>    pipe_transport = address_pipe
>    data = ${lookup mysql{SELECT recipients FROM aliases WHERE 
> local_part='${local_part}' AND domain='${domain}'}}

> Делает выборку из БД, таблицы aliases, смотрит на адрес назначения 
> письма и достаёт получателей.
> Им и направляет письмо, полученное на определённый алиас.

> Появилась задача.
> Нужно сделать так, чтобы доставка на определённый алиас была 
> контролируема, нужно фильтровать письма на основании того - кому 
> разрешено отправлять на конкретный алиас, а кому - нет. В рамках данной
> задачи приемлемым фильтрацию только по from - адресу отправителя, 
> осознавая, что адрес можно подменить и т.д, и валидацио отправителя 
> осуществлять не будем.

> К примеру, в таблице aliases добавить поле accept_from типа text, в 
> котором вписывать те адреса (их может быть несколько, указываются через
> запятую в поле), которым разрешено отправлять письма на тот или иной алиас.

> Транспорты:

> local_delivery:
>    driver = appendfile
>    check_string = ""
>    create_directory
>    delivery_date_add
>    directory = /mail/$domain/$local_part
>    directory_mode = 770
>    envelope_to_add
>    group = mail
>    maildir_format
>    maildir_tag = ,S=$message_size
>    message_prefix = ""
>    message_suffix = ""
>    mode = 0660
>    quota = ${lookup mysql{SELECT quota FROM users WHERE 
> login='${local_part}' AND domain='${domain}'}{${value}M}}
>    quota_size_regex = S=(\d+)$
>    quota_warn_threshold = 75%
>    return_path_add

> address_pipe:
>    driver = pipe
>    return_output

> address_file:
>    driver = appendfile
>    delivery_date_add
>    envelope_to_add
>    return_path_add


> Просьба порекомендовать - каким образом это можно сделать.
> Если нужны дополнительные данные из конфигурации exim, могу предоставить.
> Спасибо.


я делал personal whitelist вот таким образом

        warn
        domains = +relay_to_domains:+local_domains
        set acl_m2= ${lookup mysql{GET_WL ea.account='$local_part' and 
ed.name='$domain'}}
        condition = ${if !eq{$acl_m2}{}{1}{0}}
        set acl_m2 = ${tr{$acl_m2}{,}{|}}
        set acl_m2 = ^($acl_m2)\$

        accept
        domains = +relay_to_domains:+local_domains
        condition = ${if !eq{$acl_m2}{}{1}{0}}
        condition = ${if match{$sender_address}{$acl_m2}{yes}{no}}
        logwrite = Accept from $sender_address to $local_part@$domain by 
personal whitelist.
        set acl_m6 = whitelisted

 те  select  возвращает  поле в котором адреса отправителя перечислены
 через  запятую,  меняем  запятую  на |, обвешиваем признаком начали и
 конца, и делаем на полученый стринг match

 тебе еще deny потом нужно сделать для всех остальных
 или инвертировать accept

-- 
С уважением,
 Alexander                          mailto:[email protected]


_______________________________________________
Exim-users mailing list
[email protected]
http://mailground.net/mailman/listinfo/exim-users

Ответить