防火墙IP封禁
2026/6/30大约 5 分钟
防火墙IP封禁
功能简介
防火墙IP封禁提供操作系统级别的 IP 封禁能力,性能优于应用层黑名单,适合需要完全屏蔽的恶意 IP。
与应用层黑名单不同,防火墙IP封禁直接在操作系统防火墙层面阻断流量,被封禁的 IP 在到达 WAF 应用之前即被拦截。
页面顶部提供 4 个统计卡片,实时展示当前封禁规则概况:总数、已生效、已失效、已过期。
前置条件
该功能依赖操作系统自带的防火墙,因此对运行环境有要求:
| 操作系统 | 依赖 |
|---|---|
| Linux | 已安装 iptables(同时需要 iptables-save),且 SamWaf 进程有操作 iptables 的权限(通常需 root)。 |
| Windows | 已开启 Windows 防火墙(域 / 专用 / 公用任一配置文件启用即可)。 |
| macOS | 已启用 pf 防火墙(sudo pfctl -e),且以 root 身份运行。 |
进入页面时,SamWaf 会自动探测当前环境是否具备上述条件。若不具备,页面顶部会显示一条黄色提示,说明具体原因,同时 新建防火墙IP封禁 / 批量添加 / 同步规则 按钮变为不可点击,列表中的 启用 操作也会隐藏。 已有记录仍可正常查看、禁用和删除(此时只清理管理端记录,不会去操作系统防火墙)。
容器(Docker)部署
在容器中使用该功能,需要同时满足三个条件,缺一不可:
- 镜像内有 iptables。SamWaf 官方镜像已内置;若自行构建的镜像基于精简版 Alpine,需要
apk add --no-cache iptables。 - 容器具备
NET_ADMIN权限,否则即使装了 iptables 也会因权限不足而失败。 - 容器与宿主机共享网络命名空间(
--network host),否则防火墙规则只写入容器自身的网络命名空间,对宿主机的流量不生效。
docker run 示例:
docker run -d --name samwaf-instance \
--cap-add=NET_ADMIN \
--network host \
-v ./conf:/app/conf -v ./data:/app/data -v ./logs:/app/logs -v ./ssl:/app/ssl \
samwaf/samwafdocker-compose.yml 中对应的写法:
services:
samwaf-instance:
image: samwaf/samwaf
cap_add:
- NET_ADMIN
network_mode: host注意
使用 network_mode: host 时不能再配置 ports 端口映射与自定义 networks,容器会直接使用宿主机网络。
提示
如果无法满足上述容器条件,可以改用 IP黑名单 在 WAF 应用层拦截,功能不受运行环境限制。
适用场景
- 需要在系统层面彻底屏蔽某些恶意 IP,而不仅在应用层拦截。
- 批量导入一批已知的恶意 IP 或 IP 段。
- 配合自动封禁机制,临时或长期封禁触发规则的来源 IP。
操作步骤
新建单个封禁
- 点击页面左上角的 新建防火墙IP封禁。
- 在弹窗中选择 网站,填写 IP地址、封禁原因,并选择 封禁类型。
- 如需设置 过期时间,选择具体时间点;留空表示永久封禁。
- 可在 备注 中补充说明,点击 确定 保存。
批量添加
- 点击 批量添加 按钮。
- 在 IP列表 文本框中每行填写一个 IP 地址,支持单个 IP 或 CIDR 格式。
- 选择 网站,填写 封禁原因,选择 封禁类型,并补充 备注。
- 点击 确定 一次性批量封禁。
启用 / 禁用
- 在列表操作列中,状态为 已失效 的记录可点击 启用;状态为 已生效 的记录可点击 禁用。
同步规则
- 点击 同步规则,将管理端的封禁规则同步到操作系统防火墙。
清理过期
- 点击 清理过期,清除所有已经过期的封禁记录。
编辑 / 删除 / 批量删除
- 在操作列点击 编辑 修改单条规则,点击 删除 删除单条规则。
- 勾选多条记录后点击 批量删除 一次删除多条。
字段说明
| 字段 | 说明 |
|---|---|
| 网站 | 该封禁规则所属的网站。 |
| IP地址 | 要封禁的 IP,支持单个 IP 或 CIDR 格式,如:192.168.1.100 或 192.168.1.0/24。 |
| IP列表 | 批量添加时使用,每行一个 IP 地址,支持单个 IP 或 CIDR 格式。 |
| 封禁原因 | 记录封禁原因,便于后续追溯。 |
| 封禁类型 | 手动、自动、临时三种。 |
| 状态 | 已生效、已失效、待生效。 |
| 过期时间 | 封禁到期时间,留空(或为 0)表示永久封禁;已超时的记录显示为已过期。 |
| 备注 | 自定义补充说明。 |
封禁类型
| 类型 | 说明 |
|---|---|
| 手动 | 由管理员手工添加的封禁。 |
| 自动 | 由系统自动触发产生的封禁。 |
| 临时 | 临时性的封禁。 |
状态
| 状态 | 说明 |
|---|---|
| 已生效 | 封禁规则已在系统层面生效。 |
| 已失效 | 封禁规则已被禁用,不再生效。 |
| 待生效 | 封禁规则尚未生效。 |
常见问题
- 填写 IP 后未立即拦截? 可点击 同步规则,将规则同步到操作系统防火墙。
- 永久封禁如何设置? 新建或编辑时将过期时间留空即可,列表中会显示为 永久。
- 过期记录如何清理? 点击顶部的 清理过期 按钮一键清除。
- 按钮全部置灰,提示"当前环境不支持系统防火墙封禁"? 说明当前运行环境不满足前置条件。提示语中会给出具体原因,常见的有:Linux 未安装
iptables、当前进程没有操作 iptables 的权限(需 root)、Windows 防火墙未开启。容器部署请按上文补齐 iptables、NET_ADMIN权限与--network host。 - 在容器里封禁成功了,但恶意 IP 还是能访问? 多半是容器没有使用
--network host。此时规则只写进了容器自己的网络命名空间,对宿主机进来的流量没有作用。
