You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理下Postfix配置mynetworks时如何排除特定主机以阻止垃圾邮件转发

Nginx反向代理下Postfix配置mynetworks时如何排除特定主机以阻止垃圾邮件转发

首先得明确:Postfix的mynetworks配置本身不支持直接的exclude语法,你没法像设想的那样写mynetwork = 172.16.0.0/12 exclude:[host-name-to-exclude]。不过咱们可以换个思路解决问题——根源是Nginx Proxy Manager(NPM)作为反向代理,所有外部邮件请求的来源IP都会变成NPM容器的IP,而你把整个内网网段加进mynetworks后,Postfix会认为NPM发来的所有请求都是可信的,直接允许中继转发,这才给了垃圾邮件可乘之机。

下面给你几个可行的解决方案:

方案一:用smtpd_client_restrictions精准管控客户端权限

这是最灵活的方式,既能保留内网网段的宽泛设置,又能单独限制NPM的中继权限:

  1. 打开Postfix的main.cf配置文件,添加或修改smtpd_client_restrictions配置:
smtpd_client_restrictions =
    # 先拒绝NPM容器的IP(替换成你的NPM实际IP/主机名)
    check_client_access hash:/etc/postfix/restricted_clients,
    # 允许内网其他主机中继
    permit_mynetworks,
    # 拒绝其他所有未授权请求
    reject
  1. 创建/etc/postfix/restricted_clients文件,写入要限制的NPM信息:
# 替换成你的NPM容器IP或主机名
172.16.0.5 REJECT Unauthorized relay access
# 如果用主机名的话
npm-container-hostname REJECT Unauthorized relay access
  1. 生成Postfix需要的hash映射表,然后重载服务:
postmap /etc/postfix/restricted_clients
postfix reload

这样一来,即使NPM的IP在mynetworks的网段里,Postfix也会先检查restricted_clients,直接拒绝它的中继请求,而其他内网服务的请求依然能正常通过。

方案二:动态维护mynetworks的可信IP列表

如果你不想用额外的限制规则,也可以让mynetworks只包含真正需要中继的服务IP,同时解决手动更新的麻烦:

  1. 先把main.cf里的mynetworks改成读取外部文件:
mynetworks = hash:/etc/postfix/trusted_services
  1. 创建/etc/postfix/trusted_services文件,初始写入你的服务IP:
172.16.0.10 OK
172.16.0.11 OK
  1. 写个简单的Shell脚本,定期从Docker API获取指定服务的IP(比如给需要中继的服务加个标签mail-relay=allowed),自动更新trusted_services文件,然后执行postmap和postfix reload。把脚本加到cron里定时运行,这样新增服务时只要给容器加对应标签,就能自动加入可信列表,不用手动改配置。

方案三:跳过NPM直接映射Postfix的25端口

如果你的架构允许,最简单的办法是直接把Postfix容器的25端口映射到宿主机,而不是通过NPM转发。这样Postfix就能获取到外部邮件的真实来源IP,而不是NPM的IP——外部IP不在你的mynetworks网段里,Postfix会自动拒绝它们的中继请求,只有内网服务的请求才会被允许转发,从根源上避免垃圾邮件问题。

备注:内容来源于stack exchange,提问作者w41g87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 13:13:04