Господа, система:
FreeBSD mrk.mmk.ru 8.4-STABLE FreeBSD 8.4-STABLE #23: Wed Jan 28 13:54:31 YEKT 2015
postfix-2.11.3_3,1в настройках стоит, что всю почту для своего домена доставлять другому почтовику
mydestination = $myhostname, mrk.mmk.ru
mailbox_transport = smtp:нужный серверзаметил, что для одного адреса письма не уходят куда надо, а пытаются лечь локально, в итоге получая ошибку, зависая в очереди и затем соответственно возвращаются отправителю
в ходе экспериментов выяснилось, что это зависит от длинны имени (до знака собачки), может от полной длины, но после собачки я домен менять не могу. Вот смотрите по логам:
1. Один адрес, письмо пытается лечь локально
postfix/pickup[85021]: 19D3B2AC405: uid=0 from=<root>
postfix/qmgr[1912]: 19D3B2AC405: from=<root@mrk.mmk.ru>, size=301, nrcpt=1 (queue active)
postfix/local[85595]: warning: error looking up passwd info for a12345678901234567: Invalid argument
postfix/local[85595]: 19D3B2AC405: to=<a12345678901234567@mrk.mmk.ru>, relay=local, delay=0.03, delays=0.01/0.01/0/0.01, dsn=4.0.0, status=deferred (user lookup error)2. Второй адрес, просто убавил на один символ, снова локально
postfix/qmgr[1912]: 30D7F2AC468: from=<root@mrk.mmk.ru>, size=300, nrcpt=1 (queue active)
postfix/local[85595]: warning: error looking up passwd info for a1234567890123456: Invalid argument
postfix/local[85595]: 30D7F2AC468: to=<a1234567890123456@mrk.mmk.ru>, relay=local, delay=0, delays=0/0/0/0, dsn=4.0.0, status=deferred (user lookup error)3. Третий адрес, убрал еще один символ, письмо пошло как надо, что за полтергейст
postfix/qmgr[1912]: D301E2AC469: from=<root@mrk.mmk.ru>, size=299, nrcpt=1 (queue active)
postfix/smtp[85611]: D301E2AC469: to=<a123456789012345@mrk.mmk.ru>, relay=*****[*******]:25, delay=0.46, delays=0/0/0.01/0.44, dsn=2.6.0, status=sent (250 2.6.0 <20150311032555.D301E2AC469@mrk.mmk.ru>
Queued mail for delivery)Помогите, неужели это баг postfix
> Господа, система:
> FreeBSD mrk.mmk.ru 8.4-STABLE FreeBSD 8.4-STABLE #23: Wed Jan 28 13:54:31 YEKT 2015
> postfix-2.11.3_3,1
> не могу. Вот смотрите по логам:Ну так сами смотрите тоже:
> 1. Один адрес, письмо пытается лечь локально
> postfix/local[85595]: warning: error looking up passwd info for a12345678901234567:
>Invalid argumentОшибка есть.
> 2. Второй адрес, просто убавил на один символ, снова локально
> postfix/local[85595]: warning: error looking up passwd info for a1234567890123456:
> Invalid argumentОшибка есть.
> 3. Третий адрес, убрал еще один символ, письмо пошло как надо, что
> за полтергейстОшибки нет.
>Помогите, неужели это баг postfix
AFAIK, это наложились "особенности реализации".
> в настройках стоит, что всю почту для своего домена доставлять другому почтовику
> mydestination = $myhostname, mrk.mmk.ru
> mailbox_transport = smtp:нужный серверПеределайте не через mailbox_transport, а просто через transport_maps (чтобы убрать участие транспорта local):
transport_maps = hash:/etc/postfix/transport
/etc/postfix/transport:
mrk.mmk.ru: smtp:нужный сервер
Правда не совсем понятны ваши настройки. Если на релей придет письмо для несуществующего пользователя - он его примет и будет доставлять или нет?
Переделал, все заработало. Интересно
причем mailbox_transport оставил
просто переделал запись в transport с
mrk.mmk.ru :
на
mrk.mmk.ru smtp:сервервсе равно объяснения нет, почему для адресов короче все работало, а для попавшегося длинного нет :)
а релей принимает все, там уже выше потом принимается решение о наличии ящика. Ящика нет, приходит оттуда ошибка (вернее не приходит, а ложится в ящик отправителя)
> Переделал, все заработало. Интересно
> причем mailbox_transport оставил
> просто переделал запись в transport с
> mrk.mmk.ru :
> на
> mrk.mmk.ru smtp:сервер
> все равно объяснения нет, почему для адресов короче все работало, а для
> попавшегося длинного нет :)Объяснение есть. Транспорт local ищет локального пользователя, при этом возникает ошибка.
В силу наличия ошибки, она транслируется в SMTP-ошибку.Если бы пользователь не был найден (без возникновения ошибок), то оно все равно бы пошло на mailbox_transport:
mailbox_transport (default: empty)
Optional message delivery transport that the local(8) delivery agent
should use for mailbox delivery to all local recipients, whether or not
they are found in the UNIX passwd database.
> а релей принимает все, там уже выше потом принимается решение о наличии
> ящика. Ящика нет, приходит оттуда ошибка (вернее не приходит, а ложится
> в ящик отправителя)А если отправитель был внешний, то не _ложится в ящик отправителя_, а доставляется, верно? А если это был спам с подделанным адресом отправителя - то этот несчастный получает от вас мусор....
Решение: на релее должна быть база реально существующих адресов.
Её можно вести как вручную, так и полуавтоматически.http://www.postfix.org/ADDRESS_VERIFICATION_README.html#reci...
http://www.postfix.org/postconf.5.html#address_verify_cache_...
> Объяснение есть. Транспорт local ищет локального пользователя, при этом возникает ошибка.база локальных получателей пуста, он вообще ничего не знает о ней, попытаюсь объяснить схему:
Это просто почтовый релей, который принимает письма от нескольких серверов (как правило это всякие нотифы от оракла) и стравливает их уже почтовику, который все принимает и раскладывает по ящикам, он мне не подконтроллен. Т.е. на этом почтовике, где я словил этот глюк внешних адресатов нет в принципе. И в инет он не смотрит.
> В силу наличия ошибки, она транслируется в SMTP-ошибку.
> Если бы пользователь не был найден (без возникновения ошибок), то оно все
> равно бы пошло на mailbox_transport:пользователь всегда не найден, только он всегда письмо отправлял вышестоящему, а в этом случае больше 16 символов до @ пытался доставить сам
> А если отправитель был внешний, то не _ложится в ящик отправителя_, а
> доставляется, верно? А если это был спам с подделанным адресом отправителя
> - то этот несчастный получает от вас мусор....отправители только внутренние, т.е. тоже с домена @mrk.mmk.ru, учетки серверов для доставки алармов и прочего
> Решение: на релее должна быть база реально существующих адресов.
> Её можно вести как вручную, так и полуавтоматически.ну это нереально, да и не надо совершенно
все равно поведение мне пока не понятно, почему при адресе получателя XXXX@my.domain.ru, где кол-во XXX меньше или 16 символов, он отправлял согласно mailbox_transport, а когда 17 и больше, согласно файлу transport
> в настройках стоит, что всю почту для своего домена доставлять другому почтовику
> mydestination = $myhostname, mrk.mmk.ru
> mailbox_transport = smtp:нужный сервердля этого есть relay_domains. Зачем объявлять домен, для которого сервер выступает как релей локальным?
> postfix/local[85595]: 19D3B2AC405: to=<a12345678901234567@mrk.mmk.ru>, relay=local,
> delay=0.03, delays=0.01/0.01/0/0.01, dsn=4.0.0, status=deferred (user lookup error)вы путаете классы адресов в postfix. Советую прочитать и понять - http://www.postfix.org/ADDRESS_CLASS_README.html
>[оверквотинг удален]
> postfix/local[85595]: 30D7F2AC468: to=<a1234567890123456@mrk.mmk.ru>, relay=local,
> delay=0, delays=0/0/0/0, dsn=4.0.0, status=deferred (user lookup error)
> 3. Третий адрес, убрал еще один символ, письмо пошло как надо, что
> за полтергейст
> postfix/qmgr[1912]: D301E2AC469: from=<root@mrk.mmk.ru>, size=299, nrcpt=1 (queue
> active)
> postfix/smtp[85611]: D301E2AC469: to=<a123456789012345@mrk.mmk.ru>, relay=*****[*******]:25,
> delay=0.46, delays=0/0/0.01/0.44, dsn=2.6.0, status=sent (250 2.6.0 <20150311032555.D301E2AC469@mrk.mmk.ru>
> Queued mail for delivery)
> Помогите, неужели это баг postfixУ freebsd максимальная длина для имени пользователя - 16 символов, вот скорее всего оттель ноги и ростут....