В postfix я пытаюсь настроить общий адрес для неизвестных локальных учетных записей. Любая почта, которая может быть доставлена локальному пользователю, должна быть доставлена в его локальный почтовый ящик (и уважать любые псевдонимы в /etc/aliases
как для локальных псевдонимов, так и для псевдонимов, пересылающих почту наружу). Любая почта для пользователя, которого нет в /etc/aliases
или /etc/passwd
должен быть перенаправлен на root
. Для root
Я установил псевдоним в /etc/aliases
перенаправить на отдельный почтовый адрес admin@companydomain.com
(не на локальном сервере).
Чтобы добиться этого, я установил main.cf
:
luser_relay = root
local_recipient_maps =
Другие настройки, которые я пробовал для luser_relay
являются:
admin@companydomain.com
root@localhost
root@localhost.localdomain
root@--server hostname--
root@$local
--other user with no alias--
--other user with no alias--@localhost
--other user with no alias--@localhost.localdomain
--other user with no alias--@--server hostname--
--other user with no alias--@$local
Но я продолжаю получать ошибку поиска пользователя (при отправке письма несуществующему тест-пользователю с mail -s test test
):
Jan 4 14:08:03 test postfix/pickup[28595]: A4E3382454: uid=--uid-- from=<--local user-->
Jan 4 14:08:03 test postfix/cleanup[29192]: A4E3382454: message-id=<20150104140803.A4E3382454@--server hostname-->
Jan 4 14:08:03 test postfix/qmgr[28596]: A4E3382454: from=<--local user--@--server hostname-->, size=456, nrcpt=1 (queue active)
Jan 4 14:08:03 test postfix/local[29194]: warning: error looking up passwd info for test: No such file or directory
Jan 4 14:08:03 test postfix/local[29194]: A4E3382454: to=<test@--server hostname-->, orig_to=<test>, relay=local, delay=0.02, delays=0.01/0/0/0, dsn=4.0.0, status=deferred (user lookup error)
Если есть решение, в котором установлен адрес для приема всей почты домена admin@companydomain.com
это нормально, но я бы предпочел, чтобы его перенаправили на root
и честь /etc/aliaseses
так что, когда мне нужно изменить admin@companydomain.com
Мне нужно сделать это только в /etc/aliases
а также не в другом файле конфигурации постфикса.
Моя версия постфикса - 2.10.1 (CentOS 7), и помимо вышеуказанного luser_relay
и local_recipient_maps
Я добавил recipient_bcc_maps
и transport_maps
.
Возможно моя транспортная карта мешает luser_relay
?
/.*@localhost(\.localdomain)?$/ local:
/.*@--the server's hostname--/ local:
/.*@--company domain-- relay:
/.*/ discard:
Назначение карты транспорта - доставить любую локальную почту, разрешить отправку почты в домен компании, но отбросить любые другие письма. В recipient_bcc_maps
настроен для скрытой копии всех писем, отклоненных в транспортной карте, на отладочный адрес. Также псевдоним для root
в /etc/aliases
попадает в --other domain to not discard--
. Поскольку это касается сервера разработки, я хочу, чтобы любая локальная почта доставлялась как таковая, а также доставляла любую почту, адресованную домену компании, но предотвращала отправку любой другой почты во внешний мир.
Выход postconf -n
:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = localhost
inet_protocols = all
local_recipient_maps =
luser_relay = root
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
recipient_bcc_maps = pcre:/etc/postfix/recipient_bcc
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
transport_maps = pcre:/etc/postfix/transport
unknown_local_recipient_reject_code = 550
Кто-нибудь может заметить ошибку в моей конфигурации?
Спасибо!
Это заняло много времени, но я, наконец, смог выяснить проблему. Это в конфигурации NSS /etc/nsswitch.conf
. На моем облачном сервере Rackspace был пакет yum sssd-client
установлен по умолчанию, и /etc/nsswitch.conf
имеет записи по умолчанию для passwd
и другие файлы для использования sss
.
В основном, если у вас есть значение по умолчанию /etc/nsswitch.conf
и установите sssd-client
упаковать No such file or directory
проблема возникнет в CentOS 7. Это потому, что он пытается найти /var/lib/sss/mc/passwd
(в конце концов понял это с помощью strace
что также было большой проблемой для правильной работы). Но этот файл не существует, если вы не настроили sssd
. Я протестировал это, загрузив CentOS 7 DVD с веб-сайта CentOS и установив минимальную установку на виртуальную машину. Далее я добавил luser_relay
в конфигурацию Postfix, которая работала нормально, тогда все, что я сделал, это установил sssd-client
и он "волшебным образом" перестал работать.
Исправление 1: удалять sss
из /etc/nsswitch.conf
.
Вы увидите такую строку:
passwd: files sss
Измените это на:
passwd: files
По умолчанию sss
также включен для shadow
, group
, services
и netgroup
, вы должны удалить его и для них, чтобы предотвратить проблемы, когда libnss
пытается получить к ним доступ.
Исправление 2: Удалить sssd-client
пакет.
Удаление sssd-client
пакет также решает проблему, я думаю, потому что без клиента libnss
игнорирует sss
директива в /etc/nsswitch.conf
. Если он вам не нужен, вы можете удалить его с помощью yum remove sssd-client
.