Tagoletta/SiberGuvenlikBaskanligi-API

GitHub: Tagoletta/SiberGuvenlikBaskanligi-API

一个非官方的自动化工具,从土耳其网络安全局公开 API 拉取威胁情报黑名单并生成防火墙可直接订阅的域名、URL 和 IP 拦截列表。

Stars: 0 | Forks: 0

# SiberGuvenlikBaskanligi-API ## 🇹🇷 土耳其语 ### 是什么? 从 `https://siberguvenlik.gov.tr/api/address/index` 的公开 API 中拉取 **5 种地址类型**(domain、url、ip、ip6、ip6net);在数据库中存储每条记录的日期,并在每次运行时根据时间窗口生成最新的列表。 **无需服务器。** GitHub Actions 会每小时运行,并将列表 commit 到 `data/` 文件夹。您的防火墙可以直接从原始的 GitHub URL 获取列表。 ### 输出文件(`data/` 文件夹) 每种地址类型都保存在单独的文件中: | 窗口 | Domain | URL | IPv4 | IPv6 | IPv6 网络 | | ------- | --------- | ------- | ---- | ---- | ----------- | | 所有时间 | `full-domains.txt` | `full-urls.txt` | `full-ips.txt` | `full-ip6.txt` | `full-ip6net.txt` | | 最近 30 天 | `days-30-domains.txt` | `days-30-urls.txt` | `days-30-ips.txt` | `days-30-ip6.txt` | `days-30-ip6net.txt` | | 最近 60 天 | `days-60-domains.txt` | `days-60-urls.txt` | `days-60-ips.txt` | `days-60-ip6.txt` | `days-60-ip6net.txt` | | 最近 90 天 | `days-90-domains.txt` | `days-90-urls.txt` | `days-90-ips.txt` | `days-90-ip6.txt` | `days-90-ip6net.txt` | | 最近 120 天 | `days-120-domains.txt` | `days-120-urls.txt` | `days-120-ips.txt` | `days-120-ip6.txt` | `days-120-ip6net.txt` | 每个文件:每行一条记录,没有引号,没有空格,LF 换行符。Domain 按字母顺序排序,IP 按数字顺序排序。 ### 大致记录数量(当前) | 类型 | 记录数量 | | --- | ------------ | | Domain | ~458,000 | | URL(包含 query string) | ~7,000 | | IPv4 | ~14,700 | | IPv6 | ~10 | | IPv6 网络块 | ~0–10 | ### 防火墙 URL 示例 ``` https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-domains.txt https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/days-30-domains.txt https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-ips.txt https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-urls.txt ``` 兼容 pfSense、OPNsense、MikroTik、ipset、Pi-hole、Squid 及类似系统。 ### 运行原理 - **首次运行**(没有完整列表):开始对所有类型进行全面抓取。每种类型均使用 `per-page=1000` 参数获取(总共约 481 页)。首次抓取以平均每页 5–12 秒的速度,将在 **~1–2 小时**内完成。 - **全面抓取后**:在每小时的运行中,仅获取新页面(incremental),并重新生成列表。 - **每 7 天**:进行一次全面重新抓取,以捕获从源中删除的记录。已删除的记录会被附加到 `data/removed.log` 文件中。 ### 老化逻辑 列表是在每次运行时根据数据库 + 当前时间生成的。31 天的记录会从 `days-30-*` 中掉出,但仍会保留在 `days-60-*`、`days-90-*`、`days-120-*` 和 `full-*` 中。任何记录都不会从更宽泛的窗口中消失。 ### 使用 Docker 运行(可选) 如果您使用 GitHub Actions,则不需要 Docker。要在您自己的服务器上运行: ``` docker compose up -d --build docker compose logs -f ``` 列表将在 `./data` 文件夹中生成。 ## 🇬🇧 英语 ### 这是什么? 一个开源工具,从土耳其网络安全局(`siberguvenlik.gov.tr`)的公开 API 中拉取 **五种地址类型**(domain、url、ip、ip6、ip6net),存储每条记录及其原始日期,并在每次运行时重新生成基于时间窗口的拦截列表。 **无需服务器。** 一个 GitHub Actions 工作流会每小时运行,将刷新后的列表 commit 到 `data/`,您的防火墙可以直接从原始的 GitHub URL 获取它们。 ### 输出文件(`data/` 目录) 每种地址类型都保存在其各自的文件中: | 窗口 | Domain | URL | IPv4 | IPv6 | IPv6 网络 | | ------ | ------- | ---- | ---- | ---- | --------- | | 所有时间 | `full-domains.txt` | `full-urls.txt` | `full-ips.txt` | `full-ip6.txt` | `full-ip6net.txt` | | 最近 30 天 | `days-30-domains.txt` | `days-30-urls.txt` | `days-30-ips.txt` | `days-30-ip6.txt` | `days-30-ip6net.txt` | | 最近 60 天 | `days-60-domains.txt` | `days-60-urls.txt` | `days-60-ips.txt` | `days-60-ip6.txt` | `days-60-ip6net.txt` | | 最近 90 天 | `days-90-domains.txt` | `days-90-urls.txt` | `days-90-ips.txt` | `days-90-ip6.txt` | `days-90-ip6net.txt` | | 最近 120 天 | `days-120-domains.txt` | `days-120-urls.txt` | `days-120-ips.txt` | `days-120-ip6.txt` | `days-120-ip6net.txt` | 每行一条记录,没有引号,没有周围空格,LF 换行符。Domain 按字母顺序排序,IP 按数字顺序排序。 ### 大致记录数量(当前) | 类型 | 数量 | | ---- | ----- | | Domain | ~458,000 | | URL(包含 query string) | ~7,000 | | IPv4 | ~14,700 | | IPv6 | ~10 | | IPv6 网络块 | ~0–10 | ### 防火墙 URL 示例 ``` https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-domains.txt https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/days-30-domains.txt https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-ips.txt https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-urls.txt ``` 兼容 pfSense、OPNsense、MikroTik、ipset、Pi-hole、Squid 及类似系统。 ### 运行原理 - **首次运行**(不存在完整列表):开始对所有类型进行全面抓取。每种类型均使用 `per-page=1000` 进行获取(总共约 481 页)。以每页 5–12 秒的速度,初始种子提取将在 **~1–2 小时**内完成。 - **全面抓取后**:每小时的运行会进行快速的 incremental 更新 —— 仅获取每种类型的新页面 —— 然后重新生成列表。 - **每 7 天**:运行一次全面重新抓取,以检测在源中被移除的条目。被移除的记录将被附加到 `data/removed.log`。 ### 老化逻辑 列表是在每次运行时根据数据库 + 当前时间生成的。达到 31 天的记录会从 `days-30-*` 中掉出,但仍保留在 `days-60-*`、`days-90-*`、`days-120-*` 和 `full-*` 中。任何条目都不会从更宽泛的窗口中丢失。 ### 环境变量 | 变量 | 默认值 | 描述 | | -------- | ------- | ----------- | | `MIN_DELAY` / `MAX_DELAY` | `5` / `12` | 全面抓取期间页面之间的秒数 | | `INC_MIN_DELAY` / `INC_MAX_DELAY` | `2` / `6` | incremental 期间页面之间的秒数 | | `TIME_BUDGET_SECONDS` | `18000` | 在这么多秒后对全面抓取设置 checkpoint | | `FULL_RESYNC_DAYS` | `7` | 重新抓取所有内容的频率,以检测被移除的内容(`0` = 关闭) | | `INCREMENTAL_MAX_PAGES` | `50` | 每次运行每种类型的 incremental 页面的安全上限 | | `PER_PAGE` | `1000` | 每个 API 页面的记录数(API 支持的最大值) | | `DATA_DIR` | `data` | 输出目录 | | `USER_AGENT` | Chrome/138 | 请求的 User-Agent | ### Docker(可选) 如果您使用 GitHub Actions,则不需要。 ``` docker compose up -d --build docker compose logs -f ``` 列表将出现在 `./data` 下。通过 `docker-compose.yml` 中的环境变量覆盖步调。 ### GitHub Actions `.github/workflows/update-lists.yml` 每小时运行一次。首次运行会执行可恢复的全面抓取;一旦完成,每小时的运行即为快速的 incremental 更新。 ### 本地运行(无 Docker) ``` pip install -r scraper/requirements.txt DATA_DIR=data python scraper/fetch.py ``` ### API 源 所有数据均来自官方公开 API: ``` GET https://siberguvenlik.gov.tr/api/address/index?type={domain|url|ip|ip6|ip6net}&page={n}&per-page=1000 ``` API 文档:`https://siberguvenlik.gov.tr/api/openapi.yaml`
标签:GitHub Actions, 威胁情报, 开发者工具, 网络调试, 自动化, 自动笔记, 请求拦截, 逆向工具, 防火墙, 黑名单