我正在尝试在 Centos x64(selinux 已禁用)上设置一个策略服务器,这将允许我限制来自不同服务器的传入邮件数量以及(更重要的是)来自不同用户帐户的传出邮件数量。目前,我相信我有一个有效的配置来限制传入邮件(例如来自 google 的邮件),但我无法让 postfix 对内部和传出邮件进行相同的策略检查。
问题就在这里(目前我只是想让 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(用于测试)
当从其他主机(例如从 gmail)向此计算机发送邮件时,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
这意味着 postfix 尝试访问 policyd 服务器(按预期工作)
但是,当我尝试从控制台(使用 mailx)向用户 root(本地帐户)或其他地方(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 不起作用?(我相信这是一个后缀问题)
有人知道如何制定策略限制系统用户(例如 webapp)发送邮件吗?
答案1
您在 中定义了策略 check smtpd_*_restrictions
,因此永远不会查询本地生成的邮件,因为此类邮件是使用该pickup(8)
服务注入 Postfix 队列的。为了避免这种情况,您需要修改master.cf
并向content_filter
pickup(8)
(当然,您还需要添加上述内容过滤实例,请查看内容过滤。
恕我直言,我认为这样做不值得。没有人能够在邮件网关上生成本地邮件,而且不是中央邮件网关,那么无论如何,您都在错误的地方进行限制。