Остановить (большую часть) локальную доставку в Postfix

Я пытаюсь настроить конфигурацию Postfix (2.11.4), чтобы он сделал это:

  1. Отправляет почту, исходящую с локального сервера
  2. Принимает входящую почту для одного псевдонима, который фактически указывает на скрипт
  3. И ничего больше

Вот частичный main.cf:

mydomain               = example.com
inet_interfaces        = all
inet_protocols         = all
mydestination          = $myhostname, localhost.$mydomain, localhost
alias_maps             = hash:/etc/postfix/aliases
alias_database         = hash:/etc/postfix/aliases
relayhost              = outbound.example.com
allow_mail_to_commands = alias,forward,include
allow_mail_to_files    = alias,forward,include
luser_relay            = $local@example.com

Для #1, почта, сгенерированная на сервере для somebody@example.com, автоматически отправляется на outbound.example.com для обработки. И для #2 у меня это есть в /etc/postfix/aliases, поэтому сообщения на "robot@myserver.example.com" могут обрабатываться скриптом Perl

robot: | "/usr/local/bin/robomail.pl"

Все идет нормально. Это #3, что доставляет мне неприятности.

Видите, этот сервер использовался для запуска Sendmail с включенным маскировкой домена. И на этом сервере все еще есть некоторые приложения (которые я не контролирую), которые отправляют электронную почту просто "george" (например) и ожидают, что сервер автоматически преобразует это в "george@example.com", который затем получает перенаправляется на "outbound.example.com" для доставки.

Я пытался это исправить, настроив luser_relay директива:

luser_relay = $local@example.com

Такого рода работы - когда локальная доставка в "джордж" не удалась, Postfix перепишет его на george@example.com

Но если на самом деле "george" является действительной учетной записью на сервере (т.е. она указана в / etc / passwd), то Postfix примет сообщение и доставит его в локальный почтовый каталог, вместо того, чтобы переписывать адрес и пересылать его.

Я могу обойти это, сделав еще одну запись в / etc / postfix / aliases:

george: george@example.com

Но это, очевидно, не масштабируемо, когда на сервере есть десятки локальных учетных записей пользователей, причем постоянно добавляются новые. И, насколько я могу судить из документации, для / etc / postfix / aliases нет эквивалента с подстановочными знаками. В противном случае я хотел бы сделать что-то вроде этого:

robot: | "/usr/local/bin/robomail.pl"
*: *@example.com

Есть ли способ в Postfix сделать это? Принимать почту для "робота", но пересылать все остальное на "outbound.example.com" для доставки (при необходимости добавляя @ example.com)?

ОБНОВЛЕНИЕ: некоторые детали postconf и журнал сообщений, которые отправляются из "root" в "george" на локальном сервере:

myhostname = myserver.example.com
myorigin = $myhostname
masquerade_domains = 

Mar 23 14:07:26 myserver postfix/pickup[12851]: D2B4A4763D: uid=0 from=<root>
Mar 23 14:07:26 myserver postfix/cleanup[19630]: D2B4A4763D: message-id=<20150323190726.D2B4A4763D@myserver.example.com>
Mar 23 14:07:26 myserver postfix/qmgr[29583]: D2B4A4763D: from=<root@myserver.example.com>, size=323, nrcpt=1 (queue active)
Mar 23 14:07:26 myserver postfix/local[19632]: D2B4A4763D: to=<george@myserver.example.com>, orig_to=<george>, relay=local, delay=0.04, delays=0.02/0/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
Mar 23 14:07:26 myserver postfix/qmgr[29583]: D2B4A4763D: removed

1 ответ

Из журналов процесс маскировки домена переписывает как отправителя, так и получателя из something в something@myserver.example.com, Виновником этого переписывания является параматер myorigin а также append_at_myorigin, Как сказано в постфиксных документах

append_at_myorigin (по умолчанию: да)

При отправке локальной почты добавьте строку "@$myorigin" к почтовым адресам без информации о домене. При удаленной отправке почты добавьте строку "@$remote_header_rewrite_domain".

Примечание 1: эта функция включена по умолчанию и не должна быть отключена. Postfix не поддерживает адреса без домена.

Примечание 2: в Postfix версии 2.2 перезапись адреса заголовка сообщения происходит только тогда, когда выполняется одно из следующих условий:

  • Сообщение получено с помощью команды Postfix sendmail(1),
  • Сообщение получено от сетевого клиента, который соответствует $ local_header_rewrite_clients,
  • Сообщение получено из сети, а параметр remote_header_rewrite_domain указывает непустое значение.

Чтобы получить поведение до Postfix версии 2.2, укажите "local_header_rewrite_clients = static:all".

В вашей конфигурации postfix append $myorigin знак равно $myhostname = myserver.example.com для george,

Поскольку $ myhostname (myserver.example.com) указан в `mydestination, postfix будет пытаться выполнить проверку существования пользователя с помощью

  1. Проверьте, указан ли пользователь (george) как локальный пользователь на myserver.example.com
  2. Проверьте, определен ли пользователь (george) в alias_maps

Если пользователь не совпадает с обеими проверками, электронная почта будет отклонена. В противном случае электронная почта будет доставлена ​​на локальный почтовый ящик.

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

Исходя из вопроса, похоже, что вы хотите переписать george -> george@example.com вместо george -> george@myserver.example.com. Тогда вы можете изменить параметр myorigin становиться $mydomain, В main.cf

myorigin = $mydomain
Другие вопросы по тегам