基于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
相关产品推荐
相关产品推荐

