内核层防火墙 vs 服务防火墙

1. 内核层防火墙

定义:直接运行在 Linux 内核中的网络包过滤机制。

特点

  • 位置:内核空间(Kernel Space)
  • 实现:Netfilter 框架(iptables / nftables)
  • 工作原理:在内核网络协议栈中拦截、检查、修改网络数据包
  • 生效方式:规则直接写入内核,立即生效
  • 持久性:重启后丢失(除非手动保存或通过服务恢复)

示例

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

查看方式

iptables -L -n -v
nft list ruleset

2. 服务防火墙

定义:用户空间的管理工具/服务,用于管理和持久化内核防火墙规则。

特点

  • 位置:用户空间(User Space)
  • 作用:规则管理、持久化、简化配置
  • 工作原理:通过调用内核接口(iptables / nftables 命令)设置规则
  • 生效方式:服务启动时加载规则,运行时通过命令修改

常见服务防火墙

服务说明管理命令
ufwUncomplicated Firewall,Debian/Ubuntu 默认ufw allow 80
firewalldRHEL/CentOS 默认,支持动态规则firewall-cmd --add-port=80/tcp
iptables-persistent保存和恢复 iptables 规则netfilter-persistent save
nftables新一代防火墙框架的服务systemctl start nftables

3. 核心区别对比

维度内核层防火墙服务防火墙
运行位置内核空间用户空间
本质内核中的包过滤机制管理工具 / 守护进程
规则存储内核内存配置文件 + 内核内存
重启后规则丢失服务自动加载规则
性能高(直接处理包)低(仅管理,不处理包)
管理方式命令行直接操作通过服务命令或配置文件
依赖关系独立存在依赖内核防火墙

4. 实际例子说明

场景一:只有内核防火墙,无服务

# 直接添加内核规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 查看规则(内核中)
iptables -L -n

# 重启后规则丢失
# 因为没有服务来恢复规则

场景二:通过服务管理内核规则

# 使用 ufw 服务管理
ufw allow 22/tcp

# ufw 服务会调用 iptables 命令将规则写入内核
ufw status verbose

# 重启后,ufw 服务自动恢复规则

5. 系统状态分析示例

根据检查结果:

iptables -L -n -v          # 有输出(内核规则)
systemctl status ufw       # not found
systemctl status netfilter-persistent  # not found

结论

  • 内核防火墙存在:Netfilter 框架工作正常
  • ⚠️ 存在内核规则:包含 NetAVARK 容器网络规则
  • 无防火墙服务:未安装 ufw / firewalld 等服务
  • 🔄 规则持久化:容器规则由 Podman / Docker 服务管理

系统架构示意图

┌─────────────────────────────────────┐
│         用户空间 (User Space)        │
│  ┌─────────────────────────────┐   │
│  │  无防火墙管理服务            │   │
│  │  (ufw/firewalld未安装)      │   │
│  └─────────────────────────────┘   │
│              ↓                      │
│     通过命令直接操作                 │
│              ↓                      │
├─────────────────────────────────────┤
│         内核空间 (Kernel Space)      │
│  ┌─────────────────────────────┐   │
│  │  Netfilter 框架              │   │
│  │  ┌─────────────────────┐   │   │
│  │  │ iptables 规则:     │   │   │
│  │  │ - INPUT: ACCEPT     │   │   │
│  │  │ - OUTPUT: ACCEPT    │   │   │
│  │  │ - NetAVARK 转发规则 │   │   │
│  │  └─────────────────────┘   │   │
│  └─────────────────────────────┘   │
└─────────────────────────────────────┘

6. 关闭防火墙的正确理解

关闭内核防火墙(清空规则)

# 清空所有规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# 设置默认策略为 ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

关闭服务防火墙

# 停止并禁用服务
systemctl stop ufw
systemctl disable ufw

systemctl stop firewalld
systemctl disable firewalld

7. 重启后规则丢失的原因

规则存储位置

  • 内核规则表位于 RAM(易失性存储)
  • 重启 → 断电 → RAM 清空 → 规则全部丢失

图示

重启前                         重启后
┌─────────────────┐           ┌─────────────────┐
│      RAM        │           │      RAM        │
│  ┌───────────┐  │           │  ┌───────────┐  │
│  │ 内核规则表 │  │  重启     │  │ 内核规则表 │  │
│  │ 有规则     │  │ ───────> │  │ 空         │  │
│  └───────────┘  │           │  └───────────┘  │
└─────────────────┘           └─────────────────┘

8. 服务如何实现持久化

添加规则时

用户执行 ufw deny 80
        ↓
ufw 服务:
  1. 写入配置文件 /etc/ufw/user.rules
  2. 调用 iptables 命令加载到内核
        ↓
内核规则生效

系统重启时

系统启动 → systemd → ufw 服务启动
                        ↓
              读取配置文件 /etc/ufw/user.rules
                        ↓
              调用 iptables 命令加载规则
                        ↓
                  内核规则恢复

各服务配置文件位置

服务配置文件
ufw/etc/ufw/*.rules
firewalld/etc/firewalld/zones/*.xml
iptables-persistent/etc/iptables/rules.v4 / rules.v6
nftables/etc/nftables.conf

9. 手动实现持久化(无服务时)

# 保存当前规则
iptables-save > /root/iptables-backup.rules

# 恢复规则
iptables-restore < /root/iptables-backup.rules

# 开机自动恢复(示例:添加 /etc/rc.local)
iptables-restore < /root/iptables-backup.rules

10. 规则添加方式对比总结

操作方式立即生效重启后持久化方式
直接 iptables 命令❌ 丢失需手动保存
通过 ufw / firewalld✅ 恢复服务自动保存/恢复
容器服务添加✅ 恢复容器服务自动管理
iptables-persistent✅ 恢复netfilter-persistent 服务

关键要点

  1. 内核防火墙始终存在:Linux 内核的 Netfilter 框架无法“关闭”,只能清空规则
  2. 服务只是管理工具:停止服务不代表清空已有规则
  3. 重启规则丢失:直接通过 iptables 添加的规则仅存在于内存,无服务管理则重启后消失
  4. 容器会添加规则:Docker / Podman 等容器工具会自动添加 iptables 规则
  5. 查看真实状态:始终用 iptables -L 查看实际生效的规则,而非仅看服务状态
若系统中无防火墙服务且仅存在容器管理规则,则等同于防火墙处于开放状态(无额外限制规则)。

如果需要,我可以进一步补充:

  • 容器网络(CNI)如何与 iptables 交互
  • 如何彻底清空并锁定 iptables 规则
  • 各类防火墙服务的配置示例

需要我继续扩展哪一部分吗?

标签: none

添加新评论