Я пытаюсь настроить конфигурацию Postfix (2.11.4) так, чтобы она делала следующее:
Вот частичный файл 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 почта, созданная на сервере для something@example.com, автоматически отправляется на «outbound.example.com» для обработки. А для № 2 у меня это находится в / etc / postfix / aliases, поэтому сообщения на «robot@myserver.example.com» могут обрабатываться сценарием Perl.
robot: | "/usr/local/bin/robomail.pl"
Все идет нормально. Это №3 доставляет мне неприятности.
Видите ли, этот сервер использовался для запуска Sendmail с включенной маскировкой домена. И на этом сервере все еще есть приложения (которые я не control), которые отправляют электронное письмо только на адрес "george" (например) и ожидают, что сервер автоматически преобразует его в "george@example.com", который затем направляется на "outbound.example.com" для доставки.
Я попытался исправить это, настроив luser_relay
директива:
luser_relay = $local@example.com
Так работает - когда локальная доставка "george" не удалась, 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
Из журналов маскировка домена перепишите отправителя и получателя из something
к something@myserver.example.com
. Причина переписывания - paramater 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 $myorigin
знак равно $myhostname
= myserver.example.com на george
.
Поскольку $ myhostname (myserver.example.com) указано в `mydestination, тогда postfix попытается выполнить проверку существования пользователя с помощью
alias_maps
Если пользователь не соответствует обеим проверкам, электронное письмо будет возвращено. В противном случае электронная почта будет доставлена в локальный почтовый ящик.
Судя по вопросу, похоже, вы хотите переписать george -> george@example.com вместо george -> george@myserver.example.com. Затем вы можете изменить параметр myorigin
становиться $mydomain
. В main.cf
myorigin = $mydomain