URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 90098
[ Назад ]

Исходное сообщение
"Postfix и ограниченние по отправителю."

Отправлено _Silent , 22-Окт-10 21:15 
Доброго дня.

Коллеги, помогите советом.
У моих пользователей есть персональная адресная рассылка по эл. адресам. т.е. пользователь посылает письмо на адрес вида myclients-user@domain.ru  и это письмо рассылается на определенный список адресов.
Я не могу сообразить как сделать так, чтобы пользователь мог отправлять письма только на свои адреса рассылки.

Список рассылки в LDAP-е выглядит следующим образом:
dn: cn=myclients,ou=distpach,cn=user1,cn=Users,dc=domain,dc=ru
cn: myclients
mail: myclients-user@domain.ru
sn: myclients
objectClass: qmailGroup
objectClass: person
objectClass: top
objectClass: qmailUser
mailAlternateAddress: myclients2-user@domain.ru
mailAlternateAddress: myclients3-user@domain.ru
deliveryMode: nolocal
rfc822member: remote1@remotedomain.local
rfc822member: remote2@remotedomain1.local
rfc822member: remote3@remotedomain2.local
accountStatus: active
rfc822moderator: user@domain.ru

rfc822moderator  - адрес пользователя.
rfc822member - адреса получателей.

В main.cf следующие:

virtual_alias_maps = ldap:valias

valias_query_filter =(&(objectClass=qmailGroup)(|(mail=%s)(mailAlternateAddress=%s)))
valias_result_attribute = mail, rfc822member, mailForwardingAddress
valias_server_host = $defaultldap_server_host
valias_server_port = $defaultldap_server_port
valias_timeout = $defaultldap_timeout
valias_search_base = $defaultldap_search_base
valias_scope = $defaultldap_scope  
valias_bind_dn = $defaultldap_bind_dn
valias_bind_pw = $defaultldap_bind_pw
valias_version = $defaultldap_version

Судя man ldap_table, postfix не может передавать адрес отправителя и из-за этого я не могу написать фильтр вида:
valias_query_filter = (&(objectClass=qmailGroup)(rfc822moderator=$MAILFROM)(|(mail=%s)(mailAlternateAddress=%s)))

Пользователь может отправлять ТОЛЬКО со своего адреса через reject_sender_login_mismatch (SASL), а вот с адресом рассылки проблема.

Как быть?
Вопрос возник в процессе миграции с qmail-ldap.
Заранее благодарен.


Содержание

Сообщения в этом обсуждении
"Postfix и ограниченние по отправителю."
Отправлено Edd , 22-Окт-10 22:44 
>[оверквотинг удален]
> valias_bind_pw = $defaultldap_bind_pw
> valias_version = $defaultldap_version
> Судя man ldap_table, postfix не может передавать адрес отправителя и из-за этого
> я не могу написать фильтр вида:
> valias_query_filter = (&(objectClass=qmailGroup)(rfc822moderator=$MAILFROM)(|(mail=%s)(mailAlternateAddress=%s)))
> Пользователь может отправлять ТОЛЬКО со своего адреса через reject_sender_login_mismatch
> (SASL), а вот с адресом рассылки проблема.
> Как быть?
> Вопрос возник в процессе миграции с qmail-ldap.
> Заранее благодарен.

Я не вижу простого способа решения вашей задачи, но думаю, что можно решить ее при помощи content_filter и небольшого bash скрипта. Если в master.cf прописать:
smtp      inet  -       n       n       -       10   smtpd
        -o content_filter=filter:dummy

filter    unix  -       n       n       -       10      pipe
    flags=Rq user=filter null_sender=
    argv=/path/to/script -f ${sender} -- ${recipient}

а в скрипте сделать проверку при помщи ldapsearch вида (&(objectClass=qmailGroup)(rfc822moderator=$2)(|(mail=%s)(mailAlternateAddress=%s)))
и в случаи положительного результата продолжить отсылку письма, а в случаи отрицательного например отослать предупреждение отправителю.
Не буду утверждать что это единственное решение, но как вариант.


"Postfix и ограниченние по отправителю."
Отправлено _Silent , 23-Окт-10 11:58 

>[оверквотинг удален]
>  filter    unix  -    
>   n       n
>      -    
>  10      pipe
>     flags=Rq user=filter null_sender=
>     argv=/path/to/script -f ${sender} -- ${recipient}
> а в скрипте сделать проверку при помщи ldapsearch вида (&(objectClass=qmailGroup)(rfc822moderator=$2)(|(mail=%s)(mailAlternateAddress=%s)))
> и в случаи положительного результата продолжить отсылку письма, а в случаи отрицательного
> например отослать предупреждение отправителю.
> Не буду утверждать что это единственное решение, но как вариант.

Я правильно понимаю, что этот скрипт будет запускаться на каждое получаемое письмо?


"Postfix и ограниченние по отправителю."
Отправлено Edd , 23-Окт-10 12:31 
>[оверквотинг удален]
>>   n       n
>>      -    
>>  10      pipe
>>     flags=Rq user=filter null_sender=
>>     argv=/path/to/script -f ${sender} -- ${recipient}
>> а в скрипте сделать проверку при помщи ldapsearch вида (&(objectClass=qmailGroup)(rfc822moderator=$2)(|(mail=%s)(mailAlternateAddress=%s)))
>> и в случаи положительного результата продолжить отсылку письма, а в случаи отрицательного
>> например отослать предупреждение отправителю.
>> Не буду утверждать что это единственное решение, но как вариант.
> Я правильно понимаю, что этот скрипт будет запускаться на каждое получаемое письмо?

В приведенном мною конфиге он будет работать вообще на все письма, но если это не нужно, то можно выбрать конкретный интерфейс, ну например, пусть у нас есть два сетевых интерфейса, внутренний (172.16.1.1) и внешний (212.102.128.6), и мы хотим что бы фильтр работал только на внутренний, то конфиг будет вот такой:
172.16.1.1:smtp      inet  -       n       n       -       10   smtpd
        -o content_filter=filter:dummy
212.102.128.6:smtp      inet  -       n       n       -       10   smtpd


"Postfix и ограниченние по отправителю."
Отправлено user , 23-Окт-10 13:38 
>[оверквотинг удален]
> valias_bind_pw = $defaultldap_bind_pw
> valias_version = $defaultldap_version
> Судя man ldap_table, postfix не может передавать адрес отправителя и из-за этого
> я не могу написать фильтр вида:
> valias_query_filter = (&(objectClass=qmailGroup)(rfc822moderator=$MAILFROM)(|(mail=%s)(mailAlternateAddress=%s)))
> Пользователь может отправлять ТОЛЬКО со своего адреса через reject_sender_login_mismatch
> (SASL), а вот с адресом рассылки проблема.
> Как быть?
> Вопрос возник в процессе миграции с qmail-ldap.
> Заранее благодарен.

Попробуйте RESTRICTION CLASS +  SMTPD POLICY.
С помощью RESTRICTION CLASS можно ограничить круг проверяемых писем в зависимости от адреса получателя, а через policy protocol можно передать адрес отправителя простому скрипту.