Linux 防火墙配置与安全策略管理完整指南

Linux 防火墙是系统安全防护的第一道防线,控制网络访问和流量过滤。本指南涵盖主流Linux发行版的防火墙配置(UFW/Firewalld/iptables/nftables)、安全策略设计和最佳实践,适用于生产环境的安全加固和网络访问控制。

Linux 防火墙架构

防火墙技术演进

传统方案(1990s-2010):
┌─────────────────────────────────┐
│ iptables │
│ - 规则链管理 │
│ - 包过滤 │
│ - NAT功能 │
│ - 复杂规则配置 │
└─────────────────────────────────┘

现代方案(2010-现在):
┌─────────────────────────────────┐
│ nftables │
│ - 统一语法 │
│ - 性能优化 │
│ - 集合/映射 │
│ - 柔性规则 │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ Firewalld (RHEL/CentOS) │
│ - Zone概念 │
│ - 动态管理 │
│ - 服务抽象 │
│ - 图形界面 │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ UFW (Ubuntu/Debian) │
│ - 简化配置 │
│ - 应用规则 │
│ - 状态管理 │
│ - 易用性优先 │
└─────────────────────────────────┘

防火墙方案对比

防火墙类型 适用系统 配置复杂度 功能完整性 生产推荐
iptables 全系统 完整 传统系统
nftables 新系统 完整 现代内核
Firewalld RHEL/CentOS 丰富 企业首选
UFW Ubuntu/Debian 基础 快速部署

防火墙核心概念

概念 说明 生产应用
Zone Firewalld安全区域 网络信任级别
Chain iptables规则链 INPUT/OUTPUT/FORWARD
Rule 过滤规则 源/目标/端口/协议
Policy 默认策略 ACCEPT/DROP/REJECT
Service 服务定义 预定义端口集合

防火墙安全策略

安全区域设计(Firewalld):
┌─────────────────────────────────┐
│ trusted (信任) │ 允许所有流量
│ └─────────────────────────────┐│
│ home/work (家庭/工作) │ 允许SSH+常用服务
│ └─────────────────────────────┐│
│ public (公共) │ 仅允许SSH
│ └─────────────────────────────┐│
│ block/drop (阻止) │ 拒绝所有流量
└─────────────────────────────────┘

规则优先级:
┌─────────────────────────────────┐
│ 1. 直接规则 (Direct Rules) │
│ 2. 富规则 (Rich Rules) │
│ 3. 服务规则 (Service Rules) │
│ 4. 端口规则 (Port Rules) │
│ 5. 默认策略 (Default Policy) │
└─────────────────────────────────┘

生产安全最佳实践

实践要点 说明 价值
默认拒绝 默认策略DROP 最小权限原则
端口最小化 仅开放必需端口 减少攻击面
日志记录 启用拒绝日志 安全审计
规则审计 定期规则检查 策略维护
备份配置 规则定期备份 灾难恢复

Ubuntu/Debian 系统

Ubuntu 和 Debian 系统默认使用 ufw(Uncomplicated Firewall)作为防火墙工具。

检查防火墙状态

sudo ufw status

开启防火墙

sudo ufw enable

禁用防火墙

sudo ufw disable

配置示例

允许 SSH 连接:

sudo ufw allow ssh

CentOS/RHEL 系统

CentOS 和 RHEL 系统默认使用 firewalld 作为防火墙工具。

检查防火墙状态

sudo systemctl status firewalld

开启防火墙

sudo systemctl start firewalld
sudo systemctl enable firewalld

禁用防火墙

sudo systemctl stop firewalld
sudo systemctl disable firewalld

配置示例

允许 HTTP 服务:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

openSUSE 系统

openSUSE 系统默认使用 firewalld,但某些版本可能使用 SuSEfirewall2

使用 firewalld

检查防火墙状态

sudo systemctl status firewalld

开启防火墙

sudo systemctl start firewalld
sudo systemctl enable firewalld

配置示例

允许 HTTPS 服务:

sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

使用 SuSEfirewall2

检查防火墙状态

sudo SuSEfirewall2 status

开启防火墙

sudo SuSEfirewall2 start

Arch Linux

Arch Linux 通常使用 iptablesnftables 来管理防火墙。

使用 iptables

检查防火墙规则

sudo iptables -L

添加规则并保存

允许所有来自端口 22 的连接:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables-save > /etc/iptables/iptables.rules

开启防火墙

sudo systemctl start iptables
sudo systemctl enable iptables

使用 nftables

检查防火墙状态

sudo nft list ruleset

添加规则并保存

允许 HTTP 流量:

sudo nft add rule ip filter input tcp dport 80 accept
sudo nft list ruleset > /etc/nftables.conf

启用 nftables 服务

sudo systemctl start nftables
sudo systemctl enable nftables

常见问题排查

  • 端口未生效
    确保规则已永久保存并重新加载防火墙配置。

    sudo ufw reload  # 适用于 ufw
    sudo firewall-cmd --reload # 适用于 firewalld
  • 服务未运行
    确保防火墙服务已启动并设置为开机自启。

    sudo systemctl enable firewalld
    sudo systemctl start firewalld

通过以上命令,你可以在不同的 Linux 系统中有效地开启防火墙并配置规则,从而增强系统的安全性。