extremeshok/omniban
GitHub: extremeshok/omniban
omniban 是一个统一的 Linux 封禁管理器,通过单一 TUI 和 CLI 跨 19 种防火墙、IDS、代理和 WAF 后端查看、搜索和管理 IP 封禁、域名 sinkhole 及 null-route。
Stars: 1 | Forks: 0
# omniban
**适用于所有 Linux 防火墙与 IDS 的统一 ban 管理器。**
[](https://github.com/extremeshok/omniban/releases)
[](LICENSE)
[](go.mod)
[](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)

## 快速开始
**安装(单行命令,独立二进制文件):**
```
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`
显示了该地址还在哪些地方被强制执行。

### 一览后端健康状态

### Unban 通过所属工具的原生路径执行
在 IDS 拥有的 ban 上按 `u` 键将通过该 IDS 将其移除 —— 而不是
删除 IDS 又会重新创建的防火墙规则。

## 安全第一
以 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, 入侵防御, 日志审计, 网络安全, 防火墙, 隐私保护