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

基于aiosmtpd,无需SPF/DMARC/DKIM检测伪造From地址的方法问询

针对小范围白名单的From地址伪造验证方案

核心逻辑

你这个场景是只收几十个特定地址的邮件,而且发件方没法配合做认证、很多连SPF/DKIM/DMARC都没配全,IP还可能变动。完全没必要去逐个查每个地址的邮件配置,搞复杂了反而给自己添堵。核心思路就是「白名单兜底+轻量特征验证」,既够安全又好维护。

基于aiosmtpd的具体实现

1. 基础白名单过滤

先把允许的几十个From地址列成白名单集合,比如:

ALLOWED_FROM = {"alice@company.com", "bob@personal.org", ...}

在aiosmtpd的自定义handler里,第一步就做过滤:如果邮件From:地址不在白名单里,直接返回550 Not allowed拒收。

2. 对白名单地址做轻量真实性验证

白名单内的邮件,做两个简单验证就能挡住绝大多数伪造情况:

  • 反向DNS匹配:获取发件IP的反向PTR记录,检查该记录对应的域名是否与From地址的域名相关——比如From是alice@company.com,PTR要是mail.company.com/smtp.company.com这类域名,或是Gmail、Outlook等大服务商的官方域名(比如mail-xxx.google.com对应@gmail.com)。用Python自带的socket模块即可实现:
    import socket
    
    def check_reverse_dns(sender_ip, from_domain):
        try:
            ptr_record = socket.gethostbyaddr(sender_ip)[0]
            # 宽松匹配逻辑:PTR包含From域名、是From域名的子域名,或是已知服务商域名
            return from_domain in ptr_record or ptr_record.endswith(f".{from_domain}") or ptr_record in {"mail.google.com", "smtp.outlook.com"}
        except socket.herror:
            # 无PTR记录的标记为可疑,不直接拒收
            return False
    
  • 信封发件人(MAIL FROM)校验:检查SMTP会话中的MAIL FROM(信封发件人)地址域名,是否与From:地址的域名一致,或是该域名的合法中继地址(比如bounce@company.com这类官方退信地址)。完全不相关的信封地址基本都是伪造的。

3. 可疑邮件人工兜底

碰到反向DNS不匹配、信封发件人异常的白名单邮件,别直接拒收,转到专门的待审核邮箱手动确认——比如是不是发件人更换了邮件服务商,确认后把新的PTR域名加到信任列表即可。

是否需要逐个维护SPF/DMARC/DKIM?

完全不需要。你只有几十个目标地址,挨个查配置还要跟进后续变更,纯属给自己增加维护负担。上面的轻量验证已经能覆盖绝大多数伪造场景,再配合人工兜底,足够满足你的需求。

简化维护的小技巧

  • 把信任的PTR域名、信封域名做成JSON配置文件,无需修改代码就能更新规则;
  • 定期将待审核邮件中的合法发件IP和PTR批量加入信任列表,减少重复人工操作;
  • 启用aiosmtpd的详细日志功能,记录SMTP会话细节,方便后续排查可疑邮件。

内容的提问来源于stack exchange,提问作者HippoMan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 20:54:53