extremeshok/omniban

GitHub: extremeshok/omniban

omniban 是一个统一的 Linux 封禁管理器,通过单一 TUI 和 CLI 跨 19 种防火墙、IDS、代理和 WAF 后端查看、搜索和管理 IP 封禁、域名 sinkhole 及 null-route。

Stars: 1 | Forks: 0

# omniban **适用于所有 Linux 防火墙与 IDS 的统一 ban 管理器。** [![Release](https://img.shields.io/github/v/release/extremeshok/omniban?sort=semver)](https://github.com/extremeshok/omniban/releases) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Go](https://img.shields.io/badge/go-1.26-00ADD8?logo=go&logoColor=white)](go.mod) [![Platform](https://img.shields.io/badge/platform-linux%20amd64%20%7C%20arm64-555)](https://github.com/extremeshok/omniban/releases) 不要再为各种防火墙和入侵防御工具焦头烂额。`omniban` 是一个统一的 TUI **和**可脚本化的 CLI,可显示 Linux 主机上的**所有** IP 封禁、域名 sinkhole 和 null-route —— 每一项都标明了所属的工具 —— 并允许你通过**正确的原生后端**进行搜索、添加和移除,这样 你就永远不会与你的 IDS 发生冲突,也不会覆盖其他工具的规则。 [**快速开始**](#quick-start) · [观看演示](docs/media/omniban-demo.gif) · [后端](#supported-backends) · [用法](#usage) · [安全机制](#safety-first) ![omniban TUI 演示](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8b3da1023c031651.gif) ## 快速开始 **安装(单行命令,独立二进制文件):** ``` curl -fsSL https://raw.githubusercontent.com/extremeshok/omniban/master/scripts/install.sh | sudo bash ``` **或者安装原生软件包:** ``` # Debian / Ubuntu sudo apt install ./omniban_*_linux_amd64.deb # RHEL / AlmaLinux / Rocky / CloudLinux sudo dnf install ./omniban_*_linux_amd64.rpm ``` 然后直接运行它: ``` sudo omniban # interactive TUI on a terminal sudo omniban status # or go straight to the CLI ``` 就这么简单 —— omniban 会自动检测所有已安装的 ban 机制。无需任何 配置。 ## 为什么选择它 - **一目了然。** fail2ban、CrowdSec、CSF、UFW、firewalld、nftables、 `/etc/hosts`、blackhole 路由…… 全部集中在一个标注了来源和方向的列表中, 而不是十个不同的命令和文件格式。 - **绝不干扰你的自动化流程。** 由 IDS 创建的 ban 会*通过该 IDS* 移除 —— omniban 不会 只是删除下游的防火墙规则,然后看着 IDS 在五秒钟后重新添加它。 - **绝不破坏其他工具。** omniban 只写入其专用的 namespace;其他所有内容仅供归因读取,绝不修改。 - **瞬间回答“这个 IP 在哪里被屏蔽了?”** —— 跨所有后端进行精确、通配符或 CIDR 包含关系搜索,也支持主机名或域名。 - **默认安全。** 支持 dry-run 预览、审计追踪、撤销日志、 每次编辑前的文件备份,以及拒绝封禁你自己的 SSH 会话的锁死保护。 - **单一静态二进制文件。** 无需运行时,无需 daemon,无依赖 —— 专为 Ubuntu、Debian、RHEL 克隆版、CloudLinux 和 Proxmox 打造。 ## 支持的后端 omniban 使用每个工具的原生 API,并将所有 ban 读取到一个统一的、 去重的列表中 —— 在五个地方强制执行的 IP 会显示为由其 IDS 拥有的 **一** 行, 其余部分则显示在 `ALSO` 列中。 | 层级 | 后端 | |-------|----------| | **IDS / 检测** | CrowdSec · fail2ban · sshguard · CSF/LFD · APF/BFD · denyhosts · Suricata · Wazuh/OSSEC | | **防火墙 / 执行** | UFW · firewalld · Shorewall · 原生 nftables · 原生 iptables · ipset | | **代理 / 负载均衡** | HAProxy | | **WAF** | ModSecurity · BunkerWeb | | **路由 / DNS** | blackhole null-route (`ip route`) · `/etc/hosts` sinkhole | **19 个后端**,每一个都支持列表 + 搜索 + unban(并在工具允许的情况下支持 ban/allow)。它们都在特权容器中通过真实的端到端测试进行了验证, 而不仅仅是使用 mock。 ## 用法 ``` sudo omniban status # detected backends + their state sudo omniban doctor # health check + warnings sudo omniban list # every ban/allow, source- + direction-labeled sudo omniban check 1.2.3.4 --contains # is this blocked anywhere? (incl. covering CIDRs) sudo omniban ban evil.example.com --duration 4h # resolves the host, bans each address sudo omniban unban 1.2.3.4 --via denyhosts sudo omniban allow 10.0.0.5 # add to a backend allowlist sudo omniban sinkhole ads.example.com # /etc/hosts domain null-route (outbound) sudo omniban null-route 203.0.113.0/24 # blackhole route (both directions) sudo omniban undo # roll back the last mutating action ``` 在终端上运行不带参数的 `sudo omniban` 即可进入交互式 TUI,或者 使用 `sudo omniban tui`。每个命令都支持用于脚本化的 `--json` 和用于在不执行的情况下预览精确原生命令的 `--dry-run`。 ### 统一的 ban 列表 涵盖所有工具的所有 ban,并标有真实的所有者和方向。`AlsoSeenIn` 显示了该地址还在哪些地方被强制执行。 ![omniban 封禁视图](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/998f88eb84031656.png) ### 一览后端健康状态 ![omniban 状态视图](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/490da83a51031701.png) ### Unban 通过所属工具的原生路径执行 在 IDS 拥有的 ban 上按 `u` 键将通过该 IDS 将其移除 —— 而不是 删除 IDS 又会重新创建的防火墙规则。 ![omniban 解封确认](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/bdfdd94f89031705.png) ## 安全第一 以 root 身份运行的防火墙管理器必须非常谨慎。omniban 的特性包括: - **防锁死。** 如果没有显式使用 `--force`,它拒绝封禁 你当前的 SSH 客户端 IP、loopback、主机自身的地址、默认网关或你的管理员 allowlist。 - **可逆。** 每个变更操作都会推送到撤销日志(`omniban undo`),并记录在经过脱敏处理的 JSON 审计日志中。 - **非破坏性。** 像 `/etc/hosts`、`hosts.deny` 和持久化 配置等文件在任何修改之前都会进行备份。 - **对作用域诚实。** 外部 namespace(`f2b-*`、`crowdsec-*`、firewalld zones、sshguard 集合)仅供归因读取,绝不写入。 ## 更新 omniban 的更新方式取决于它的安装方式: - **`.deb` / `.rpm`:** 更新由你的包管理器提供 (`apt-get install --only-upgrade omniban`、`dnf upgrade omniban`)。对于软件包,内置的 自更新器是**禁用**的,并会指引你使用此方法。 - **独立二进制文件**(`.tar.gz` 或 `install.sh`):omniban 会自行更新。 在正在运行的二进制文件被原子替换之前,下载内容会根据版本的 `checksums.txt` (SHA-256) 进行校验 (旧的二进制文件将保留为 `.bak`)。 ``` sudo omniban update # update to the latest release sudo omniban update --check # report whether a newer version exists (exit 10 if so) sudo omniban update --enable-timer # opt in to automatic daily updates (systemd) sudo omniban update --disable-timer # turn automatic updates back off ``` `update --check` 在有新版本可用时会返回退出代码 `10`,因此可以完美适配脚本: `if ! omniban update --check; then sudo omniban update; fi`。对于独立安装, `omniban status` 中也会显示被动的“有新版本可用”通知(每天检查一次; 可以在配置中设置 `update_check: false` 或使用 `OMNIBAN_NO_UPDATE_CHECK=1` 来禁用)。 ## 从源码构建 ``` make build && sudo make install # needs Go 1.26+ ``` ## 开发 ``` make all # fmt, vet, lint, test make test # go test -race make coverage-check make e2e # live real-tool end-to-end suite (Docker, privileged) ``` 贡献者约定见 [`AGENTS.md`](AGENTS.md);生产环境标准和 状态见 [`docs/PRODUCTION_READINESS.md`](docs/PRODUCTION_READINESS.md)。CI 运行 依赖于 [`extremeshok/poll-ci`](.poll-ci.yml)。 ## 许可证 MIT。由 Adrian Jon Kriel 编写 :: admin@extremeshok.com
标签:EVTX分析, Go, Ruby工具, TUI, 入侵防御, 日志审计, 网络安全, 防火墙, 隐私保护