Доброго дня.Коллеги, помогите советом.
У моих пользователей есть персональная адресная рассылка по эл. адресам. т.е. пользователь посылает письмо на адрес вида 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.rurfc822moderator - адрес пользователя.
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.
Заранее благодарен.
>[оверквотинг удален]
> 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)))
и в случаи положительного результата продолжить отсылку письма, а в случаи отрицательного например отослать предупреждение отправителю.
Не буду утверждать что это единственное решение, но как вариант.
>[оверквотинг удален]
> 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)))
> и в случаи положительного результата продолжить отсылку письма, а в случаи отрицательного
> например отослать предупреждение отправителю.
> Не буду утверждать что это единственное решение, но как вариант.Я правильно понимаю, что этот скрипт будет запускаться на каждое получаемое письмо?
>[оверквотинг удален]
>> 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
>[оверквотинг удален]
> 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 можно передать адрес отправителя простому скрипту.