berkant-koc/dmarc-audit

GitHub: berkant-koc/dmarc-audit

这是一个自动化审计DMARC聚合报告的工具,用于识别电子邮件认证配置问题。

Stars: 0 | Forks: 0

# dmarc 审计 [![test](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e0f2b8682e135720.svg)](https://github.com/berkant-koc/dmarc-audit/actions/workflows/test.yml) 从 IMAP 邮箱中提取 [RFC 7489](https://www.rfc-editor.org/rfc/rfc7489) DMARC 汇总 报告,透明地解析 `.gz` / `.zip` / `.xml` 附件,并逐条输出 判定结果及整个邮箱的汇总分析。在 SPF/DKIM 对齐偏移成为 投递问题之前将其找出。 设计用于每日 cron / systemd-timer 定时任务。仅使用标准库——无外部 依赖。输出为 ASCII 文本,适合管道处理。 ## 快速开始 单一邮箱: ``` git clone https://github.com/YOU/dmarc-audit.git cd dmarc-audit export DMARC_IMAP_HOST=imap.example.com export DMARC_USER=dmarc@example.com export DMARC_PASSWORD_FILE=~/.secrets/dmarc-pass python3 dmarc_audit.py ``` 多个邮箱(例如,你拥有的每个域一个): ``` export DMARC_IMAP_HOST=imap.example.com export DMARC_MAILBOXES='[ {"user": "dmarc@example.com", "password_file": "/secrets/example", "label": "example", "domain": "example.com"}, {"user": "dmarc@otherdom.de", "password_file": "/secrets/otherdom", "label": "otherdom", "domain": "otherdom.de"} ]' python3 dmarc_audit.py # both mailboxes, only UNSEEN python3 dmarc_audit.py --all # both mailboxes, all messages python3 dmarc_audit.py --label example ``` ## 配置(环境变量) | 变量 | 默认值 | 描述 | |---|---|---| | `DMARC_IMAP_HOST` | *(必填)* | IMAP-SSL 主机名 | | `DMARC_IMAP_PORT` | `993` | IMAP-SSL 端口 | | `DMARC_MAILBOXES` | — | 邮箱配置的 JSON 数组 *(优先级更高)* | | `DMARC_USER` | — | 单一邮箱快速配置 | | `DMARC_PASSWORD_FILE` | — | 包含 IMAP 密码的文件路径 | 密码从文件(而非环境变量)读取,以避免在 `ps aux` 或进程列表中泄露。 建议使用 `chmod 600`。 ## 输出示例 ``` [primary] 3 message(s) fetched. === mailbox: dmarc@example.com (3 report(s)) === org: google.com report id: 19283746 domain: example.com range: 2026-05-01T00:00:00+00:00 -> 2026-05-02T00:00:00+00:00 OK IP 209.85.220.69 count=147 disposition=DELIVERED DKIM-align:pass SPF-align:pass DKIM-auth: example.com=pass/sel=mailgun SPF-auth : example.com=pass === aggregate === totals: delivered=147 quarantined=0 rejected=0 no critical records (no full DKIM+SPF fail). ``` 当出现问题时,判定标记会切换为 `!!`,并且 IP 地址会出现在汇总的 `problematic` 列表中——这提示你需要 调查是第三方发件人(如 Mailchimp、Mailgun、你当月使用的 SaaS)配置错误,还是有人在欺骗你的 域名。 ## systemd-timer 示例 `~/.config/systemd/user/dmarc-audit.service`: ``` [Unit] Description=DMARC aggregate-report audit [Service] Type=oneshot Environment="DMARC_IMAP_HOST=imap.example.com" Environment="DMARC_USER=dmarc@example.com" Environment="DMARC_PASSWORD_FILE=%h/.secrets/dmarc-pass" ExecStart=/usr/bin/python3 %h/dmarc-audit/dmarc_audit.py StandardOutput=append:%h/.local/share/dmarc-audit.log ``` `~/.config/systemd/user/dmarc-audit.timer`: ``` [Unit] Description=Run dmarc-audit daily [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target ``` ## 你在 DNS 中发布的内容 在每个你监控的域名上配置相应的 DMARC TXT 记录: ``` _dmarc.example.com. IN TXT "v=DMARC1; p=reject; pct=100; adkim=s; aspf=s; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com; fo=1;" ``` 汇总报告 (RUA) 会发送到本工具读取的邮箱。失败报告 (RUF) 不在此处处理范围——它们需要逐条消息处理并包含个人信息;请谨慎对待。 ## 许可证 MIT。详见 `LICENSE`。
标签:DKIM, DMARC, IMAP, Python, SPF, 定时任务, 报告解析, 无后门, 标准库, 电子邮件安全, 网络安全, 聚合报告, 自动化监控, 附件解析, 隐私保护