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安全, 可视化界面, 运维工具, 通知系统, 防火墙