需求场景与技术背景
在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验证规则生效情况