Я пытаюсь настроить конфигурацию 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, почта, сгенерированная на сервере для 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
postconf myhostname
,postconf myorigin
аpostconf masquerade_domains
?Ответы:
Из журналов процесс маскировки домена переписывает и отправителя, и получателя из
something
вsomething@myserver.example.com
. Виновником этого переписывания является параматерmyorigin
иappend_at_myorigin
. Как сказано в постфиксных документахВ вашей конфигурации postfix append
$myorigin
=$myhostname
= myserver.example.com togeorge
.Поскольку $ myhostname (myserver.example.com) указан в `mydestination, postfix будет пытаться выполнить проверку существования пользователя с помощью
alias_maps
Если пользователь не совпадает с обеими проверками, электронная почта будет отклонена. В противном случае электронная почта будет доставлена на локальный почтовый ящик.
Предложенное решение
Исходя из вопроса, похоже, что вы хотите переписать george -> george@example.com вместо george -> george@myserver.example.com. Тогда вы можете изменить параметр
myorigin
стать$mydomain
. Вmain.cf
источник