在 Linux 系统中,防火墙是保障网络安全的第一道防线。它通过监控和过滤进出网络的数据包,根据预设规则允许或阻止流量,从而有效抵御未授权访问、恶意攻击(如 DDoS)和数据泄露。随着网络环境复杂化,选择合适的防火墙工具并正确配置,对个人用户、服务器管理员和企业运维团队都至关重要。

本文将深入解析当前主流的 Linux 防火墙工具(如 UFW、firewalld、iptables、nftables 等),对比其特性、适用场景和优缺点,并提供详细的配置示例、最佳实践及常见问题解决方案,帮助读者根据实际需求选择和部署防火墙。

目录

主流 Linux 防火墙工具详解

2.1 UFW(Uncomplicated Firewall):简单易用的前端工具

简介

UFW 是 Ubuntu 等 Debian 系发行版的默认防火墙工具,全称“Uncomplicated Firewall”(简易防火墙)。它基于 iptables 构建,通过简化的命令行接口(CLI)隐藏了 iptables 的复杂性,适合初学者和日常快速配置。

核心特性
  • 轻量简洁:命令直观,学习成本低;
  • 基于 iptables:兼容 iptables 规则,但无需直接操作底层链;
  • 默认策略:默认禁用所有入站流量(DEFAULT_DROP),允许所有出站流量(DEFAULT_ALLOW);
  • 支持 IPv4/IPv6:可通过配置文件启用 IPv6 规则。
常用命令示例
# 安装 UFW(部分系统默认预装)
sudo apt install ufw

# 查看状态(默认未启用)
sudo ufw status
# 详细状态(显示规则、策略等)
sudo ufw status verbose

# 允许 SSH 端口(22/tcp)
sudo ufw allow 22/tcp
# 允许 HTTP(80)和 HTTPS(443)端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 拒绝指定 IP 的所有流量
sudo ufw deny from 192.168.1.100

# 启用防火墙(永久生效,重启后保持)
sudo ufw enable
# 禁用防火墙
sudo ufw disable

# 重置所有规则(恢复默认状态)
sudo ufw reset
适用场景
  • 家庭/个人用户桌面系统;
  • 简单服务器(如单节点 Web 服务器);
  • 需要快速配置防火墙的场景。

2.2 firewalld:动态管理的防火墙守护进程

简介

firewalld(防火墙守护进程)是 RHEL 7+CentOS 7+Fedora 等系统的默认防火墙工具,采用“动态规则管理”机制,支持规则实时生效(无需重启服务),并引入“区域(Zone)”概念简化多场景配置。

核心特性
  • 动态规则:修改规则后无需重启服务,通过 --reload 立即生效;
  • 区域(Zone):预设不同安全级别(如 publichomedmz),可快速切换场景;
  • 支持富规则(Rich Rules):允许更复杂的条件匹配(如端口范围、时间、用户组);
  • D-Bus 接口:支持图形化工具(如 firewall-config)和脚本调用。
常用命令示例
# 安装 firewalld(部分系统默认预装)
sudo yum install firewalld # RHEL/CentOS
sudo systemctl start firewalld && sudo systemctl enable firewalld # 启动并开机自启

# 查看当前区域及规则
sudo firewall-cmd --list-all # 显示默认区域详情
sudo firewall-cmd --get-active-zones # 查看活跃区域

# 添加临时规则(重启后失效)
sudo firewall-cmd --add-port=8080/tcp # 允许 TCP 8080 端口
sudo firewall-cmd --add-service=http # 允许 HTTP 服务(对应 80/tcp)

# 添加永久规则(需 --permanent,重启后生效)
sudo firewall-cmd --add-port=3306/tcp --permanent # 允许 MySQL 端口(3306/tcp)
sudo firewall-cmd --reload # 重载规则使永久规则生效

# 移除规则
sudo firewall-cmd --remove-service=http --permanent
sudo firewall-cmd --reload

# 切换区域(如将 eth0 网卡加入 dmz 区域)
sudo firewall-cmd --zone=dmz --add-interface=eth0 --permanent
适用场景
  • 多网络环境切换(如笔记本在家庭/办公网络间移动);
  • 需要动态调整规则的服务器(如频繁变更端口的应用);
  • RHEL/CentOS 生态的生产环境。

2.3 iptables:传统底层防火墙框架

简介

iptables 是 Linux 内核自带的 传统防火墙框架,自 2.4 内核起集成,通过操作内核 netfilter 模块实现流量过滤。它直接管理“链(Chain)”和“规则(Rule)”,功能强大但命令复杂,是 UFW、firewalld 等工具的底层依赖。

核心概念
  • 链(Chain):预设规则集合,包括 INPUT(入站)、OUTPUT(出站)、FORWARD(转发)等;
  • 规则(Rule):由“匹配条件”和“动作”组成(如 -p tcp --dport 22 匹配 TCP 22 端口,-j ACCEPT 允许通过);
  • 表(Table):规则的逻辑分组,默认使用 filter 表(负责过滤),其他表如 nat(网络地址转换)、mangle(数据包修改)等。
常用命令示例
# 查看当前规则(默认 filter 表)
sudo iptables -L -n -v # -n 数字显示 IP/端口,-v 详细信息

# 添加规则到 INPUT 链(允许 SSH 入站)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # -A 追加到链尾

# 允许已建立的连接(防止 SSH 连接被断开)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 拒绝所有其他入站流量(默认策略)
sudo iptables -P INPUT DROP # -P 设置链的默认策略(DROP/ACCEPT)

# 删除规则(需指定链和规则序号,通过 iptables -L --line-numbers 查看序号)
sudo iptables -D INPUT 3 # 删除 INPUT 链第 3 条规则

# 保存规则(Debian 系使用 iptables-save,RHEL 系使用 service iptables save)
sudo iptables-save > /etc/iptables/rules.v4 # 保存 IPv4 规则
注意事项
  • iptables 规则默认保存在内存中,重启后丢失,需手动保存(如通过 iptables-save);
  • 规则顺序至关重要:前序规则优先匹配,避免将 DROP 规则放在 ACCEPT 规则前;
  • 适合高级用户,需深入理解网络协议和内核机制。

2.4 nftables:下一代 Linux 防火墙框架

简介

nftables 是 Linux 内核 3.13+ 引入的 下一代防火墙框架,旨在替代 iptables。它解决了 iptables 的性能瓶颈(如规则遍历效率低),并统一了 iptables/ip6tables/arptables 等工具的功能,支持更灵活的规则语法。

核心特性
  • 性能优化:使用“集合(Set)”和“映射(Map)”减少规则数量,提升匹配效率;
  • 统一框架:支持 IPv4/IPv6/ARP 协议,无需单独工具(如 ip6tables);
  • 高级语法:支持条件判断(if...else)、变量、正则表达式等;
  • 兼容性:可通过 iptables-translateiptables 规则转换为 nftables 格式。
常用命令示例
# 安装 nftables(部分系统默认预装)
sudo apt install nftables # Debian/Ubuntu
sudo systemctl start nftables && sudo systemctl enable nftables # 启动服务

# 创建表和链(nftables 需先定义表和链)
sudo nft add table inet filter # inet 表示同时支持 IPv4/IPv6
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; } # 入站链,默认 DROP

# 添加规则(允许 SSH 和 HTTP)
sudo nft add rule inet filter input tcp dport 22 accept # SSH(22/tcp)
sudo nft add rule inet filter input tcp dport {80, 443} accept # HTTP/HTTPS(80/443)

# 查看规则
sudo nft list ruleset

# 保存规则(自动保存到 /etc/nftables.conf)
sudo nft list ruleset > /etc/nftables.conf
适用场景
  • 高性能服务器(如高并发 Web 服务);
  • 需要复杂规则(如端口范围、IP 段匹配)的场景;
  • 新部署的 Linux 系统(推荐优先使用 nftables 替代 iptables)。

2.5 其他工具:Shorewall 与 CSF

Shorewall
  • 简介:基于 iptables/nftables 的高级防火墙配置工具,通过文本配置文件(如 /etc/shorewall/rules)定义规则,适合复杂网络拓扑(如多网卡、VLAN);
  • 特点:支持 NAT、端口转发、负载均衡,适合企业级场景;
  • 示例:编辑 /etc/shorewall/rules 添加 ACCEPT net $FW tcp 22 允许外部网络访问防火墙($FW)的 SSH 端口。
CSF(ConfigServer Security & Firewall)
  • 简介:面向服务器的集成安全工具,基于 iptablesip6tables,包含防火墙、入侵检测(如 SSH 暴力破解防护)、日志分析等功能;
  • 特点:支持 Web 管理界面(需搭配 LFD 守护进程),适合无复杂网络知识的服务器管理员;
  • 适用场景:共享主机(VPS)、Web 服务器(如 cPanel 环境)。

主流防火墙工具对比

特性 UFW firewalld iptables nftables
底层依赖 iptables iptables/nftables 内核 netfilter 内核 netfilter
易用性 ★★★★★(极简 CLI) ★★★★☆(区域+富规则) ★★☆☆☆(复杂语法) ★★★☆☆(现代语法)
动态规则 需重启服务 支持(无需重启) 需重启服务 支持(实时生效)
性能 中等(基于 iptables) 中等 低(规则多时有瓶颈) 高(集合/映射优化)
默认系统 Ubuntu/Debian RHEL/CentOS/Fedora 无(需手动安装) 新系统(如 Fedora 32+)
学习曲线 平缓 适中 陡峭 适中
适用场景 个人/简单服务器 动态环境/多区域 高级定制/传统系统 高性能/新部署系统

Linux 防火墙最佳实践

1. 默认策略:拒绝所有,允许必要

  • 入站规则:默认设置为 DROP(拒绝所有未明确允许的流量);
  • 出站规则:默认可设为 ACCEPT,但敏感场景(如服务器)建议仅允许必要出站(如 DNS、NTP、业务端口)。

2. 最小权限原则

  • 仅开放业务必需的端口(如 Web 服务器开放 80/443,数据库服务器开放 3306 且限制来源 IP);
  • 避免使用 0.0.0.0/0(允许所有 IP),优先通过 -s 192.168.1.0/24 限制来源网段。

3. 规则顺序与逻辑

  • 先允许“已建立的连接”(如 ESTABLISHED,RELATED 状态),避免 SSH/HTTP 连接被中断;
  • 具体规则(如允许 22/tcp)放在通用规则(如拒绝所有)之前。

4. 日志审计

  • 启用防火墙日志(如 UFW 配置 LOGLEVEL=lowfirewalld 添加 --log=yes),定期检查 /var/log/ufw.log/var/log/firewalld 排查异常流量;
  • 结合工具如 fail2ban 自动封禁恶意 IP(如多次 SSH 登录失败)。

5. 规则持久化

  • 确保规则在系统重启后不丢失(UFW 自动持久化,firewalld--permanentiptablesiptables-save)。

6. 定期更新与测试

  • 保持防火墙工具及内核更新(修复安全漏洞);
  • 修改规则前先在测试环境验证,避免生产环境断网(可设置规则有效期,如 firewalld --timeout=300 临时生效 5 分钟)。

常见场景配置示例

5.1 家庭/个人用户场景

需求:允许 SSH(远程管理)、Web 浏览(80/443)、文件共享(Samba,139/445),拒绝其他入站流量。

工具选择:UFW(简单易用)。

# 启用 UFW 并设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允许必要端口
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow samba # Samba 服务(自动映射 139/445)

# 启用防火墙
sudo ufw enable
sudo ufw status verbose # 验证规则

5.2 服务器场景(Web/数据库)

需求:Web 服务器(80/443)、MySQL 数据库(3306,仅允许应用服务器 IP 访问),拒绝其他入站。

工具选择nftables(高性能)。

# 创建表和链
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }

# 允许已建立连接和回环接口
sudo nft add rule inet filter input iif lo accept # 回环接口(lo)
sudo nft add rule inet filter input ct state {established, related} accept

# 允许 Web 端口(80/443)
sudo nft add rule inet filter input tcp dport {80, 443} accept

# 允许 MySQL 端口(仅允许应用服务器 10.0.0.10 访问)
sudo nft add rule inet filter input ip saddr 10.0.0.10 tcp dport 3306 accept

# 保存规则
sudo nft list ruleset > /etc/nftables.conf

5.3 云环境/容器场景

需求:Docker 容器需开放 8080 端口,同时限制宿主机仅允许云平台内部流量(如 VPC 网段)。

工具选择firewalld(动态规则+区域隔离)。

# 创建自定义区域(如 cloud-zone)
sudo firewall-cmd --new-zone=cloud-zone --permanent
sudo firewall-cmd --zone=cloud-zone --set-target=DROP --permanent # 默认拒绝

# 允许 VPC 网段(如 172.16.0.0/12)访问容器端口 8080
sudo firewall-cmd --zone=cloud-zone --add-source=172.16.0.0/12 --permanent
sudo firewall-cmd --zone=cloud-zone --add-port=8080/tcp --permanent

# 将 Docker 网卡(docker0)加入 cloud-zone
sudo firewall-cmd --zone=cloud-zone --add-interface=docker0 --permanent

# 重载规则
sudo firewall-cmd --reload

故障排查与规则持久化

故障排查常用命令

# 查看防火墙状态
sudo ufw status # UFW
sudo firewall-cmd --state # firewalld
sudo iptables -L -n # iptables
sudo nft list ruleset # nftables

# 查看防火墙日志
tail -f /var/log/ufw.log # UFW
tail -f /var/log/firewalld # firewalld
dmesg | grep -i 'iptables\|nftables' # 内核级日志

# 测试端口连通性(从外部机器)
telnet 目标IP 端口号 # 如 telnet 192.168.1.100 22
nc -zv 目标IP 端口号 # nc(netcat)工具

规则持久化方法

  • UFW:规则自动保存在 /etc/ufw/user.rules,无需额外操作;
  • firewalld:添加规则时需加 --permanent,并执行 firewall-cmd --reload
  • iptables:Debian 系使用 iptables-save > /etc/iptables/rules.v4,RHEL 系使用 service iptables save
  • nftables:规则保存在 /etc/nftables.conf,通过 nft -f /etc/nftables.conf 加载。

结论

Linux 防火墙工具各有侧重:UFW 适合初学者和简单场景,firewalld 适合动态多区域环境,iptables 适合传统系统和高级定制,nftables 是未来趋势(高性能、现代语法)。选择时需结合场景(个人/服务器/云)、性能需求和学习成本,核心原则是“默认拒绝、最小权限、规则清晰”。通过本文的最佳实践和示例,读者可快速搭建安全可靠的 Linux 防火墙。

参考资料

  1. UFW 官方文档
  2. firewalld 官方指南
  3. iptables 维基百科
  4. nftables 官方手册
  5. Red Hat Enterprise Linux 防火墙指南
  6. Debian iptables 持久化配置
    转载:https://geek-blogs.com/blog/best-linux-firewall/
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐