postfix check_policy_service – 只检查传入邮件,忽略内部和外部

我试图在Centos x64(禁用selinux)上设置一个policyd服务器,这将允许我限制来自不同服务器的消息数量(更重要的是)从不同的用户帐户传出。 目前,我相信我有一个工作configuration限制接收邮件(例如,谷歌),但我不能让后缀做相同的政策检查内部和外发的邮件。

这是问题(目前我只是想让postfix使用策略服务)

我在main.cf中添加了以下几行

smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10031, reject_unauth_destination smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031 

和禁用policyd(testing)

从其他主机(从gmail到ex)发送邮件到本机时,在postfix日志中存在policyd服务器无法访问的错误

 Sep 10 10:40:23 centosvbox1 postfix/smtpd[9378]: connect from unknown[IP_ADDRESS] Sep 10 10:40:23 centosvbox1 postfix/smtpd[9378]: warning: connect to 127.0.0.1:10031: Connection refused Sep 10 10:40:23 centosvbox1 postfix/smtpd[9378]: warning: problem talking to server 127.0.0.1:10031: Connection refused Sep 10 10:40:24 centosvbox1 postfix/smtpd[9378]: warning: connect to 127.0.0.1:10031: Connection refused Sep 10 10:40:24 centosvbox1 postfix/smtpd[9378]: warning: problem talking to server 127.0.0.1:10031: Connection refused 

这意味着后缀尝试访问policyd服务器(按预期工作)

但是,当我尝试从控制台(使用mailx)发送邮件到用户根(本地帐户)或其他地方(gmail),没有这样的查找 – 邮件只是滑过,甚至没有尝试访问policyd

 echo "ksfdhjksf" | mail -s "kjfhkjsfkjsfd" root Sep 10 10:42:03 centosvbox1 postfix/cleanup[9386]: 9B606417D9: message-id=<20130910084203.9B606417D9@domain> Sep 10 10:42:03 centosvbox1 postfix/qmgr[9342]: 9B606417D9: from=<root@domain>, size=458, nrcpt=1 (queue active) Sep 10 10:42:03 centosvbox1 postfix/local[9388]: 9B606417D9: to=<root@domain>, orig_to=<root>, relay=local, delay=0.04, delays=0.03/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox) Sep 10 10:42:03 centosvbox1 postfix/qmgr[9342]: 9B606417D9: removed 

这让我想知道 – 为什么check_policy_service不起作用? (我相信这是一个后缀问题)

任何人有任何想法如何使policyd限制系统用户(例如webapp)发送邮件?

您在smtpd_*_restrictions定义了策略检查,因此永远不会查询本地生成的邮件,因为这种邮件是使用pickup(8)服务注入到Postfix队列中的。 为了避免这种情况,您需要修改master.cf并将一个content_filter实例添加到pickup(8)服务(当然,您还需要添加所述内容过滤实例,查看内容过滤 。

FWIW,我不认为这样做是值得的。 没有人应该能够在邮件网关上生成本地邮件,而不是中央邮件网关,那么你是在错误的地方限制,反正。