在 postfix 中,我尝试为未知的本地帐户设置一个万能地址。任何可以发送给本地用户的邮件都应发送到他们的本地邮箱(并尊重 中的任何别名/etc/aliases
,包括本地别名以及将邮件转发到外部的别名)。任何不存在/etc/aliases
或/etc/passwd
应该重定向到 的用户的邮件root
。对于 ,root
我已经设置了一个别名以/etc/aliases
重定向到单独的邮件地址[email protected]
(不在本地服务器上)。
为了实现这一目标我已经设定main.cf
:
luser_relay = root
local_recipient_maps =
我尝试过的其他设置luser_relay
包括:
[email protected]
root@localhost
[email protected]
root@--server hostname--
root@$local
--other user with no alias--
--other user with no alias--@localhost
--other user with no [email protected]
--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)
如果有一个解决方案,其中设置了 catch-all 地址,[email protected]
那很好,但我希望它被重定向到root
并遵守,/etc/aliaseses
以便当我需要更改时,[email protected]
我只需要在里面进行更改/etc/aliases
,而不必在另一个 postfix 配置文件中执行此操作。
我的 postfix 版本是 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
in的别名/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
谁能发现我的配置中的错误?
谢谢你!
答案1
花了很长时间,但我终于能够找出问题所在。问题出在 NSS 配置中。我的 Rackspace Cloud Server默认安装了/etc/nsswitch.conf
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 网站下载 CentOS 7 DVD 并在 VM 中安装最小安装来测试这一点。接下来,我将其添加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
。