blwarren/kidobo
GitHub: blwarren/kidobo
kidobo 是一个基于 iptables/ipset 的 Linux 防火墙 blocklist 管理服务,用于高效聚合本地与远程 IP 封禁列表并原子化地同步到防火墙规则。
Stars: 1 | Forks: 0
# kidobo
`kidobo` 是一个一次性的 Linux firewall blocklist 管理器。
它从本地和远程源构建 IPv4/IPv6 blocklist,减去 safelist 条目,
并以确定性的 `iptables`/`ip6tables` 配线原子化地更新 `ipset`。
## 功能
- 轻松管理和更新本地与远程的 IP/CIDR blocklist。
- 利用 ipset 发挥 Linux kernel 在执行 blocklist 时的高效性。
- 在创建 ipset 之前,自动对 blocklist 进行去重和合并。
- 同步速度**极快**:在 Linode Nanode(单核 CPU VM,1 GB RAM)上的测试中,
涉及总计 40 万行的多个 blocklist 的更新在不到五秒内即可完成。
- 保持控制权:识别从 blocklist 中剔除的安全 IP。
- 本地 blocklist 条目可以通过手动编辑文本文件或使用 CLI 的 ban/unban 命令进行管理。
## 安装说明
目前发布的二进制文件仅适用于 Linux x86_64。
尚未在其他 CPU 架构上进行过测试,但欢迎您在其他平台上使用时运行测试套件并从源码构建。
安装最新版本:
```
curl -fsSL https://raw.githubusercontent.com/blwarren/kidobo/main/scripts/install.sh | sudo bash
```
安装特定版本:
```
curl -fsSL https://raw.githubusercontent.com/blwarren/kidobo/main/scripts/install.sh | sudo bash -s -- --version v0.10.1
```
一步完成安装和初始化:
```
curl -fsSL https://raw.githubusercontent.com/blwarren/kidobo/main/scripts/install.sh | sudo bash -s -- --init
```
卸载:
```
curl -fsSL https://raw.githubusercontent.com/blwarren/kidobo/main/scripts/install.sh | sudo bash -s -- --uninstall
```
安全提示:通过管道将脚本传递给 `sudo bash` 非常方便,但如果您需要更严格的安装策略,您应该审查脚本(并固定版本)。
## 快速开始
初始化默认文件和(可选的)systemd units:
```
sudo kidobo init
```
配置您的源和 safelist:
```
sudoedit /etc/kidobo/config.toml
```
添加本地条目(可选):
使用命令:
```
kidobo ban 203.0.113.7
kidobo unban 203.0.113.7
kidobo ban --file targets.txt
kidobo unban --file targets.txt --yes
kidobo ban --asn 213412
kidobo unban --asn AS213412
```
或直接编辑本地 blocklist 文件:
```
echo "203.0.113.0/24" | sudo tee -a /var/lib/kidobo/blocklist.txt
```
检查先决条件和系统配置:
```
sudo kidobo doctor
```
将 blocklist 应用于 `ipset` 和 firewall 规则:
```
sudo kidobo sync
```
在本地 blocklist 更改后重新应用:
```
sudo kidobo sync
```
检查目标是否匹配(离线):
```
kidobo lookup 203.0.113.7
kidobo lookup --file targets.txt
# 仅分析 overlap 与 cached remote sources(离线)
kidobo analyze overlap
# 打印可选的 reduction candidate 列表
kidobo analyze overlap --print-fully-covered-local --print-reduced-local
```
移除 kidobo firewall/ipset 相关产物(可选):
```
sudo kidobo flush
sudo kidobo flush --cache-only
```
## 最小配置
`/etc/kidobo/config.toml`:
```
[ipset]
set_name = "kidobo"
[safe]
ips = []
include_github_meta = true
github_meta_url = "https://api.github.com/meta"
[remote]
timeout_secs = 30
cache_stale_after_secs = 86400
urls = []
[asn]
banned = []
cache_stale_after_secs = 86400
```
实用选项:
- `ipset.set_name_v6`:可选,默认为 `-v6`
- `ipset.enable_ipv6`:默认 `true`
- `ipset.chain_action`:`DROP`(默认)或 `REJECT`
- `ipset.maxelem`:范围 `[1, 500000]`
- `remote.timeout_secs`:范围 `[1, 3600]`
- `remote.cache_stale_after_secs`:用于重叠分析警告的远程缓存过期阈值
(默认 `86400`,范围 `[1, 604800]`)
- `asn.banned`:在 `sync` 期间解析为前缀的 ASN 封禁
- `asn.cache_stale_after_secs`:ASN 前缀缓存刷新阈值
(默认 `86400`,范围 `[1, 604800]`)
## 默认设置
- 配置文件:`/etc/kidobo/config.toml`
- 本地 blocklist:`/var/lib/kidobo/blocklist.txt`
- 缓存目录:`/var/cache/kidobo`
- Systemd units:
- `/etc/systemd/system/kidobo-sync.service`
- `/etc/systemd/system/kidobo-sync.timer`
`kidobo init` 会创建缺失的文件和 systemd units。
在默认路径下,它还会运行 `systemctl daemon-reload` 并启用
`kidobo-sync.timer`,同时将 `KIDOBO_LOG_FORMAT=journal` 写入
`kidobo-sync.service`。
对于默认的 systemd units,`init` 要求在
`/usr/local/bin/kidobo` 或 `/usr/bin/kidobo` 处已安装 `kidobo` 二进制文件;它不会从
任意构建或 `cargo run` 路径生成 units。
## 注意事项
- `ban` 和 `unban` 仅修改本地源状态:
针对 IP/CIDR 目标的 blocklist 条目以及针对 ASN 目标的 config `[asn].banned`。
`--file` 接受每行一个严格的 IP/CIDR 目标。
运行 `sync` 以将更改应用于 firewall/ipset runtime 状态。
- `lookup` 仅限离线使用,并使用本地 blocklist 加上缓存的远程
源。它不需要有效的配置文件,但如果您希望匹配本地 blocklist 之外的内容,您仍需要缓存的
远程数据。
- `sync` 会对有效的本地 blocklist 进行规范化,仅保留规范条目之前的
前导注释/标头部分。无效的非标头本地
行现在会导致 `sync` 失败;它们不会被静默丢弃或重写消除。
- `analyze overlap` 仅限离线使用,当缓存的远程
`.iplist` 文件早于 `remote.cache_stale_after_secs` 时会发出警告。
- `doctor` 默认是只读的。它会检查远程缓存路径是否
可用,而不会创建目录或写入探测文件。
- `KIDOBO_ROOT` 会将配置/数据/缓存路径重定位到自定义根目录下。
## 许可证
MIT(详见 `LICENSE`)。
标签:ipset, iptables, IP黑名单, Python安全, 可视化界面, 运维工具, 通知系统, 防火墙