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)作为防火墙工具。
检查防火墙状态
开启防火墙
禁用防火墙
配置示例
允许 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
|
开启防火墙
Arch Linux
Arch Linux 通常使用 iptables 或 nftables 来管理防火墙。
使用 iptables
检查防火墙规则
添加规则并保存
允许所有来自端口 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
检查防火墙状态
添加规则并保存
允许 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
|
常见问题排查
通过以上命令,你可以在不同的 Linux 系统中有效地开启防火墙并配置规则,从而增强系统的安全性。