启动器 产品 Bitnami 文档imaxe CLI 博客 联系
imaxe fail2ban 封禁 v1.0.0

封禁尽在掌控,无需碰 fail2ban

只用一条命令即可查询和管理 fail2ban 的封禁:查看哪些 jail 处于活动状态、谁被封禁、手动封禁或解封 IP,并在紧急时刻解除封锁。无需记忆 fail2ban-client 的语法。

$ imaxe fail2ban status
版本
v1.0.0
子命令
7
需要 root
JSON 输出
status · banned · check
后端
fail2ban-client

该模块的功能 #

fail2ban 是守护者,它监视服务器的日志,一旦检测到恶意访问尝试(例如大量 SSH 密码失败),就会自动将肇事 IP 封禁一段时间。每个受监视的服务都组织在一个 jail 中(例如 sshd)。

fail2ban 模块让你在运行时掌控这些封禁,而无需记住 fail2ban-client 的语法:查询 jail 的状态,列出谁被封禁,核查某个具体 IP 是否被封锁,手动封禁或解封,在紧急情况下一次性全部解除封锁,并在变更后重载配置。

开始之前

该模块作用于一个已安装并正在运行的 fail2ban。所有子命令都会查询或修改服务状态,因此需要 root 权限(使用 sudo)。如果你因为自己的 IP 而被挡在门外,请直接跳到紧急解除封锁

快速指南分步任务

常见任务 #

选择你想做的事。每个方案都已写好命令——只需把 IP 或 jail 换成你自己的,然后按复制

1

查看状态与 jail

一眼确认 fail2ban 是否活动以及有多少被封禁。

ubuntu 用户通过 SSH 连接到你的服务器,并查询总体状态:

终端
$ sudo imaxe fail2ban status

想要机器可读的格式,用于脚本或面板?加上 --json

终端
$ sudo imaxe fail2ban status --json
你会看到服务是否活动、jail 列表(如 sshd)以及每个 jail 中被封禁的 IP 数量。
2

查看哪些 IP 被封禁

列出活动的封禁,涵盖所有 jail 或某个具体 jail。

一次列出所有 jail 中所有被封禁的 IP:

终端
$ sudo imaxe fail2ban banned

只关心某一个 jail?把它作为参数指定:

终端
$ sudo imaxe fail2ban banned sshd
你会得到被封锁的 IP 列表。如果其中有合法的,把它交给封禁或解封方案。
3

核查某个 IP 是否被封禁

查明某个具体地址在哪些 jail 中被封锁。

直接查询该 IP;它会告诉你这个 IP 在哪些 jail 中被封禁:

终端
$ sudo imaxe fail2ban check 203.0.113.7
你会立刻知道该 IP 是否被封锁以及在哪些 jail 中。在为报告访问问题的人解封之前,先用它核查。
4

封禁或解封某个 IP

手动封锁一个滥用地址,或释放一个合法用户。

在某个具体 jail 中封禁一个 IP(如果只有一个 jail,会自动推断):

终端
$ sudo imaxe fail2ban ban 203.0.113.7 --jail sshd

封禁了合法的人?一次性把它从所有 jail 中解封:

终端
$ sudo imaxe fail2ban unban 203.0.113.7
变更立即生效。对同一个 IP 使用 imaxe fail2ban check 加以确认。
5

全部解除封锁(紧急)

你被挡在门外了:释放所有 jail 中的所有 IP。

如果你自己的 IP 被困住,需要立刻恢复访问,就把它们全部解封。加上 --yes 可跳过确认:

终端
$ sudo imaxe fail2ban unban-all --yes

更改 jail 配置后,重载它以使其生效:

终端
$ sudo imaxe fail2ban reload
所有 jail 都不再有封禁。这是临时措施:一旦滥用者再次作案,fail2ban 会再次将其封禁。
慎用 unban-all

这是对封禁的破坏性操作:它会让所有 IP 都不再被封锁,包括恶意的。只在紧急情况下用它恢复访问,之后用 imaxe fail2ban status 检查状态。

CLI 参考命令、标志与文件

用法概要 #

用法
imaxe fail2ban <subcomando> [<ip>|<jail>] [--jail JAIL] [flags]

所有子命令都需要 root 权限(使用 sudo),因为它们通过 fail2ban-client 查询或修改 fail2ban 的状态。为 statusbannedcheck 加上 --json,即可获得适合脚本处理的机器可读输出。

子命令 #

子命令功能相关标志
statusfail2ban 状态:是否活动、jail 以及每个 jail 中被封禁的 IP 数量。--json
banned列出被封禁的 IP(所有 jail 或某个具体 jail)。--json
check指出某个 IP 在哪些 jail 中被封禁。--json
ban在某个 jail 中手动封禁一个 IP。--jail
unban将一个 IP 从所有 jail 中解封。
unban-all紧急:将所有 jail 中的全部 IP 解封。--yes
reload重载 fail2ban 配置(校验 jail.local)。

参数与标志 #

参数 / 标志类型默认值说明
<ip> 必填string要操作的 IP。在 checkbanunban 中为必填。
<jail>string全部banned 中,要列出的具体 jail。不带参数则列出所有 jail。
--jailstring自动ban 中,封禁的目标 jail。如果只有一个 jail,会自动推断。
--yesboolfalseunban-all 中,无需询问即确认(对封禁的破坏性操作)。
--jsonboolfalsestatus/banned/check 中,将结果以 JSON 形式输出到 stdout

文件与路径 #

路径内容
/etc/fail2ban/jail.localfail2ban 的本地配置:活动的 jail、封禁时长和阈值。reload 所校验的正是它。
/var/run/fail2ban/fail2ban.sock控制套接字,fail2ban-client 通过它与服务通信。
/var/log/fail2ban.logfail2ban 自身的日志:封禁、解封和重载。

退出码与日志 #

每次执行都会返回一个退出码,你可以用 echo $? 查看——便于在脚本中串联:

0OK操作成功完成。
1ERR未分类的通用错误。请查看日志。
2USAGE参数无效或缺失。
3SERVICEfail2ban 未活动或在套接字上无响应。
4JAIL指定的 jail 不存在或无法推断。
5RELOAD配置未通过校验;未重载。

调试时实时跟踪日志:

终端
$ sudo journalctl -u fail2ban -f
$ sudo tail -f /var/log/fail2ban.log

故障排查 #

现象可能原因解决方法
出现 SERVICE(退出码 3)fail2ban 已停止或套接字无响应。systemctl start fail2ban 启动服务后重试。
出现 JAIL(退出码 4)--jail 指定的 jail 不存在,或存在多个而无法推断。imaxe fail2ban status 查看各 jail,并在 --jail 中指定正确的那个。
出现 RELOAD(退出码 5)jail.local 中存在语法错误。修正 /etc/fail2ban/jail.local 后再次执行 reload
我通过 SSH 被挡在门外你自己的 IP 累计失败并在 sshd 中被封禁。从另一条途径,用 unban 将其解封,或用 unban-all --yes 全部释放。

Fail2ban 模块遇到问题了?

把「imaxe <module> status --json」的输出发给我们,我们会尽快回复你。

联系支持