Exim4配置ACL拦截特定域名失效问题排查求助
Exim4 拦截qq.com发件人规则失效问题排查与修复
问题根源分析
第一种配置的错误点
- 条件参数误用:
domains = +deny_sender匹配的是收件人域名,而非发件人域名,完全不符合拦截发件人的需求,应该使用sender_domains参数匹配发件人域名。 - domainlist格式错误:
/etc/exim4/deny_sender中写*@qq.com、.*@qq.com是错误的,domainlist用于匹配域名,只需直接写入域名qq.com即可,不需要@前缀或通配符前缀。
第二种配置的错误点
- 文件路径不匹配:配置中指定的文件是
/etc/exim4/deny_senders(末尾多了s),但实际文件是deny_sender,路径不一致导致lookup无法找到规则,自然不会生效。 - lookup逻辑可选优化:如果是拦截整个域名,直接匹配
sender_address_domain(发件人域名部分)比匹配完整sender_address更高效。
正确配置方案
方案一:使用domainlist匹配发件人域名
- 修改
exim4.conf配置:# 定义要拦截的发件人域名列表 domainlist deny_sender_domains = /etc/exim4/deny_sender_domains ... begin acl acl_check_sender: deny sender_domains = +deny_sender_domains message = Mail rejected; Sender domain qq.com is blocked - 创建/修改
/etc/exim4/deny_sender_domains文件,内容仅需:qq.com
方案二:使用lookup匹配发件人地址/域名
如果需要更灵活的匹配(比如拦截特定邮箱而非整个域名),可以用lookup:
- 修改
exim4.conf的ACL规则:
若要拦截完整邮箱地址,改为:begin acl acl_check_sender: deny # 匹配发件人域名是否在拦截列表中 condition = ${lookup{$sender_address_domain}lsearch{/etc/exim4/deny_sender_domains}{yes}{no}} message = Mail rejected; Sender domain qq.com is blockedcondition = ${lookup{$sender_address}lsearch{/etc/exim4/deny_sender_addresses}{yes}{no}} - 对应文件内容:
- 拦截域名:
/etc/exim4/deny_sender_domains写入qq.com - 拦截完整地址:
/etc/exim4/deny_sender_addresses写入*@qq.com
- 拦截域名:
生效步骤
- 检查配置语法是否正确:
exim -bV - 重启Exim服务:
systemctl restart exim4 - 可选:模拟SMTP会话测试规则(替换
yourdomain.com为你的服务器域名):
如果规则生效,会直接返回拒绝信息。exim -bh 127.0.0.1 # 输入以下内容测试 HELO test MAIL FROM:<test@qq.com>
内容的提问来源于stack exchange,提问作者terra3110
相关产品推荐
相关产品推荐

