Моя конфигурация 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 получает электронное письмо, оно будет молча отбрасываться.