berkant-koc/dmarc-audit
GitHub: berkant-koc/dmarc-audit
这是一个自动化审计DMARC聚合报告的工具,用于识别电子邮件认证配置问题。
Stars: 0 | Forks: 0
# dmarc 审计
[](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, 定时任务, 报告解析, 无后门, 标准库, 电子邮件安全, 网络安全, 聚合报告, 自动化监控, 附件解析, 隐私保护