Почему postfix отправил уведомление о недоставке в локальный файл очереди, если доставка этому пользователю отключена?

Почему postfix отправил уведомление о недоставке в локальный файл очереди, если доставка этому пользователю отключена?

Моя конфигурация postfix позволяет почту через несколько local_recipient_maps. Однако доставка на "proxy:unix:passwd.byname" специальнонеполноценный. Обычно это предотвращает доставку локальным пользователям Unix:

$ getent passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/bin/sh
$ nc localhost 25
220 my.mail.host ESMTP Postfix
helo localhost
250 my.mail.host
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
550 5.1.1 <[email protected]>: Recipient address rejected: User unknown in local recipient table
rcpt to:www-data
550 5.1.1 <www-data>: Recipient address rejected: User unknown in local recipient table

Однако сегодня утром я заметил письмо, отправленное в локальный почтовый спул www-data. Заглянув внутрь, я увидел, что:

  • Это было сообщение.от [email protected], отправлено другим хостом в нашей сети, используя my.mail.host в качестве смарт-хоста
  • Он оставался в очереди my.mail.host в течение нескольких дней, пока предпринимались попытки повторить попытку.
  • Затем он отскочил
  • Сообщение о недоставке было доставлено в почтовый файл «www-data» на my.mail.host.

Итак, мой вопрос:почему это произошло и как предотвратить возникновение подобной ситуации в будущем?

решение1

Предположение

Вы сказали

Доставка на "proxy:unix:passwd.byname" специально отключена. Обычно это предотвращает доставку локальным пользователям unix.

Итак, я могу предположить, что вы удаляете части proxy:unix:passwd.byname из local_recipient_maps. По умолчанию значение этого параметра равно

# postconf -d local_recipient_maps
local_recipient_maps = proxy:unix:passwd.byname $alias_maps

И вы меняете это на

# postconf local_recipient_maps
local_recipient_maps = $alias_maps

Анализ

Так почему же он отклоняет обычную почту, а возвращенная почта все равно проходит?

Чтобы ответить на этот вопрос, нам нужно увидеть общую картину.Обзор архитектуры Postfix, особенно когда postfix получает электронную почту

                            trivial-
                           rewrite(8)
Network ->  smtpd(8)           |  ^    
                       \       v  |
Network ->  qmqpd(8)    ->  cleanup(8)  ->  incoming
                       /
            pickup(8)   <-  maildrop
                                ^
                                |
Local   ->  sendmail(1) ->  postdrop(1)

Postfix обращается только local_recipient_mapsтогда, когда проверяет почту, полученную через smtpd. Почему? Потому что проверки выполняются, когда smtpd_reject_unlisted_recipientзначение параметра равно «yes» или вы устанавливаете reject_unlisted_recipientв smtpd_*_restrictions (обратите внимание на слово smtpd в имени обоих параметров). Смотритечеловек постконфдля получения подробной информации о параметре. Эта проверка включена по умолчанию. Это объясняет, почему ваш тестовый email был отклонен postfix.

Подпрыгиватьэто специальный email в архитектуре postfix. Он генерируется внутри postfix для информирования отправителя о состоянии (не)доставки. Он течетчерез постфикс напрямую к очистке, обходя smtpd. Вот почему www-dataвсе еще получаю отказы.

Решение

Вместо того, чтобы отклонить его, вы можете отправить его в черную дыру с помощьюпочтовые_транспортные_картыиотказатьсяуслуга.

Для этого установите mailbox_transport_maps

#main.cf
mailbox_transport_maps = hash:/etc/postfix/wwwdata-blackhole

#/etc/postfix/wwwdata-blackhole
www-data   discard:silently

Теперь, всякий раз, когда www-data получает электронное письмо, оно будет молча отбрасываться.

Связанный контент