liuch/dmarc-srg
GitHub: liuch/dmarc-srg
一个 PHP 编写的 DMARC 报告解析与可视化工具,帮助运维人员集中查看和分析收件 DMARC 报告,并自动生成摘要报告发送至指定邮箱。
Stars: 292 | Forks: 44
# DmarcSrg
一个用于解析、查看和生成收件 DMARC 报告摘要的 PHP 工具。
## 功能
* 查看已解析报告的表格
* 通过颜色轻松识别潜在的 DMARC 相关问题;
* 按域、月份、报告组织等过滤报告列表;
* 查看每份报告的 DKIM/SPF 详情;
* Web 界面的密码保护(可禁用);
* 从指定邮箱接收并处理传入的 DMARC 报告;
* 从指定服务器本地目录接收并处理传入的 DMARC 报告;
* 通过 Web 界面上传并处理传入的 DMARC 报告;
* 支持配置从数据库和邮箱中删除旧报告;
* 生成过去一周、过去一个月或过去 N 天的摘要报告,并将其发送到指定邮箱;
* 使用 AJAX 调用后端;无需外部 Javascript 库;
## 截图
### 截图:报告列表

[更大的版本](/screenshots/dmarc-srg-report-list.png?raw=true)
### 截图:报告详情

[更大的版本](/screenshots/dmarc-srg-report-detail.png?raw=true)
### 截图:管理面板

[更大的版本](/screenshots/dmarc-srg-admin-panel.png?raw=true)
## 安装与配置
确保所有文件都位于它们各自独立的子文件夹中。
### 环境要求
* MariaDB 或 MySQL
* PHP 8.1 或更高版本
* 已安装 `php-mbstring`、`php-mysql`、`php-xml`、`php-zip` 和 `php-json`
* 一个正常运行的网络服务器(非必需)
* 要处理您邮箱中收到的报告,需要安装 `ImapEngine` 库。请使用 composer 进行安装。请注意,PHP IMAP 扩展已被弃用,但在此处仍可使用。详情请参阅 conf.sample.php 文件中的注释。
* 要处理 S3 文件系统上的传入报告,您需要 `flysystem` 包。请使用 composer 进行安装。
有关安装/配置说明,请参阅[设置](docs/setup-and-configuration.md)。
### 创建数据库
在 shell 中以 mysql root 用户登录 MariaDB/MySQL 服务器,运行:
```
# mysql -u root -p
```
并输入密码。
进入 MariaDB 或 MySQL 提示符后,创建一个新数据库,其中 `dmarc` 是新数据库名称(您可以指定不同的数据库名称):
```
CREATE database dmarc;
```
为新数据库创建一个名为 `dmarc_user` 的新用户(您可以指定不同的用户名):
```
GRANT all on dmarc.* to dmarc_user@localhost identified by 'new_user_password';
```
**切记**将 `new_user_password` 替换为更安全的密码!
**注意:**如果需要使用带有其他表的现有数据库,您可以在 `config/conf.php` 文件中指定表前缀。
### conf.php
将 `config/conf.sample.php` 复制到 `config/conf.php` 并进行配置。阅读其中的注释以了解更多信息。
### 数据库初始化
有两种方法可以做到这一点:使用 Web 界面或运行以下命令:
```
php -f utils/database_admin.php init
```
## 使用方法
通常,DmarcSrg 旨在自动接收传入的 DMARC 报告,对其进行处理并将摘要报告发送到指定的电子邮件地址,因此 Web 界面和 Web 服务器是可选的。大部分工作是通过定期运行位于 utils 目录中的 php 脚本来完成的。
### 工具脚本
- `utils/check_config.php` - 检查您的配置。
- `utils/domains_admin.php` - 用于管理数据库中的域列表。
- `utils/database_admin.php` - 对数据库执行一些管理功能。
- `utils/fetch_reports.php` - 从邮箱和服务器本地目录获取 DMARC 报告并将它们保存到数据库。
- `utils/mailbox_cleaner.php` - 删除邮箱中旧的 DMARC 报告电子邮件。
- `utils/reportlog_cleaner.php` - 删除旧的日志条目。
- `utils/reports_cleaner.php` - 从数据库中删除旧的报告。
- `utils/summary_report.php` - 创建摘要报告并通过电子邮件发送。
- `utils/users_admin.php` - 用于管理数据库中的用户列表。
您可以在每个脚本的注释中找到有关它们的更多详细信息。
**注意:**尽管这些脚本只能从控制台运行,但仍建议阻止从 Web 服务器访问 utils 目录。
例如,如果您想获取上周的摘要报告,您应该运行如下命令:
```
php -f /usr/local/share/dmarc-srg/utils/summary_report.php domain=example.com period=lastweek
```
如果您收到提示 register_argc_argv 已禁用的错误消息,您可以像这样启用它:
```
php -d register_argc_argv=1 -f /usr/local/share/dmarc-srg/utils/summary_report.php domain=example.com period=lastweek
```
# Web 界面
使用 public/ 目录访问 Web 界面。您将看到基本的报告列表视图,允许您浏览已解析的报告。使用菜单进入管理部分,在数据库中创建表,并在必要时检查邮箱的可达性。
如果您的 Web 服务器上使用了内容安全策略 (CSP),添加以下权限即可:
- style-src 'self';
- img-src 'self';
- script-src 'self';
- connect-src 'self';
- media-src 'self';
- form-action 'self';
也就是说,这种相当严格的策略可以与当前的 Web 界面良好配合:
```
Content-Security-Policy: default-src 'none'; style-src 'self'; img-src 'self'; script-src 'self'; connect-src 'self'; media-src 'self'; form-action 'self'; base-uri 'none'; frame-ancestors 'none'
```
# 报告文件的处理方式
## 处理报告文件的一般规则
- 仅接受以下格式的文件:zip、gzip、xml。
- 缺少必填字段(域、时间、组织、id、记录等)的报告将被拒绝。
- 已经被接受的报告也会被拒绝。
- 针对未在数据库中列为允许处理的域的报告将被拒绝。第一个域会在收到第一份正确的报告时自动添加到数据库中。
- 对于每次下载报告文件的尝试,都会在内部日志中添加一条记录,该日志可以在 Web 界面中查看(管理 --> 日志)。
## 邮箱
IMAP 连接会依次建立到每个邮箱,并执行以下操作:
- 获取未读消息列表。
- 检查每条消息的内容(附件数量、附件大小、文件扩展名)。
- 从消息中提取报告文件并进行解析,然后将报告数据添加到数据库。
- 如果报告成功添加到数据库,则将该消息标记为 SEEN。
- 如果报告被拒绝,该消息将保持标记为 UNSEEN,并被移动到当前邮箱的 `failed` 文件夹中。如果该文件夹不存在,则会自动创建。
**注意:**处理的消息总数取决于配置文件中指定的限制。该限制分别适用于每个邮箱。
## 服务器本地目录
将扫描配置文件中指定的每个目录是否存在文件(非递归)。每个目录中的每个文件将按如下方式处理:
- 解析报告文件并将报告数据添加到数据库。
- 如果报告成功添加到数据库,该文件将被从目录中删除。
- 如果报告被拒绝,该文件将被移动到该文件当前所在目录的 `failed` 子目录中。如果子目录不存在,则会自动创建。
**注意:**处理的报告文件总数取决于配置文件中指定的限制。该限制分别适用于每个目录。
## 通过 Web 界面上传的报告文件
通过 Web 界面上传报告文件非常标准。上传结果可以在弹出消息和内部日志中看到。同时上传的文件数量及其大小仅受您的服务器设置限制(请参阅您的 `php.ini` 文件中的 `upload_max_filesize` 和 `post_max_size`)。
标签:AJAX, DKIM, DMARC, ffuf, HTML报表, IMAP, MariaDB, OpenVAS, PHP, SPF, Web界面, 反垃圾邮件, 安全合规, 开源, 报告生成器, 系统管理员, 网络代理, 邮件分析, 邮件安全