该模块的功能 #
防火墙是服务器的门:它决定哪些连接进入、哪些被拒绝。在这些机器上,这项工作由 ufw(Ubuntu 的防火墙)完成,而 firewall 模块给你一个方便的操纵杆来操作它,无需记忆 ufw 的语法。
用它你可以一眼看到防火墙的状态(是否活动、默认策略和规则),手动封锁一个给你添麻烦的 IP 或网段,在不再需要时释放该封锁,并开放或关闭端口,让配置与 ufw 实际应用的内容保持同步。
因入侵尝试(SSH 暴力破解等)导致的自动封禁由 fail2ban 自行管理。该模块处理的是你的手动封锁:block、unblock 和 flush 只作用于你手动添加的内容,绝不会干扰 fail2ban 的封禁。
常见任务 #
选择你想做的事。每个方案都已写好命令——只需把 IP 或端口换成你自己的,然后按复制。
1
查看防火墙状态
确认它是否活动、默认策略以及有多少条规则。
通过 SSH 连接到你的服务器并查询摘要:
$ sudo imaxe firewall status要用于脚本?加上 --json,即可获得同样的机器可读信息:
$ sudo imaxe firewall status --json2
封锁一个滥用的 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"--ttl,封锁会在期限到达时自动失效。3
查看我封锁了哪些 IP
回顾你当前生效的手动封锁列表。
列出你手动封锁的 IP 和网段(记住:fail2ban 的封禁不会出现在这里):
$ sudo imaxe firewall blocked4
解封一个 IP
释放一条不再需要的手动封锁。
释放你封锁的那个确切 IP 或网段(与 blocked 中显示的一致):
$ sudo imaxe firewall unblock 203.0.113.105
开放或关闭一个端口
放行一个新服务,或关闭一个不再提供的服务。
开放一个端口(附上注释以便知道它用于什么)。你可以用 --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/tcpfirewall.yml。用 imaxe firewall rules list 加以确认。如果你正通过 SSH 连接,不要关闭 22 端口(SSH):那会让你失去对服务器的访问。为避免这种惊吓,该模块默认保持 22/tcp 允许。另外请记住,flush 会一次性删除你所有的手动封锁。
用法概要 #
imaxe firewall <subcomando> [<ip>|<puerto>] [flags]所有子命令都需要 root 权限(使用 sudo),因为它们操作 ufw 并写入 /etc/imaxe/。为 status、blocked 或 rules 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] 必填 | string | — | 在 block 和 unblock 中要操作的 IP 或 CIDR 网段(如 203.0.113.10 或 203.0.113.0/24)。 |
| <port>[/proto] 必填 | string | — | 在 allow 和 deny 中要操作的端口(如 443 或 443/tcp)。 |
| --reason | string | — | 在 block 中:封锁原因(信息性)。 |
| --ttl | 时长 | 永久 | 在 block 中:封锁时长(如 24h)。默认为永久。 |
| --from | cidr | 任意 | 在 allow/deny 中:将来源限制到某个具体 CIDR。 |
| --comment | string | — | 在 allow 中:规则的描述性注释。 |
| --yes | bool | false | 在 flush 中:无需询问即确认(破坏性操作)。 |
| --json | bool | false | 在 status/blocked/rules list 中:将结果以 JSON 形式输出到 stdout。 |
文件与路径 #
| 路径 | 内容 |
|---|---|
| /etc/imaxe/firewall.yml | 模块配置:allow/deny 与 ufw 保持同步的允许端口。 |
firewall.yml 示例:
allow:
- { port: 22, proto: tcp, comment: "ssh" }
- { port: 443, proto: tcp, comment: "https" }退出码与日志 #
每次执行都会返回一个退出码,你可以用 echo $? 查看——便于在脚本中串联:
调试时实时跟踪状态与规则:
$ 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」的输出发给我们,我们会尽快回复你。