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

如何限制Postfix中可通过sendmail程序从指定地址发信的用户?

如何限制Postfix中可通过sendmail程序从指定地址发信的用户?

你遇到的问题其实很典型——Postfix的SMTP服务端限制(比如reject_known_sender_login_mismatch)只针对通过网络连接的SMTP客户端,而本地用户用sendmail命令发信时,走的是Postfix的pickup服务,默认这个服务对本地用户的限制非常宽松,不会检查发件人和登录用户的匹配关系。

别担心,我们可以通过调整pickup服务的配置来解决这个问题,同时保留sendmail给系统程序(比如dnf-automatic、fail2ban)使用的便利性,具体步骤如下:

1. 确认现有配置有效

你已经配置了smtpd_sender_login_maps和对应的映射文件,先确保这个配置是生效的:

  • 你的main.cf里的配置:
smtpd_sender_login_maps = hash:/etc/postfix/smtpd_sender_login_map
  • 映射文件/etc/postfix/smtpd_sender_login_map的内容:
admin admin

记得执行以下命令更新哈希表,让配置生效:

postmap /etc/postfix/smtpd_sender_login_map

2. 修改pickup服务的限制规则

编辑Postfix的master.cf配置文件,找到pickup服务的默认行:

pickup    unix  n       -       n       60      1       pickup

在这一行下面添加两个-o参数,让pickup服务也应用发件人登录匹配检查,同时限制收件人范围:

pickup    unix  n       -       n       60      1       pickup
  -o smtpd_sender_restrictions=reject_known_sender_login_mismatch
  -o smtpd_recipient_restrictions=permit_mynetworks,reject_unauth_destination
  • smtpd_sender_restrictions=reject_known_sender_login_mismatch:让pickup服务强制检查发件人地址和当前登录用户是否在映射表中匹配,不匹配就拒绝。
  • smtpd_recipient_restrictions=permit_mynetworks,reject_unauth_destination:确保只能发送到你的本地域或者已授权的外部地址,避免本地用户随意发垃圾邮件。

3. 给系统程序配置合法发件权限

为了让dnf-automatic、fail2ban这类系统程序能正常发信,你需要在smtpd_sender_login_map里添加它们对应的用户和发件人地址。比如:

  • 如果fail2ban用root用户发信到你的邮箱,可以添加:
root your-email@example.com
  • 如果dnf-automatic用dnf用户发信,添加:
dnf dnf-notify@example.com

添加后记得再次执行postmap /etc/postfix/smtpd_sender_login_map更新哈希表。

4. 重启Postfix生效

最后重启Postfix服务,让所有配置生效:

systemctl restart postfix

现在测试一下:当普通用户mallory再执行sendmail -f admin@example.com -t < spam.txt,Postfix会直接拒绝这个邮件,因为mallory不在admin@example.com的授权用户列表里;而系统程序用自己的用户发信时,因为有对应的映射条目,就能正常发送通知邮件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:08:01