启动器 产品 Bitnami 文档imaxe CLI 博客 联系
imaxe firewall 防火墙 v1.0.0

你的防火墙,尽在掌控

只用一条命令即可查询 ufw 的状态、手动封锁滥用的 IP,以及开放或关闭端口。自动封禁由 fail2ban 完成;这里则用于你的手动封锁和端口规则。

$ imaxe firewall block 203.0.113.10 --reason "abuso" --ttl 24h
版本
v1.0.0
子命令
9
配置
/etc/imaxe/firewall.yml
需要 root
基于
ufw + fail2ban

该模块的功能 #

防火墙是服务器的门:它决定哪些连接进入、哪些被拒绝。在这些机器上,这项工作由 ufw(Ubuntu 的防火墙)完成,而 firewall 模块给你一个方便的操纵杆来操作它,无需记忆 ufw 的语法。

用它你可以一眼看到防火墙的状态(是否活动、默认策略和规则),手动封锁一个给你添麻烦的 IP 或网段,在不再需要时释放该封锁,并开放或关闭端口,让配置与 ufw 实际应用的内容保持同步。

手动封锁,而非自动

因入侵尝试(SSH 暴力破解等)导致的自动封禁由 fail2ban 自行管理。该模块处理的是你的手动封锁:blockunblockflush 只作用于你手动添加的内容,绝不会干扰 fail2ban 的封禁。

快速指南分步任务

常见任务 #

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

1

查看防火墙状态

确认它是否活动、默认策略以及有多少条规则。

通过 SSH 连接到你的服务器并查询摘要:

终端
$ sudo imaxe firewall status

要用于脚本?加上 --json,即可获得同样的机器可读信息:

终端
$ sudo imaxe firewall status --json
你会看到防火墙是否活动、默认策略、规则数量以及你设置了多少条手动封锁。
2

封锁一个滥用的 IP

切断一个正在骚扰你的 IP 或网段的访问。

封锁一个具体的 IP,并记下原因以便日后记起:

终端
$ sudo imaxe firewall block 203.0.113.10 --reason "abuso"

只想要临时封锁?用 --ttl 给它设定一个时长,到期后会自动解除。你也可以用 CIDR 表示法封锁整个网段:

终端
$ sudo imaxe firewall block 203.0.113.10 --reason "abuso" --ttl 24h
$ sudo imaxe firewall block 203.0.113.0/24 --reason "escaneo"
该 IP 或网段将无法再连接到服务器。如果你设置了 --ttl,封锁会在期限到达时自动失效。
3

查看我封锁了哪些 IP

回顾你当前生效的手动封锁列表。

列出你手动封锁的 IP 和网段(记住:fail2ban 的封禁不会出现在这里):

终端
$ sudo imaxe firewall blocked
你会看到每条手动封锁及其原因,若有的话,还有它何时到期。有多余的?跳到解封一个 IP
4

解封一个 IP

释放一条不再需要的手动封锁。

释放你封锁的那个确切 IP 或网段(与 blocked 中显示的一致):

终端
$ sudo imaxe firewall unblock 203.0.113.10
该地址可以重新连接。其余的封锁和 fail2ban 的封禁保持不变。
5

开放或关闭一个端口

放行一个新服务,或关闭一个不再提供的服务。

开放一个端口(附上注释以便知道它用于什么)。你可以用 --from 限制谁能进入:

终端
$ sudo imaxe firewall allow 443/tcp --comment "https"
$ sudo imaxe firewall allow 5432/tcp --from 203.0.113.0/24 --comment "postgres interno"

关闭一个你不再使用的端口:

终端
$ sudo imaxe firewall deny 8080/tcp
规则会应用到 ufw 并反映到 firewall.yml。用 imaxe firewall rules list 加以确认。
关闭端口时要小心

如果你正通过 SSH 连接,不要关闭 22 端口(SSH):那会让你失去对服务器的访问。为避免这种惊吓,该模块默认保持 22/tcp 允许。另外请记住,flush 会一次性删除你所有的手动封锁。

CLI 参考命令、标志与文件

用法概要 #

用法
imaxe firewall <subcomando> [<ip>|<puerto>] [flags]

所有子命令都需要 root 权限(使用 sudo),因为它们操作 ufw 并写入 /etc/imaxe/。为 statusblockedrules list 加上 --json,即可获得适合脚本处理的机器可读输出。

子命令 #

子命令功能相关标志
status防火墙状态:是否活动、默认策略、规则数量和手动封锁。--json
blocked列出手动封锁的 IP/网段(不包含 fail2ban 的封禁)。--json
block手动封锁一个 IP 或网段,可选原因和时长。--reason, --ttl
unblock释放一条手动封锁。不触及 fail2ban 的封禁。
flush删除所有手动封锁(破坏性)。不触及 fail2ban 的封禁。--yes
rules list列出端口规则(允许的端口、来源)。--json
allow开放一个端口并反映到配置中。--from, --comment
deny关闭一个端口并反映到配置中。--from
reload重载 ufw(重新应用其活动规则)。

rules 汇集了端口规则的管理;目前它唯一的子命令是 rules list

参数与标志 #

参数 / 标志类型默认值说明
<ip>[/cidr] 必填stringblockunblock 中要操作的 IP 或 CIDR 网段(如 203.0.113.10203.0.113.0/24)。
<port>[/proto] 必填stringallowdeny 中要操作的端口(如 443443/tcp)。
--reasonstringblock 中:封锁原因(信息性)。
--ttl时长永久block 中:封锁时长(如 24h)。默认为永久。
--fromcidr任意allow/deny 中:将来源限制到某个具体 CIDR。
--commentstringallow 中:规则的描述性注释。
--yesboolfalseflush 中:无需询问即确认(破坏性操作)。
--jsonboolfalsestatus/blocked/rules list 中:将结果以 JSON 形式输出到 stdout

文件与路径 #

路径内容
/etc/imaxe/firewall.yml模块配置:allow/deny 与 ufw 保持同步的允许端口。

firewall.yml 示例:

/etc/imaxe/firewall.yml
allow:
  - { port: 22, proto: tcp, comment: "ssh" }
  - { port: 443, proto: tcp, comment: "https" }

退出码与日志 #

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

0OK操作成功完成。
1ERR未分类的通用错误。请查看日志。
2USAGE参数无效或缺失。
3NOTFOUND指定的 IP 或规则不存在。

调试时实时跟踪状态与规则:

终端
$ sudo imaxe firewall status
$ sudo imaxe firewall rules list

故障排查 #

现象可能原因解决方法
解封时出现 NOTFOUND(退出码 3)IP 与设置的封锁不完全一致(例如缺少 /cidr)。执行 imaxe firewall blocked,原样复制条目用于 unblock
我封锁了一个 IP,但在 unblock 后它仍显示被封禁该封锁是 fail2ban 设置的,不是你设置的。该模块只释放手动封锁;自动封禁由 fail2ban 单独管理。
我开放了一个端口但没有流量进入规则已在 ufw 中,但外部防火墙(安全组)仍是关闭的。imaxe firewall rules list 检查,并在你的云服务商处也开放该端口。
改动规则后我丢失了 SSH 访问22 端口被关闭或受限。通过服务商的控制台访问,并用 imaxe firewall allow 22/tcp 重新允许 22/tcp

Firewall 模块遇到问题了?

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

联系支持