我已经配置了我的 postfix,以便我的服务器下的用户将通过端口 587 发送邮件,而端口 25 将仅用于接收来自邮件服务器的邮件。
我成功了,因为连接到端口 25 时,邮件不被允许发送到邮件服务器之外,并且被拒绝为中继访问。而在端口 587 上,客户端能够将邮件发送到外部邮件服务器。
为了实现这一点,我在 main.cf 中进行了设置
smtpd_recipient_restriction=permit_mynetworks, reject_unauth_destination
也就是说我删除了 permit_sasl_authenticated。
如果我添加这个条件,则允许邮件发送到网络外部,如果我删除这个条件,任何人都可以连接到端口 25,并且由于没有身份验证,可以向本地收件人发送任意数量的邮件。
我可以在端口 25 上使用 sasl 身份验证,但又阻止它在我的网络之外中继邮件。
在main.cf中设置:
smtpd_recipient_restrictions=
reject_unauth_pipelining,permit_mynetworks,reject_unauth_destination,
reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_recipient_domain,
reject_non_fqdn_recipient,reject_unauth_destination,check_sender_access mysql:/etc
/postfix/mysql-virtual_sender.cf,reject_non_fqdn_sender,
reject_unknown_sender_domain,reject_unknown_recipient_domain,reject_rbl_client
cbl.abuseat.org,reject_rbl_client dul.dnsbl.sorbs.net,reject_rbl_client
ix.dnsbl.manitu.net,check_recipient_access mysql:/etc/postfix/mysql-
virtual_recipient.cf,permit
master.cf 中的设置
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
答案1
在 master.cf 中,您可以为每个端口添加限制。查看 master.cf 文件的底部,您将看到类似以下内容:
#submission inet n – n – – smtpd
或者
#587 inet n - n - - smtpd
您需要取消注释它,然后添加(类似这样的内容,阅读每个值的作用)
提交 inet n – n – – smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
(这里有很多选项可以添加)
基本上,-o 表示覆盖 main.cf 中针对该端口找到的内容。因此,您可以设置 main.cf 以在端口 25 上以您想要的方式接受邮件,然后设置端口 587(提交)以仅允许 sasl 身份验证或其他任何方式。
您想允许任何人(在合理范围内)通过端口 25 向您发送邮件,但不允许通过该端口进行中继。这就是reject_unauth_destination
……