Linux下基于sendmail实现用户间邮件发送权限精准控制


阅读 2 次

需求场景与技术背景

在RHEL5邮件服务器环境中,我们经常需要实现细粒度的用户间邮件发送权限控制。典型的业务场景如:

  • 开发团队内部需要限制某些成员向特定角色发送邮件
  • 不同部门间需要设置邮件通信白名单
  • 防止测试账号向生产环境账号发送干扰邮件

sendmail访问控制实现方案

通过修改sendmail的access控制文件是最直接的解决方案。以下是具体操作步骤:


# 编辑/etc/mail/access文件
sudo vi /etc/mail/access

# 添加如下规则
From:jack@yourdomain.com    To:alice@yourdomain.com    REJECT
From:jack@yourdomain.com    To:bob@yourdomain.com      OK
From:bob@yourdomain.com     To:alice@yourdomain.com    OK

# 生成新的access.db文件
sudo makemap hash /etc/mail/access.db < /etc/mail/access

# 重启sendmail服务
sudo service sendmail restart

进阶配置技巧

如果需要更灵活的配置,可以使用sendmail的check_rcpt规则集:


# 在sendmail.mc中添加
LOCAL_RULESETS
Rcheck_rcpt
# 拒绝jack发给alice的邮件
R$* < @ $* > $*         $: $&{client_name}
Rjack                   $#error $: "550 Mail to alice not allowed"

测试验证方法

配置完成后,建议通过以下方式验证:


# 使用telnet模拟邮件发送
telnet localhost 25
HELO localhost
MAIL FROM: <jack@yourdomain.com>
RCPT TO: <alice@yourdomain.com>  # 应该收到550错误
RCPT TO: <bob@yourdomain.com>    # 应该被接受

生产环境注意事项

  • 修改access文件后必须重新生成access.db
  • 规则变更后建议先测试再重启服务
  • 复杂的规则建议使用m4宏进行管理
  • 定期检查/var/log/maillog验证规则生效情况