DeuKrom/cloudflare-zero-trust-adblock-updater

GitHub: DeuKrom/cloudflare-zero-trust-adblock-updater

该项目是一个自动化运维工具,用于将 OISD 广告拦截域名列表同步至 Cloudflare Zero Trust DNS 网关并创建对应的拦截规则。

Stars: 5 | Forks: 2

# cf-zt-oisd-sync 本程序会下载官方的 `OISD small` 列表,并将其包含的域名添加到 Cloudflare Zero Trust Gateway 中,作为可复用的 DOMAIN 列表。随后,它会创建一条 DNS Gateway 规则来拦截这些域名。 除非是由本程序创建的策略,否则程序不会修改现有的 Cloudflare 策略。 ## 最快上手路径 如果您希望程序能“直接运行”,整体流程如下: 1. 在终端中打开项目文件夹。 2. 安装 Python 及相关依赖。 3. 运行 `python run.py`。 4. 选择选项 `1` 来创建 `.env`。 5. 选择选项 `2` 来检查连接。 6. 选择选项 `3` 在不进行任何更改的情况下预览计划。 7. 如果计划无误,选择选项 `4`。 8. 以后需要更新时,再次运行 `python run.py` 并选择选项 `4` 即可。 您可以依次执行以下命令。 ## 安装依赖 在项目文件夹中,运行: ``` python3 -m pip install -e . ``` 在 Windows PowerShell 中,通常可以使用以下命令: ``` python -m pip install -e . ``` ## 通过菜单轻松启动 安装好依赖后,运行: ``` python run.py ``` 在 WSL/Ubuntu 中,该命令可能名为 `python3`: ``` python3 run.py ``` 您将看到如下菜单: ``` 1. Initial setup (.env) 2. Check Cloudflare and OISD connection 3. Dry-run: show plan without changes 4. Create or update lists and blocking rule 5. Show status 6. Delete created objects 7. Diagnose problems 8. Language / Язык 0. Exit ``` 输入选项编号并按 `Enter` 键。例如,常见的首次运行流程如下: ``` 1 -> 2 -> 3 -> 4 -> 5 ``` 这意味着:配置、检查、预览计划、应用更改,然后检查状态。 如果该程序已作为 CLI 命令安装,您可以通过以下命令打开同样的菜单: ``` cf-zt-oisd-sync menu ``` ## 应该打开哪个文件夹 请打开项目文件夹本身: ``` C:\Users\MAESTRO\Downloads\cloudflare zero trust adblock updater ``` 如果您在 WSL/Linux 环境下操作,相同的路径显示如下: ``` /mnt/c/Users/MAESTRO/Downloads/cloudflare zero trust adblock updater ``` 该文件夹应包含: ``` README.md pyproject.toml .env.example cf_zt_oisd_sync/ tests/ ``` ## 如何打开文件夹 以下任何方式均可: - Windows Terminal; - PowerShell; - Ubuntu/WSL 终端; - VS Code:选择 `File -> Open Folder`,然后打开 `Terminal -> New Terminal`。 如果您不确定,最简单的方法是打开 VS Code,选择项目文件夹并打开内置终端。 ## 如何进入项目文件夹 在 WSL/Ubuntu 中: ``` cd "/mnt/c/Users/MAESTRO/Downloads/cloudflare zero trust adblock updater" ``` 在 PowerShell 中: ``` cd "C:\Users\MAESTRO\Downloads\cloudflare zero trust adblock updater" ``` ## 安装 Python 检查是否已安装 Python: ``` python3 --version ``` 或者在 Windows PowerShell 中: ``` py --version ``` 需要 Python 3.11 或更高版本。 如果尚未安装 Python,请从官方网站下载安装: ``` https://www.python.org/downloads/ ``` 在 Windows 上,安装过程中请务必勾选 `Add python.exe to PATH` 复选框。 ## 安装依赖 ### 选项 A:WSL/Ubuntu 首先安装 `pip` 和虚拟环境模块: ``` sudo apt-get update sudo apt-get install -y python3-pip python3-venv ``` 然后在项目文件夹中运行: ``` python3 -m venv .venv source .venv/bin/activate python3 -m pip install -e '.[dev]' ``` 执行 `source .venv/bin/activate` 后,终端提示符的开头通常会出现 `(.venv)`。这是正常现象:表示已为该项目激活了独立的 Python 环境。 ### 选项 B:Windows PowerShell 在项目文件夹中运行: ``` py -m venv .venv .\.venv\Scripts\Activate.ps1 py -m pip install -e ".[dev]" ``` 如果 PowerShell 不允许激活 `.venv`,请运行: ``` Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser ``` 然后重试: ``` .\.venv\Scripts\Activate.ps1 ``` ## 配置 Cloudflare 程序需要以下两个值: - `CLOUDFLARE_ACCOUNT_ID`; - `CLOUDFLARE_API_TOKEN`。 ### 在哪里找到 Account ID 1. 打开 Cloudflare dashboard。 2. 选择您要使用的账户。 3. `Account ID` 通常显示在右侧边栏或账户/个人资料部分。 4. 复制完整的值。 ### 如何创建 API token 1. 打开 Cloudflare dashboard。 2. 进入 `My Profile -> API Tokens`。 3. 点击 `Create Token`。 4. 创建一个具有 Cloudflare Zero Trust Gateway Lists 和 Gateway Rules 权限的 token。 5. token 创建完成后,请立即复制。 Cloudflare 仅会显示一次 token。如果您在没有复制的情况下关闭了页面,通常重新创建一个新 token 会更方便。 ## 创建 `.env` 最简单的方法: ``` cf-zt-oisd-sync setup ``` 程序会提示: ``` Enter Cloudflare Account ID: Enter Cloudflare API Token: OISD small source [https://small.oisd.nl]: List prefix [oisd-small-auto]: Rule name [OISD Small Auto Block]: List chunk size [1000]: ``` 对于大多数问题,您可以直接按 `Enter` 键保留默认值。您只需要手动输入 `Account ID` 和 `API Token`。 完成后,该文件夹中会生成一个 `.env` 文件。这是一个包含设置的常规文本文件。您可以使用 VS Code 或记事本打开它,但请勿将其发布到网络上:因为它包含敏感的 API token。 ## 运行前检查 运行: ``` cf-zt-oisd-sync check ``` 如果一切正常,您会看到带有 `[OK]` 的行。 如果您看到关于 token 或权限的错误,请检查: - `CLOUDFLARE_API_TOKEN` 是否粘贴正确; - `CLOUDFLARE_ACCOUNT_ID` 是否粘贴正确; - 该 token 是否具有 Gateway Lists 和 Gateway Rules 的权限。 ## 安全预览 在创建实际对象之前,运行: ``` cf-zt-oisd-sync dry-run ``` 此命令不会对 Cloudflare 中的任何内容进行更改。它只会显示将要创建的列表数量以及将会生效的规则。 ## 首次正式运行 如果 `dry-run` 的结果无误: ``` cf-zt-oisd-sync init ``` 程序会要求您确认。确认后,它将创建: - 若干 Cloudflare DOMAIN 列表; - 一条 DNS Gateway 规则; - 一个本地状态文件,即 `.cf-zt-oisd-state.json`。 在创建过程中,您将看到 Cloudflare 列表和 DNS Gateway 规则的进度指示。如果列表较多,这也是正常现象:Cloudflare 会分批次接受它们。 该状态文件用于让程序记住它创建了哪些对象。您无需手动编辑此文件。 ## 如何检查一切是否正常 运行: ``` cf-zt-oisd-sync status ``` 成功的结果大致如下: ``` [OK] Local state matches Cloudflare ``` 您也可以打开 Cloudflare Zero Trust dashboard,手动检查 Gateway 列表/规则。 ## 如何更新列表 常规更新: ``` cf-zt-oisd-sync update ``` 无需确认的自动更新: ``` cf-zt-oisd-sync update --yes ``` 在更新过程中,程序也会显示进度:一个指示列表的进度,另一个指示拦截规则的进度。 ## 如何删除程序创建的所有内容 交互式删除: ``` cf-zt-oisd-sync delete ``` 程序会要求您输入: ``` DELETE ``` 自动删除(无需确认): ``` cf-zt-oisd-sync delete --yes ``` 仅会删除由此程序管理的对象:带有已配置前缀的列表、状态文件中的对象,以及标记有 `Managed by cf-zt-oisd-sync` 的对象。 ## 每天需要运行的内容 如需定期更新,请使用: ``` cf-zt-oisd-sync update --yes ``` ### Windows 任务计划程序 供计划程序使用的命令: ``` python -m cf_zt_oisd_sync.cli update --yes ``` 其工作文件夹必须为项目文件夹: ``` C:\Users\MAESTRO\Downloads\cloudflare zero trust adblock updater ``` ### Linux cron 每天 04:00 运行的示例: ``` 0 4 * * * cd "/mnt/c/Users/MAESTRO/Downloads/cloudflare zero trust adblock updater" && . .venv/bin/activate && cf-zt-oisd-sync update --yes ``` ## 常见问题 ### 我应该打开哪个文件? 打开 `README.md` 查看说明。 打开 `.env` 修改设置。 打开 `.cf-zt-oisd-state.json` 检查状态,但通常不需要编辑它。 ### 应该如何打开 `.env`? 使用 VS Code、记事本、Notepad++ 或任何文本编辑器均可。通常 VS Code 最为方便。 ### 为什么看不到 `.env` 文件? 以点开头的文件有时会被视为隐藏文件。它们在 VS Code 中通常是可见的。在 Windows 资源管理器中,需要启用显示隐藏文件功能。 ### 如果找不到 `cf-zt-oisd-sync` 命令怎么办? 最可能的原因是未激活虚拟环境。 在 WSL/Ubuntu 中: ``` source .venv/bin/activate ``` 在 PowerShell 中: ``` .\.venv\Scripts\Activate.ps1 ``` 然后重试: ``` cf-zt-oisd-sync --help ``` ### 如果出现 `python3: No module named pip` 怎么办? 在 WSL/Ubuntu 中,请安装 `pip`: ``` sudo apt-get update sudo apt-get install -y python3-pip python3-venv ``` 然后重新安装依赖。 ### 如果 Cloudflare 返回 `403 Forbidden` 怎么办? 这几乎总是意味着 API token 缺少所需的权限。请创建或更新具有 Zero Trust Gateway Lists 和 Gateway Rules 访问权限的 token。 ### 如果我担心破坏现有配置怎么办? 请先运行: ``` cf-zt-oisd-sync dry-run ``` 此命令不会更改任何内容。它只会展示计划。 ### 我可以更改 `CHUNK_SIZE` 吗? 通常,保持 `1000` 即可。对于 Standard/免费类型的 Cloudflare 计划来说,这是一个安全的值。 ### 什么是状态文件? 即 `.cf-zt-oisd-state.json` 文件。程序会将创建的 Cloudflare 列表和规则的 ID 记录在其中。程序正是通过它来判断需要更新或删除哪些内容的。 ### 我可以删除状态文件吗? 最好不要删除。如果它丢失了,请运行: ``` cf-zt-oisd-sync doctor ``` ### 我怎么确定程序不会删除多余的内容? `delete` 命令仅会查找并删除明显由本程序创建的对象: - 它们被列在状态文件中; - 或者它们具有已配置的前缀; - 或者它们的描述中包含 `Managed by cf-zt-oisd-sync`。 ## 命令参考 ``` cf-zt-oisd-sync --help cf-zt-oisd-sync setup cf-zt-oisd-sync check cf-zt-oisd-sync dry-run cf-zt-oisd-sync init cf-zt-oisd-sync update cf-zt-oisd-sync status cf-zt-oisd-sync delete cf-zt-oisd-sync doctor ``` ## 开发者检查 如果已安装开发依赖: ``` pytest ```
标签:Cloudflare, DNS, Docker 部署, MITRE ATT&CK, Python, 广告拦截, 数字取证, 文档结构分析, 无后门, 网络运维, 自动化脚本, 逆向工具