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 库; ## 截图 ### 截图:报告列表 ![Report list](/screenshots/dmarc-srg-report-list-small.png?raw=true "Screenshot: Report List") [更大的版本](/screenshots/dmarc-srg-report-list.png?raw=true) ### 截图:报告详情 ![Report detail](/screenshots/dmarc-srg-report-detail-small.png?raw=true "Screenshot: Report Detail") [更大的版本](/screenshots/dmarc-srg-report-detail.png?raw=true) ### 截图:管理面板 ![Admin Panel](/screenshots/dmarc-srg-admin-panel-small.png?raw=true "Screenshot: Admin Panel") [更大的版本](/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界面, 反垃圾邮件, 安全合规, 开源, 报告生成器, 系统管理员, 网络代理, 邮件分析, 邮件安全