Мною было перерыта куча информации, но вся информация на эту тему есть только кусками. Полная картина у меня не складывается. Может кто-то реализовал нечто подобное?
Есть задумка реализовать такую схему:
Internet -> идет письмо в мой домен user@domen.com -> оно попадает на шлюз FreeBSD (domen.com) c Postfix'ом -> Postfix проверяет, есть ли такой получатель в моем домене исходя из ранее импортированного из AD списка существующих адресатов (http://postfix.state-of-mind.de/patrick.koetter/mailrelay/#d...) -> Если адрес неправильный, письмо отбрасывается, иначе -> проверка Dr.Web'ом на вирусы -> проверка на спам -> передача письма в Exchange.
На сколько оптимален такой вариант, может есть более эффективные решения?
Меня интересуют ссылки на данную тему, рабочие (приблизительные) конфиги для Postfix'а.
P.S. Еще на FreeBSD стоит Squid, а хотелось бы, чтобы мобильные пользователи попадали на Exchange через OWA (Outlook Web Access). Возможно ли это?
Зачем каждый раз импортировать список адресатов из AD, когда можно их проверять, например, через LDAP-интерфейс AD? У нас давно так работает.
>Зачем каждый раз импортировать список адресатов из AD, когда можно их проверять,
>например, через LDAP-интерфейс AD? У нас давно так работает.Ипортировать нужно для того, чтобы не загружать AD запросами. Сейчас это для меня, конечно, не актуально, т.к. 100 000 писем в день мне не приходит, просто хочется сделать с запасом на будущее.
Если не трудно, сбрось на мыло конфиги твоей связки.
sarj2000собакамаилточкару
Лучше напишу здесь. Наверняка еще кому-нибудь пригодиться.main.cf
---
(реализовано через virtual_mailbox_domains)
virtual_mailbox_domains = domain.tld
virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf
---ldap.cf
---
server_host = 192.168.1.1
server_port = 3268
search_base = dc=tld
timeout = 60
query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=cont
act)))
domain = domain.tld
result_attribute = canonicalName
bind = yes
bind_dn = ldapquery@domain.tld
bind_pw = Passwd123
debuglevel = 0
---
>Лучше напишу здесь. Наверняка еще кому-нибудь пригодиться.
>
>main.cf
>---
>(реализовано через virtual_mailbox_domains)
>virtual_mailbox_domains = domain.tld
>virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf
>---
>
>ldap.cf
>---
>server_host = 192.168.1.1
>server_port = 3268
>search_base = dc=tld
>timeout = 60
>query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=cont
>act)))
>domain = domain.tld
>result_attribute = canonicalName
>bind = yes
>bind_dn = ldapquery@domain.tld
>bind_pw = Passwd123
>debuglevel = 0
>---
Спасибо, конечно, за конфиг, но ты выложил только ту часть, которая отвечает за проверку адресов в AD. Меня (и не только, думаю) интересует все параметры конфигов, которые отвечают за работоспособность всей связки.Т.е. параметры, отвечающие за проверку на вирусы, фильтрацию спама, пересылку Эксченджу, пересылку от Эксча в Интернет, чистку заголовков и т.п.
>>Лучше напишу здесь. Наверняка еще кому-нибудь пригодиться.
>>
>>main.cf
>>---
>>(реализовано через virtual_mailbox_domains)
>>virtual_mailbox_domains = domain.tld
>>virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf
>>---
>>
>>ldap.cf
>>---
>>server_host = 192.168.1.1
>>server_port = 3268
>>search_base = dc=tld
>>timeout = 60
>>query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=cont
>>act)))
>>domain = domain.tld
>>result_attribute = canonicalName
>>bind = yes
>>bind_dn = ldapquery@domain.tld
>>bind_pw = Passwd123
>>debuglevel = 0
>>---
>
>
>Спасибо, конечно, за конфиг, но ты выложил только ту часть, которая отвечает
>за проверку адресов в AD. Меня (и не только, думаю) интересует
>все параметры конфигов, которые отвечают за работоспособность всей связки.
>
>Т.е. параметры, отвечающие за проверку на вирусы, фильтрацию спама, пересылку Эксченджу, пересылку
>от Эксча в Интернет, чистку заголовков и т.п.http://www.samag.ru/ru/articles/5-04/news_current.shtml?2004...
тебе поможет. просто ясно.
>http://www.samag.ru/ru/articles/5-04/news_current.shtml?2004...
>тебе поможет. просто ясно.Спасибо за ссылку, да вот только я уже находил ее - она мертвая.. вернее сервер мертвый... =( Если у тебя есть оригинал той статейки, то запости или на мыло(смотри выше)
>>http://www.samag.ru/ru/articles/5-04/news_current.shtml?2004...
>>тебе поможет. просто ясно.
>
>Спасибо за ссылку, да вот только я уже находил ее - она
>мертвая.. вернее сервер мертвый... =( Если у тебя есть оригинал той
>статейки, то запости или на мыло(смотри выше)
сервер норм. только что скачал. но если у тя траблы тогда держи - отправляю.
>Лучше напишу здесь. Наверняка еще кому-нибудь пригодиться.
>
>main.cf
>---
>(реализовано через virtual_mailbox_domains)
>virtual_mailbox_domains = domain.tld
>virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf
>---
>
>ldap.cf
>---
>server_host = 192.168.1.1
>server_port = 3268
>search_base = dc=tld
>timeout = 60
>query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=cont
>act)))
>domain = domain.tld
>result_attribute = canonicalName
>bind = yes
>bind_dn = ldapquery@domain.tld
>bind_pw = Passwd123
>debuglevel = 0
>---
Для того, чтобы это работало, какое ПО должно быть установлено и какие демоны должны быть запущены?
postfix, контроллер домена, Exchange. Добавить в AD пользователя ldapquery@domain.tld с паролем Passwd123.
>postfix, контроллер домена, Exchange. Добавить в AD пользователя >ldapquery@domain.tld с паролем Passwd123.
>Вопросы:
1. Ты писал, что у тебя реализовано через virtual_mailbox_domains
Эти две строки:
>virtual_mailbox_domains = domain.tld
>virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf
>
все что нужно в конфиге postfix, чтобы он проверял правильность адресата?2. Правильность адресата проверяется до принятия письма или после?
3. Не совсем понял насчет пользователя, которого надо создать в AD
У него логин: ldapquery@domain.tld (или это его мэйл?)
И пароль: Passwd123
Или я могу создать любого пользователя с любым паролем, но тогда мне придется поменять
>bind_dn = ldapquery@domain.tld
>bind_pw = Passwd123
> ?
>1. Ты писал, что у тебя реализовано через virtual_mailbox_domains
>Эти две строки:
>>virtual_mailbox_domains = domain.tld
>>virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf
>>
>все что нужно в конфиге postfix, чтобы он проверял правильность адресата?
Да. Чтобы потом принятые письма отправлялись на Exchnage нужно в /etc/postfix/transport добавить следующее:domain.tld smtp:[192.168.1.1]
и конечно postmap /etc/postfix/transport
>2. Правильность адресата проверяется до принятия письма или после?
Да. Иначе зачем все это нужно.>3. Не совсем понял насчет пользователя, которого надо создать в AD
> У него логин: ldapquery@domain.tld (или это его мэйл?)
Если ты работаешь с AD, то должен знать, что пользователь может идентифицироваться как и раньше DOMAIN\ldapquery, так и по-новому ldapquery@domain.tld. Читай доки по AD.> И пароль: Passwd123
> Или я могу создать любого пользователя с любым паролем,
>но тогда мне придется поменять
>>bind_dn = ldapquery@domain.tld
>>bind_pw = Passwd123
Нужно создать пользователя ldapquery с паролем "какой хочешь" в домене DOMAIN.
>
>На сколько оптимален такой вариант, может есть более эффективные решения?Не знаю как насчет Postfix, у меня давно работает qmail+vpopmail, оттуда POP Connector'ом забирается на Exchange.
насчет OWA: если на BSD нету никакого web-сервера, то организуй проброс соединения извне на 80 порт Ехchange (смотри, может быть чревато). Squid тут не при чем. Как вариант можно для таких мобильных поднять VPN сервер на BSD (mpd/OpenVPN, после соединения обращаемся к Exchange по локальному IP)
После того, как я указал в конфиге следующие строки>main.cf
>---
>(реализовано через virtual_mailbox_domains)
>virtual_mailbox_domains = domain.tld
>virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf
>---
>
>ldap.cf
>---
>server_host = 192.168.1.1
>server_port = 3268
>search_base = dc=tld
>timeout = 60
>query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=cont
>act)))
>domain = domain.tld
>result_attribute = canonicalName
>bind = yes
>bind_dn = ldapquery@domain.tld
>bind_pw = Passwd123
>debuglevel = 0появилась ошибка:
Feb 22 18:29:48 gateway postfix/smtpd[580]: fatal: unsupported dictionary type: ldap
Feb 22 18:29:49 gateway postfix/master[174]: warning: process /usr/local/libexec/postfix/smtpd pid 580 exit status 1
Feb 22 18:29:49 gateway postfix/master[174]: warning: /usr/local/libexec/postfix/smtpd: bad command startup -- throttling
Feb 22 18:30:49 gateway postfix/smtpd[584]: fatal: unsupported dictionary type: ldapЧего не хватает?
>После того, как я указал в конфиге следующие строки
>
>>main.cf
>>---
>>(реализовано через virtual_mailbox_domains)
>>virtual_mailbox_domains = domain.tld
>>virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf
>>---
>>
>>ldap.cf
>>---
>>server_host = 192.168.1.1
>>server_port = 3268
>>search_base = dc=tld
>>timeout = 60
>>query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=cont
>>act)))
>>domain = domain.tld
>>result_attribute = canonicalName
>>bind = yes
>>bind_dn = ldapquery@domain.tld
>>bind_pw = Passwd123
>>debuglevel = 0
>
>появилась ошибка:
>Feb 22 18:29:48 gateway postfix/smtpd[580]: fatal: unsupported dictionary type: ldap
>Feb 22 18:29:49 gateway postfix/master[174]: warning: process /usr/local/libexec/postfix/smtpd pid 580 exit status
>1
>Feb 22 18:29:49 gateway postfix/master[174]: warning: /usr/local/libexec/postfix/smtpd: bad command startup -- throttling
>
>Feb 22 18:30:49 gateway postfix/smtpd[584]: fatal: unsupported dictionary type: ldap
>
>Чего не хватает?С этим разобрался - поставил лдап и его поддержку постфиксом.
Теперь новый глюк:
Feb 22 21:24:07 gateway postfix/smtpd[622]: fatal: opening ldap:/etc/postfix/ldap.cf Invalid argument
Feb 22 21:24:08 gateway postfix/master[612]: warning: process /usr/local/libexec/postfix/smtpd pid 622 exit status 1
Feb 22 21:24:08 gateway postfix/master[612]: warning: /usr/local/libexec/postfix/smtpd: bad command startup -- throttlingКак с этим бороться?
Покажи ldap.cf. Версия postfix?
>Покажи ldap.cf. Версия postfix?Виндовс-домен у меня domen.local
Инет-домен у меня domen.byldap.cf (комментарии удалены)
ldap_timeout = 60
ldap_search_base = dc=local
ldap_server_host = 192.168.x.2
ldap_server_port = 3268
ldap_query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=contact)))
ldap_result_filter = %s
ldap_result_attribute = canonicalName
ldap_special_result_attribute =
ldap_scope = sub
ldap_bind = yes
ldap_bind_dn = ldapquery@domen.by (тут наверное .local нужно, а не .by?)
ldap_bind_pw = Passwd123
ldap_cache = no
ldap_cache_expiry = 30
ldap_cache_size = 32768
ldap_dereference = 0
ldap_domain = domen.by (тут наверное .local нужно, а не .by?)
ldap_debuglevel = 0
----------------------
Версия Postfix 2.0.15,1
Версия openldap-client-2.1.22
Для postfix 2.0 параметры ldap немного другие.man ldap_table
...
For backwards compatibility with Postfix version 2.0 and
earlier, LDAP parameters can also be defined in main.cf.
Specify as LDAP source a name that doesn't begin with a
slash or a dot. The LDAP parameters will then be accessi-
ble as the name you've given the source in its definition,
an underscore, and the name of the parameter. For exam-
ple, if the map is specified as "ldap:ldapsource", the
"server_host" parameter below would be defined in main.cf
as "ldapsource_server_host".Note: with this form, the passwords for the LDAP sources
are written in main.cf, which is normally world-readable.
Support for this form will be removed in a future Postfix
version....Например:
/etc/postfix/main.cf
virtual_mailbox_domains = domain.local
virtual_mailbox_maps = ldap:ldapmapldapmap_search_base = dc=local
ldapmap_server_host = 192.168.x.2
ldapmap_server_port = 3268
и т.д.> ldap_bind_dn = ldapquery@domen.by (тут наверное .local нужно, а не .by?)
Само-собой ldapquery@domen.local
Вот еще неплохая статья как раз о postfix 2.0 с ldap:
http://www.opennet.me/base/net/ldap_postfix.txt.html
>ldap_domain = domen.by (тут наверное .local нужно, а не .by?)
Здесь как раз нужно domen.by
>Internet -> идет письмо в мой домен user@domen.com -> оно попадает на шлюз FreeBSD (domen.com) c Postfix'ом -> Postfix проверяет, есть ли такой получатель в моем домене исходя из ранее импортированного из AD списка существующих адресатов (http://postfix.state-of-mind.de/patrick.koetter/mailrelay/#d...) -> Если адрес неправильный, письмо отбрасывается, иначе -> проверка Dr.Web'ом на вирусы -> проверка на спам -> передача письма в Exchange.
>
>На сколько оптимален такой вариант, может есть более эффективные решения?Есть более оптимальный вариант, упразднить "почтовый шлюз" и принимать мыло прямо эксчейнжем, антивирус+спамфильтр там тоже имеет место быть
получится: интернет - НАТ - ексчейнж+спамфильтр+авир
>Меня интересуют ссылки на данную тему, рабочие (приблизительные) конфиги для Postfix'а.
>
>P.S. Еще на FreeBSD стоит Squid, а хотелось бы, чтобы мобильные пользователи
>попадали на Exchange через OWA (Outlook Web Access). Возможно ли это?
ова для внешних юзеров мож открыть без стыда только в режиме https://
Что неправильно?
1. telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.domen.by.
Escape character is '^]'.
220 gateway.domen.by ESMTP Postfix
2. mail from: v.ivanov@domen.by (адрес, существующий в AD)
250 Ok
3. rcpt to: administrator@domen.by (адрес, существующий в AD)
451 <administrator@domen.by>: Temporary lookup failure
4. rcpt to: v.pupkin@kudato.by (адрес, НЕ существующий в AD)
250 Ok
5. data
354 End data with <CR><LF>.<CR><LF>
6. hello
7. .
250 Ok: queued as 5EE0EE87EB
8. quit
221 Bye
Connection closed by foreign host.Вот что в логе после этой сессии:
Feb 28 14:47:58 gateway postfix/smtpd[725]: connect from localhost.domen.by[127.0.0.1]
Feb 28 14:49:46 gateway postfix/smtpd[725]: warning: dict_ldap_connect: Unable to bind to server ldap://localhost:389 as : -1 (Can't contact LDAP server)
Feb 28 14:49:46 gateway postfix/smtpd[725]: NOQUEUE: reject: RCPT from localhost.domen.by[127.0.0.1]: 451 <administrator@domen.by>: Temporary lookup failure; from=<v.ivanov@domen.by> to=<administrator@domen.by> proto=SMTP
Feb 28 14:50:39 gateway postfix/smtpd[725]: 5EE0EE87EB: client=localhost.domen.by[127.0.0.1]
Feb 28 14:50:46 gateway postfix/cleanup[730]: 5EE0EE87EB: message-id=<20050228124929.5EE0EE87EB@gateway.domen.by>
Feb 28 14:50:46 gateway postfix/qmgr[667]: 5EE0EE87EB: from=<v.ivanov@domen.by>, size=363, nrcpt=1 (queue active)
Feb 28 14:50:46 gateway postfix/smtp[731]: 5EE0EE87EB: to=<v.pupkin@kudato.by>, relay=none, delay=77, status=bounced (Host or domain name not found. Name service error for name=kudato.by type=A: Host not found)
Feb 28 14:50:46 gateway postfix/cleanup[730]: 6B2D1E87FC: message-id=<20050228125046.6B2D1E87FC@gateway.domen.by>
Feb 28 14:50:46 gateway postfix/qmgr[667]: 6B2D1E87FC: from=<>, size=2147, nrcpt=1 (queue active)
Feb 28 14:50:46 gateway postfix/qmgr[667]: 5EE0EE87EB: removed
Feb 28 14:50:46 gateway postfix/qmgr[667]: warning: connect to transport hash: No such file or directory
Feb 28 14:50:48 gateway postfix/smtpd[725]: disconnect from localhost.domen.by[127.0.0.1]
Feb 28 14:51:08 gateway postfix/qmgr[667]: E8D29E87EC: from=<double-bounce@gateway.domen.by>, size=637, nrcpt=1 (queue active)
Feb 28 14:51:08 gateway postfix/qmgr[667]: E8D29E87EC: to=<postmaster@promec.by>, orig_to=<postmaster>, relay=none, delay=3803, status=deferred (delivery temporarily suspended: transport is unavailable)
Feb 28 14:51:46 gateway postfix/qmgr[667]: warning: connect to transport hash: No such file or directory
--------------------------------------------Вот конфиги:
main.cf
--------------------------------------------
myhostname = gateway.domen.by
mydomain = domen.by
myorigin = $mydomain
inet_interfaces = all
local_recipient_maps =
unknown_local_recipient_reject_code = 550
mynetworks = 192.168.x.0/24, 127.0.0.0/8
virtual_mailbox_domains = domen.by
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = ldap:ldap.cf
virtual_transport = hash:/usr/local/etc/postfix/virtual_transport
ldapmap_search_base = dc=promec, dc=local
ldapmap_server_host = 192.168.x.150
ldapmap_server_port = 3268
---------------------------------------------ldap.cf
---------------------------------------------
ldap_timeout = 60
#ldap_search_base = dc=domen, dc=local
#ldap_server_host = 192.168.x.150
#ldap_server_port = 3268
ldap_query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=contact)))
ldap_result_filter = %s
ldap_result_attribute = canonicalName
ldap_special_result_attribute =
ldap_scope = sub
ldap_bind = yes
ldap_bind_dn = ldapquery@domen.local
ldap_bind_pw = Passwd123
ldap_cache = no
ldap_cache_expiry = 30
ldap_cache_size = 32768
ldap_dereference = 0
ldap_domain = domen.by
ldap_debuglevel = 0
---------------------------------------------virtual_transport
---------------------------------------------
domen.by smtp:[192.168.x.150]
---------------------------------------------
Мда... всё смешалось в доме Облонских :)>Что неправильно?
>1. telnet localhost 25
> Trying ::1...
> telnet: connect to address ::1: Connection refused
Смотри /etc/hosts>virtual_mailbox_maps = ldap:ldap.cf
virtual_mailbox_maps = ldap:ldapmap
Про файл /etc/postfix/ldap.cf забываем.>virtual_transport = hash:/usr/local/etc/postfix/virtual_transport
>ldapmap_search_base = dc=domen, dc=local
>ldapmap_server_host = 192.168.x.150
>ldapmap_server_port = 3268
а дальше?ldap_timeout = 60
ldapmap_query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=contact)))
ldapmap_result_filter = %s
ldapmap_result_attribute = canonicalName
ldapmap_special_result_attribute =
ldapmap_scope = sub
ldapmap_bind = yes
ldapmap_bind_dn = ldapquery@domen.local
ldapmap_bind_pw = Passwd123
ldapmap_cache = no
ldapmap_cache_expiry = 30
ldapmap_cache_size = 32768
ldapmap_dereference = 0
ldapmap_domain = domen.by
ldapmap_debuglevel = 0P.S. Можно еще добавить поиск Public Folders (они тоже могут иметь e-mail) и использовать вместо canonicalName - cn
ldapmap_query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=contact)(objectClas
s=publicFolder)))
ldapmap_result_attribute = cn
>Мда... всё смешалось в доме Облонских :)Извини, забыл сказать, что я поставил Postfix 2.1.5_1,1
>virtual_mailbox_maps = ldap:ldap.cf
>virtual_mailbox_maps = ldap:ldapmap
>Про файл /etc/postfix/ldap.cf забываем.Следовательно, опять вспоминаем про файл ldap.cf?
P.S. С локальными мапами пересылка эксчу заработала.
P.P.S. Exchange не пересылает почту наружу:
The message could not be sent because one of the recipients was rejected by the server. The rejected e-mail address was 'v.ivanov@telecom.by'. Subject 'От НашаКомпания', Account: 'dcmserver', Server: 'dcmserver', Protocol: SMTP, Server Response: '550 5.7.1 Unable to relay for v.ivanov@telecom.by', Port: 25, Secure(SSL): No, Server Error: 550, Error Number: 0x800CCC79
>>Мда... всё смешалось в доме Облонских :)
>
>Извини, забыл сказать, что я поставил Postfix 2.1.5_1,1
>
>>virtual_mailbox_maps = ldap:ldap.cf
>>virtual_mailbox_maps = ldap:ldapmap
>>Про файл /etc/postfix/ldap.cf забываем.
>
>Следовательно, опять вспоминаем про файл ldap.cf?
>
>P.S. С локальными мапами пересылка эксчу заработала.
>
>P.P.S. Exchange не пересылает почту наружу:
>
>The message could not be sent because one of the recipients was
>rejected by the server. The rejected e-mail address was 'v.ivanov@telecom.by'. Subject
>'От НашаКомпания', Account: 'dcmserver', Server: 'dcmserver', Protocol: SMTP, Server Response: '550
>5.7.1 Unable to relay for v.ivanov@telecom.by', Port: 25, Secure(SSL): No, Server
>Error: 550, Error Number: 0x800CCC79Постучал в бубен - все заработало с локальным мапом. Теперь попробую заменить локальный мап на лдап-запрос.
>Постучал в бубен - все заработало с локальным мапом. Теперь попробую заменить
>локальный мап на лдап-запрос.Появился такой вопрос:
Чем отличаются virtual_mailbox_domains от relay_domains? Ведь результат можно получить один и тотже - переправить почту на Exchange...
>Появился такой вопрос:
>Чем отличаются virtual_mailbox_domains от relay_domains? Ведь результат можно получить один и тотже
>- переправить почту на Exchange...Усердное чтение манов помогло понять разницу... :)
Теперь стоит такой вопрос:
Как почистить письмо? Чтобы в нем не светились внутренние IP и имена машин? Чтобы казалось, что письмо отправлено прямо с FreeBSD?Вот "грязный" заголовок письма:
Return-Path: <Administrator@domen.by>
Received: from mail.telecom.by ([unix socket])
by mail.telecom.by (Cyrus v2.2.10) with LMTPA;
Mon, 28 Feb 2005 19:37:28 +0200
X-Sieve: CMU Sieve 2.2
X-Envelope-To: <Promec@telecom.by>
Received: from gateway.domen.by (d73.dialup.telecom.by [213.184.226.73])
by mail.telecom.by (8.13.3/8.13.3) with ESMTP id j1SHbQU9036412
for <Promec@telecom.by>; Mon, 28 Feb 2005 19:37:27 +0200 (EET)
(envelope-from Administrator@domen.by)
X-Authentication-Warning: martin.telecom.by: Host d73.dialup.telecom.by [213.184.226.73] claimed to be gateway.domen.by
Received: from dcmserver.domen.local (unknown [169.254.x.150])
by gateway.domen.by (Postfix) with ESMTP id AE1F5E87EB
for <Promec@telecom.by>; Mon, 28 Feb 2005 19:37:16 +0200 (EET)
Received: from dcmserver ([169.254.x.150]) by dcmserver.domen.local with Microsoft SMTPSVC(6.0.3790.0);
Mon, 28 Feb 2005 19:37:16 +0200
Message-ID: <000601c51dbc$25224ff0$9600fea9@domen.local>
From: "=?koi8-r?B?8MHIsfsc3ssdf8n5IPFdgfFс4==?=" <Administrator@domen.by>
To: <v.ivanov@domen.by>
Cc: <Promec@telecom.by>
Subject: =?koi8-r?B?99PFzSDQ0snXxdTJy8kh?=
Date: Mon, 28 Feb 2005 19:37:16 +0200
MIME-Version: 1.0
Content-Type: text/plain;
charset="koi8-r"
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.3790.0
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
X-OriginalArrivalTime: 28 Feb 2005 17:37:16.0399 (UTC) FILETIME=[25224FF0:01C51DBC]
X-Spam-Status: No, hits=-4.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham
version=2.64
X-Spam-Checker-Version: SpamAssassin 2.64 (2004-01-11) on martin.telecom.by
>>Чем отличаются virtual_mailbox_domains от relay_domains? Ведь результат можно получить один и тотже
>>- переправить почту на Exchange...
>
>Усердное чтение манов помогло понять разницу... :)
>
Я использую virtual_mailbox_domains, поскольку некоторые почтовые ящики из этого домена находятся локально, а остальные на Exchange. Ничто не мешает тебе реализовать через relay_domains.>Теперь стоит такой вопрос:
>Как почистить письмо? Чтобы в нем не светились внутренние IP и имена
>машин? Чтобы казалось, что письмо отправлено прямо с FreeBSD?
>
Стандартными средствами думаю никак (да и нехорошо это). Может unk посоветует вариант.
Единственное, что пока приходит на ум, попробовать в настройках Exchange SMTP Server указать другое имя.
SMTP Server -> Свойства -> Delivery -> Advanced... -> Fully-qualified domain name
Укажи какое-нибудь левое имя, пошли письмо и проверь заголовки, будет ли подставлять его.
>Стандартными средствами думаю никак (да и нехорошо это). Может unk посоветует вариант.
Часть можно убрать через header_checks IGNORE.
Если хочется большего, то нужен либо второй экземпляр postfix, либо внешний фильтр.
Если я не ошибаюсь, то header_checks не затрагивает Received: ...?
>Если я не ошибаюсь, то header_checks не затрагивает Received: ...?
Да, все тэги добавленные cleanup не проверяются.
>>Если я не ошибаюсь, то header_checks не затрагивает Received: ...?
>Да, все тэги добавленные cleanup не проверяются.Это что же получается - встроенными средствами не убрать даже мои внутренние IP???
А каким внешним фильтром можно воспользоваться для чистки?
>Это что же получается - встроенными средствами не убрать даже мои внутренние
>IP???
Не виден только последний вставленный Received (тот что в письме выше)
Про фильтр не знаю. Если у вас почты не много подойдет и sed :)
>>Если я не ошибаюсь, то header_checks не затрагивает Received: ...?
>Да, все тэги добавленные cleanup не проверяются.
А уже имеющиеся Received:?Подскажите, правильно ли я понимаю следующее:
1. smtpd построчно передает письмо cleanup-у и smtpd_proxy_filter-у по мере их поступления.
2. Received: добавляет smtpd (хотя раз Вы говорите cleanup, то скорее всего так оно и есть).
>Подскажите, правильно ли я понимаю следующее:
>1. smtpd построчно передает письмо cleanup-у и smtpd_proxy_filter-у по мере их поступления.
Вы смешиваете две разные вещи:
cleanup получает все письмо целиком (не важно от smtpd, pickup, sendmail,...)
smtpd_proxy_filter получает команды клиента после тривиальных проверок на валидность (проверки прибиты гвоздями и не конфигурируются), а данные (само письмо)по мере поступления их от клиента.
>2. Received: добавляет smtpd (хотя раз Вы говорите cleanup, то скорее всего
>так оно и есть).
Received, Date, Message-Id, From, ... добавляет cleanup. header_checks не видит только что вставленные тэги.
>Вы смешиваете две разные вещи:
>cleanup получает все письмо целиком (не важно от smtpd, pickup, sendmail,...)
>smtpd_proxy_filter получает команды клиента после тривиальных проверок на валидность (проверки прибиты гвоздями
>и не конфигурируются), а данные (само письмо)по мере поступления их от
>клиента.
>
А где smtpd создает временный файл с принимаемым письмом?>
>>2. Received: добавляет smtpd (хотя раз Вы говорите cleanup, то скорее всего
>>так оно и есть).
>Received, Date, Message-Id, From, ... добавляет cleanup. header_checks не видит только что
>вставленные тэги.
Т.е. тэги, вставленные другими MTA, он видит и будет их проверять?
Меня смущает следующее. Мы используем smtpd_proxy_filter=127.0.0.1:2525 (smtpprox), который после некоторых проверок соединяется со вторым smtpd (127.0.0.1:2526) и передает ему письмо. Если первый smtpd перенаправляет письмо сразу smtpprox, минуя cleanup, тогда кто добавляет
Received: from mx.mail.ru (...)
by mx.mydomen.ru (Postfix) with ESMTP
for ...
т.е. первый smtpd принял письмо от mx.mail.ru. Поэтому я и подумал, что это делает smtpd. Поправьте меня, плиз.
>А где smtpd создает временный файл с принимаемым письмом?
AFAIR держит в буферах копию на случай ошибки.>>>2. Received: добавляет smtpd (хотя раз Вы говорите cleanup, то скорее всего
>>>так оно и есть).
Пардон я прогнал :(
(меня тут постояно отвлекают от нашей беседы)
На самом дели вы правы. Received ставит smtpd (cleanup прячет)>Т.е. тэги, вставленные другими MTA, он видит и будет их проверять?
Да.>Меня смущает следующее. Мы используем smtpd_proxy_filter=127.0.0.1:2525 (smtpprox), который после некоторых проверок соединяется
>со вторым smtpd (127.0.0.1:2526) и передает ему письмо. Если первый smtpd
>перенаправляет письмо сразу smtpprox, минуя cleanup, тогда кто добавляет
Когда я смотрел 2.1.0, то Received в режиме proxy и xforward НЕ ставился.
(ближе к обеду буду посвободней и посмотрю 2.1.5 - вдруг Винема переписал)>Received: from mx.mail.ru (...)
> by mx.mydomen.ru
>(Postfix) with ESMTP
> for ...
>
>т.е. первый smtpd принял письмо от mx.mail.ru. Поэтому я и подумал, что
>это делает smtpd. Поправьте меня, плиз.
Вы правы еще раз извеняюсь.
И все таки я точно помню, что с момента появления фичи smtpd_proxy_filter первая копия smtpd не ставит Received... Если есть время, посмотрите сами src/smtpd/smtpd.c функцию data_cmd.
Jonatan, пардон еще раз - видно у меня сегодня с головой что-то :)
Правильно так:
1) Recived вставляет smtpd(8)
(про случай proxy еше не смотрел)
2) header_checks видят ВСЕ received
3) cleanup(8) вставляет если нужно date, from, message-id, ...
4) header_checks не видит строчки вставленные cleanup(8)
ОК, теперь и я понял :)
Благодарю за ответы.
>ОК, теперь и я понял :)
>Благодарю за ответы.А вот я не совсем понял...
>Правильно так:
>1) Recived вставляет smtpd(8)
>(про случай proxy еше не смотрел)
>2) header_checks видят ВСЕ received
>3) cleanup(8) вставляет если нужно date, from, message-id, ...
>4) header_checks не видит строчки вставленные cleanup(8)Исходя из вышеизложенного, следует, что в вышеприведенном заголовке письма я могу убрать (или почистить) два нижних Received?
Если да, то как?
>Если да, то как?
Напишите для них pcre/regexp типа:
/^Received:.*from.*\.domen\.tld.*192\.168\.1\./ IGNORE
И в main.cf header_checks = {regexp,pcre}:/path
>>Если да, то как?
>Напишите для них pcre/regexp типа:
>/^Received:.*from.*\.domen\.tld.*192\.168\.1\./ IGNORE
>И в main.cf header_checks = {regexp,pcre}:/pathЛИЧНОЕ СООБЩЕНИЕ
Можно ли Вас занести в свой контакт-лист в ICQ, дабы в случае экстренной необходимости обращаться к Вам за помощью? Если Вы не против, то постучитесь мне в асю 142498558
Посмотрел (по быстрому) работу smtpd при наличии proxy:
smtpd добавит "Recived" если он сам не является этим proxy.
Еще бросается в глаза, то что при наличии proxy smtpd не делает проверку SIZE_из_"MAIL FROM" < $message_size_limit.
>Посмотрел (по быстрому) работу smtpd при наличии proxy:
>smtpd добавит "Recived" если он сам не является этим proxy.
А как он определяет, что он является smtpd_proxy_filter для другого smtpd (MTA)? ИМХО, smtpd не выполняет задач прокси. В каких тогда случаях, например, можно использовать его в этом качестве?>Еще бросается в глаза, то что при наличии proxy smtpd не делает
>проверку SIZE_из_"MAIL FROM" < $message_size_limit.
В принципе это сделает второй smtpd (smtpd(1) -> smtpprox -> smtpd(2)).
>Напишите для них pcre/regexp типа:
>/^Received:.*from.*\.domen\.tld.*192\.168\.1\./ IGNORE
>И в main.cf header_checks = {regexp,pcre}:/pathЭто помогло, на одно поле Received стало меньше, но одно лишнее еще осталось... Его тоже можно убрать? Как?
//Этот нормальный - его провайдерский шлюз добавляет
Received: from mail.telecom.by ([unix socket])
by mail.telecom.by (Cyrus v2.2.10) with LMTPA;
Tue, 01 Mar 2005 15:39:37 +0200
X-Sieve: CMU Sieve 2.2
X-Envelope-To: <promec@telecom.by>//Этот тоже нормальный - пусть будет.
Received: from gateway.domen.by (d42.dialup.telecom.by [213.184.226.42])
by mail.telecom.by (8.13.3/8.13.3) with ESMTP id j21DdBrG006088
for <promec@telecom.by>; Tue, 1 Mar 2005 15:39:11 +0200 (EET)
(envelope-from v.ivanov@domen.by)
X-Authentication-Warning: martin.telecom.by: Host d42.dialup.telecom.by [213.184.226.42] claimed to be gateway.domen.by//А вот этот надо убрать!
Received: from dcmserver.domen.local (unknown [192.168.x.150])
by gateway.domen.by (Postfix) with ESMTP id E6FA8E87EB
for <promec@telecom.by>; Tue, 1 Mar 2005 15:39:00 +0200 (EET)
>//А вот этот надо убрать!
>Received: from dcmserver.domen.local (unknown [192.168.x.150])
Эта строчка всегда одинакова или может меняться?
Если может изменяться, то покажите как.
>>//А вот этот надо убрать!
>>Received: from dcmserver.domen.local (unknown [192.168.x.150])
>Эта строчка всегда одинакова или может меняться?
>Если может изменяться, то покажите как.Почтовый сервер пока что один, соответственно эта строка всегда одинакова.
Если что и поменяется, то это domen и IP адрес. Но это врядли.
>Если что и поменяется, то это domen и IP адрес. Но это
>врядли.
Тогда где-то так:
/^Received:.*from.*\.domen\.local/ IGNORE
>>Если что и поменяется, то это domen и IP адрес. Но это
>>врядли.
>Тогда где-то так:
>/^Received:.*from.*\.domen\.local/ IGNORE
Этим выражением нужно заменить это
>/^Received:.*from.*\.domen\.tld.*192\.168\.1\./ IGNOREили добавить после него?
Я добавил вышеприведенное выражение в файл header_checks и он приобрел вид:
------------------------------------------------------
/^Received:.*from.*\.domen\.by.*169\.254\.0\./ IGNORE
/^Received:.*from.*\.domen\.by/ IGNORE
------------------------------------------------------
Теперь письма приходят с такими заголовками://Тут все ОК
Return-Path: <v.ivanov@domen.by>
Received: from mail.telecom.by ([unix socket])
by mail.telecom.by (Cyrus v2.2.10) with LMTPA;
Tue, 01 Mar 2005 17:08:56 +0200
X-Sieve: CMU Sieve 2.2
X-Envelope-To: <promec@telecom.by>//Тут тоже все ОК
Received: from gateway.domen.by (d42.dialup.telecom.by [213.184.226.42])
by mail.telecom.by (8.13.3/8.13.3) with ESMTP id j21F8sIa018976
for <promec@telecom.by>; Tue, 1 Mar 2005 17:08:54 +0200 (EET)
(envelope-from v.ivanov@domen.by)//Интересно - что значит эта строка (добавил пров.)?
X-Authentication-Warning: martin.telecom.by: Host d42.dialup.telecom.by [213.184.226.42] claimed to be gateway.domen.by
Subject: =?koi8-r?B?5MzRIPBydfsMNz9fJ3sEg88XSx3gfsd8Lg==?=
Date: Tue, 1 Mar 2005 17:08:43 +0200//Может что-то из нижеприведенного стоит тоже вырезать?
Message-ID: <8CBEF0AFCD9988439FE0E5DB226233FF6D5F@dcmserver.domen.local>
X-MS-Has-Attach:
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----_=_NextPart_001_01C51E70.8F289174"
X-MS-TNEF-Correlator:
Thread-Topic: =?koi8-r?B?5MzRIPDByMHNz9fJ3sEg88XSx8XRLg==?=
Thread-Index: AcUecI8Y6dE64GRqSsiJJTwO6ytkZw==
Content-class: urn:content-classes:message
From: =?koi8-r?B?9MXN3snLIOTNywTSycog5M3J1DFGNLxddfsJ6g==?= <v.ivanov@domen.by>
X-MimeOLE: Produced By Microsoft Exchange V6.5.6944.0
To: <promec@telecom.by>Может что-то из вышеприведенного стоит вырезать? Например строку:
Message-ID: <8CBEF0AFCD9988439FE0E5DB226233FF6D5F@dcmserver.domen.local>
Или заголовки уже и так нормальные?
>Я добавил вышеприведенное выражение в файл header_checks и он приобрел вид:
>X-Sieve: CMU Sieve 2.2
Это можно убрать.>//Интересно - что значит эта строка (добавил пров.)?
>X-Authentication-Warning: martin.telecom.by: Host d42.dialup.telecom.by [213.184.226.42] claimed to be gateway.domen.by
Вы в EHLO сказали gateway.domen.by, а на самом деле вы
d42.dialup.telecom.by>//Может что-то из нижеприведенного стоит тоже вырезать?
>X-MS-Has-Attach:
>X-MS-TNEF-Correlator:
>Thread-Topic: =?koi8-r?B?5MzRIPDByMHNz9fJ3sEg88XSx8XRLg==?=
>Thread-Index: AcUecI8Y6dE64GRqSsiJJTwO6ytkZw==
>Content-class: urn:content-classes:message
>X-MimeOLE: Produced By Microsoft Exchange V6.5.6944.0
Если форум не пбил строки, то эти можно убрать.>Message-ID: <8CBEF0AFCD9988439FE0E5DB226233FF6D5F@dcmserver.domen.local>
Если уберете, то ваш MUA будет не верно отображать триды.
>>X-Sieve: CMU Sieve 2.2
>Это можно убрать.Эту строку добавляет провайдер.
>X-MS-Has-Attach:
>X-MS-TNEF-Correlator:
>Thread-Topic: =?koi8-r?B?5MzRIPDByMHNz9fJ3sEg88XSx8XRLg==?=
>Thread-Index: AcUecI8Y6dE64GRqSsiJJTwO6ytkZw==
>Content-class: urn:content-classes:message
>X-MimeOLE: Produced By Microsoft Exchange V6.5.6944.0
>Если форум не пбил строки, то эти можно убрать.Т.е. все эти строки можно спокойно вырезать, создав фильтр, аналогичный тому, который вырезает поле Received?
>>X-MS-Has-Attach:
>>X-MS-TNEF-Correlator:
>>Thread-Topic: =?koi8-r?B?5MzRIPDByMHNz9fJ3sEg88XSx8XRLg==?=
>>Thread-Index: AcUecI8Y6dE64GRqSsiJJTwO6ytkZw==
>>Content-class: urn:content-classes:message
>>X-MimeOLE: Produced By Microsoft Exchange V6.5.6944.0
>>Если форум не пбил строки, то эти можно убрать.
>Т.е. все эти строки можно спокойно вырезать, создав фильтр, аналогичный тому, который
>вырезает поле Received?
Да. С одним НО: header_checks не может отличить заголовки добавленные вашим Exchange/MUA от аналогичных заголовков в письмах пришедших из "большого мира".
>Да. С одним НО: header_checks не может отличить заголовки добавленные вашим Exchange/MUA
>от аналогичных заголовков в письмах пришедших из "большого мира".А в этих строках есть что-то важное?
>Да. С одним НО: header_checks не может отличить заголовки добавленные вашим Exchange/MUA
>от аналогичных заголовков в письмах пришедших из "большого мира".А в этих строках есть что-то важное?
P.S. Так как насчет ICQ?
>>Да. С одним НО: header_checks не может отличить заголовки добавленные вашим Exchange/MUA
>>от аналогичных заголовков в письмах пришедших из "большого мира".
>А в этих строках есть что-то важное?
Ни чего критичного там нет.
Просто антиспам фильтры могут использовать эти заголовки для анализа. И если вы их вырежете до проверки, то часть антиспам правил не сработает.>P.S. Так как насчет ICQ?
У меня ее нет.
>>/^Received:.*from.*\.domen\.local/ IGNORE
Это более "сильный" regexp>Этим выражением нужно заменить это
>>/^Received:.*from.*\.domen\.tld.*192\.168\.1\./ IGNORE
>или добавить после него?
Как хотите.
Вы так и писали domain.tld ???
tld это просто TopLevelDomain :)
>Вы так и писали domain.tld ???
>tld это просто TopLevelDomain :)Нет, я писал FQDN своего домена.
А через указание domain.tld в конфигах я прошел около 3-х месяцев назад ;)
>>Посмотрел (по быстрому) работу smtpd при наличии proxy:
>>smtpd добавит "Recived" если он сам не является этим proxy.
>А как он определяет, что он является smtpd_proxy_filter для другого smtpd (MTA)?
Не смотрел (будет больше времени можно будет поковыряться)>ИМХО, smtpd не выполняет задач прокси. В каких тогда случаях, например,
>можно использовать его в этом качестве?
Не знаю. Даже идей нет как это можно использовать. Да и сам Винема похо не знает:
"Suppress our own Received: header in the unlikely case that we are an
intermediate proxy.">>Еще бросается в глаза, то что при наличии proxy smtpd не делает
>>проверку SIZE_из_"MAIL FROM" < $message_size_limit.
>В принципе это сделает второй smtpd (smtpd(1) -> smtpprox -> smtpd(2)).
А что будет если proxy сначала говорит 2xx клиенту, а только потом отдает письмо smtpd2?
>А что будет если proxy сначала говорит 2xx клиенту, а только потом
>отдает письмо smtpd2?Не вижу проблем. proxy ничего не говорит. Это не его задача. smtpd1 устанавливает соединение с прокси только после получения от клиента RCPT TO. Прокси после этого устанавливает соединение с smtpd2 и прозрачно передает ему полученные команды. Например, соединяюсь с smtpd1 и указываю размер письма больше лимита:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 host.dom.ru ESMTP Postfix
ehlo localhost
250-host.dom.ru
250-PIPELINING
250-SIZE 5242880
250-VRFY
250-ETRN
250 8BITMIME
mail from: user@dom.ru SIZE=1000000000
250 Ok
rcpt to: user1@dom.ru
552 Message size exceeds fixed limit552 отвечает smtpd2. Проверял лог в online после каждой команды.
>>А что будет если proxy сначала говорит 2xx клиенту, а только потом
>>отдает письмо smtpd2?
>Не вижу проблем. proxy ничего не говорит. Это не его задача. smtpd1
Это не то.
Я о том, что будет если в качестве прокси обычный MTA(у него есть спул и т.д) и этот MTA принял письмо - сказал клиенту 250 на DATA.
>Это не то.
>Я о том, что будет если в качестве прокси обычный MTA(у него
>есть спул и т.д) и этот MTA принял письмо - сказал
>клиенту 250 на DATA.smtpd1 в любом случае даст клиенту 250 на DATA только если получит 250 от smtpd2. Неважно, MTA выступает в роли proxy или smtpprox. Сори, если опять непрвильно Вас понял.
P.S. smtpprox работает прозрачно. Не могу утверждать это про другие proxy. Например, amavisd. Возможно он работает по принципу store&forward. Будет время - обязательно посмотрю и его. Но это не меняет алгорит работы smtpd1.
>Сори, если опять непрвильно Вас понял.
Ладно, бог с этим.
А посмотрите пожалуста, как поведет себя postfix если в проксируемом соединении клиент скажет "CONNECT" после валидного "RCPT TO".>amavisd. Возможно он работает по принципу store&forward. Будет время - обязательно
Нет, amavis работает также как и ваш smtpprox.>посмотрю и его. Но это не меняет алгорит работы smtpd1.
Конечно.
На команду CONNECT после валидного RCPT TO отвечает smtpd1 (судя по логам):221 Error: I can break rules, too. Goodbye.
Connection closed by foreign host.В логах после этой команды:
Mar 2 09:41:23 host postfix/smtpd[2746]: warning: host.dom.ru[1.2.3.4] sent non-SMTP command: CONNECT
>Mar 2 09:41:23 host postfix/smtpd[2746]: warning: host.dom.ru[1.2.3.4]
>sent non-SMTP command: CONNECT
т.е. postfix ее не предает proxy?
Ругается только smtpd1. Если бы он передавал это proxy, то ругался бы и smtpd2, поскольку proxy прозрачный и не анализирует команды.
>Ругается только smtpd1. Если бы он передавал это proxy, то ругался бы
>и smtpd2, поскольку proxy прозрачный и не анализирует команды.
Спасибо, я так и думал.