我正在postfix
运行RHEL6
:
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.6 (Santiago)
# rpm -q postfix
postfix-2.6.6-6.el6_5.x86_64
#
我正在尝试实现以下操作:
/etc/postfix/access
- 访问 - Postfix SMTP 服务器访问表:
# /etc/postfix/main.cf:
# smtpd_client_restrictions =
# check_client_access hash:/etc/postfix/access
#
# /etc/postfix/access:
# 1.2.3 REJECT
# 1.2.3.4 OK
#
# Execute the command "postmap /etc/postfix/access" after
# editing the file.
postconf
- Postfix 配置实用程序:
# postconf -n | grep access
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
#
/etc/postfix/access(.db)
:
# grep -v ^# access
10.52.11.97 OK
#
postmap
- Postfix 查找表管理:
# postmap /etc/postfix/access
# echo $?
0
#
每当尝试转发电子邮件时,我都会收到以下信息:
/var/log/maillog
:
postfix/smtpd[1515]: connect from X.X.X[10.52.11.97]
postfix/smtpd[1515]: NOQUEUE: reject: RCPT from X.X.X[10.52.11.97]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=SMTP helo=<HELO>
postfix/smtpd[1515]: lost connection after RCPT from X.X.X[10.52.11.97]
postfix/smtpd[1515]: disconnect from X.X.X[10.52.11.97]
更新
根据 @yoonix、@masegaloeh,我也发布了“smtpd_*_restrictions”:
$ egrep 'smtp.*restriction' *
access:# text of smtpd_end_of_data_restrictions.
access:# smtpd_client_restrictions =
main.cf:# through Postfix. See the smtpd_recipient_restrictions parameter
main.cf:# relay mail to. See the smtpd_recipient_restrictions description in
master.cf:# -o smtpd_client_restrictions=$mua_client_restrictions
master.cf:# -o smtpd_helo_restrictions=$mua_helo_restrictions
master.cf:# -o smtpd_sender_restrictions=$mua_sender_restrictions
master.cf:# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
master.cf:# -o smtpd_client_restrictions=$mua_client_restrictions
master.cf:# -o smtpd_helo_restrictions=$mua_helo_restrictions
master.cf:# -o smtpd_sender_restrictions=$mua_sender_restrictions
master.cf:# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
$
好像所有内容都被注释掉了。
答案1
嗯,你应该告诉我们你的目标和尝试的解决方案。没有目标,我们就不能给你提供替代解决方案。
从评论来看,你似乎想将一些客户端列入白名单,以便通过你的服务器进行中继。Postfix 本身具有ACL中继机制通过 smtpd_*_restriction。要了解 postfix 中启用了哪些 ACL,您可以运行命令
postconf | grep _restrictions
默认情况下,postfix 仅由和permit_mynetworks
提供。这意味着,postfix 将permit_sasl_authenticated
defer_unauth_destination
smtpd_relay_restrictions
- 如果客户端来自
mynetworks
参数中定义的 IP 地址,则允许中继 - 如果客户端已通过 SASL 成功验证,则允许中继
- 如果收件人域未在后缀地址类中列出,则软拒绝电子邮件。
- 否则,允许中继
您还可以通过以下方式获取有关该参数的信息man 5 postconf页。
这就解释了为什么 postfix 允许从特定客户端进行中继当你将其 IP 地址放在mynetworks
参数中时。
关于您通过 提供的初始解决方案check_client_access
,如果您将其放在 defer_unauth_destination 之前,它也应该有效。因此,您必须将此配置放入main.cf
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, check_client_access hash:/etc/postfix/access, defer_unauth_destination
放置它smtpd_client_restrictions
不会起作用,因为 postfix 会检查每个阶段的限制(...,客户端、helo、发送方、中继、接收方,...)。有关更多信息,您可以参考Postfix SMTP 中继和访问控制页