Моя конфигурация постфикса позволяет отправлять почту через несколько 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:www-data@my.mail.host
250 2.1.0 Ok
rcpt to:www-data@my.mail.host
550 5.1.1 <www-data@my.mail.host>: 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. Заглянув внутрь, я вижу, что:
Итак, мой вопрос: почему это произошло, и как я могу предотвратить это в будущем?
Ты сказал
доставка в "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
значение "да" или вы устанавливаете reject_unlisted_recipient
в ограничениях smtpd _ * _ (обратите внимание на слово smtpd в имени обоих параметров). Видеть человек postconf для получения подробной информации о параметре. Эта проверка включена по умолчанию. Это объясняет, почему ваше тестовое письмо отклонено постфиксом.
Отказов это особый адрес электронной почты в постфиксной архитектуре. Он генерируется внутренне с помощью postfix, чтобы сообщить отправителю отчет о (не) доставке. Течет через postfix прямо на очистку, минуя smtpd
. Так вот почему www-data
по-прежнему получать письмо о недоставке.
Вместо того, чтобы отклонить его, вы можете отправить его в черную дыру с помощью mailbox_transport_maps и отбросить служба.
Для этого установите mailbox_transport_maps
#main.cf
mailbox_transport_maps = hash:/etc/postfix/wwwdata-blackhole
#/etc/postfix/wwwdata-blackhole
www-data discard:silently
Теперь всякий раз, когда www-data получает электронное письмо, оно автоматически отбрасывается.