// Linux · 2025-06-26

你可能不熟知的Linux防火墙工具:UFW、Firewalld与nftables

引言

在Linux系统中,防火墙如同大厦的门禁系统,保护网络免受未经授权的“访客”(数据包)侵扰。我们在上一篇文章深入探讨了iptables作为“门禁设置软件”的强大功能(详见iptables详解),而更早的文章则介绍了Linux防火墙的整体框架(详见Linux防火墙概述)。然而,随着网络环境的复杂化,iptables的语法复杂性和性能瓶颈促使新一代工具应运而生。本文将聚焦三款重要的Linux防火墙工具——UFW、Firewalld和nftables,通过门禁系统的比喻,详细讲解它们的特点、配置方法和应用场景,并对Linux防火墙工具进行总结综述,帮助读者选择适合自己的安全方案。

一、UFW:简化的门禁管理

1.1 UFW概述

UFW(Uncomplicated Firewall,未复杂的防火墙)是iptables的简化前端,专为初学者设计。就像门禁系统中的“快捷设置面板”,UFW用简单的命令代替了iptables的复杂语法,让管理员无需深入了解Netfilter也能配置基本规则。UFW在Ubuntu等发行版中默认集成,适合个人服务器或小型网络环境。

UFW的核心特点包括:

  • 简单易用:命令直观,适合新手。
  • 基于iptables:后台仍生成iptables规则,确保兼容性。
  • 预定义服务:支持直接按服务名(如“http”)配置。

1.2 UFW的工作原理

UFW通过简化iptables的表和链,提供用户友好的接口。例如,允许SSH访问的UFW命令:

sudo ufw allow ssh

实际上生成了iptables规则:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

这就像用门禁面板一键设置“允许SSH门卡”,而实际检查仍由Netfilter完成。

1.3 UFW的基本配置

以下是常见UFW配置任务,假设在一台Ubuntu 22.04服务器(IP:192.168.1.10)上操作。

任务1:启用UFW并允许SSH

sudo ufw allow ssh
sudo ufw enable
  • 说明:打开SSH门(22端口),并启动门禁系统。
  • 测试:从另一主机SSH连接,应成功。

任务2:允许HTTP和HTTPS

sudo ufw allow http
sudo ufw allow https
  • 说明:开放80和443端口,允许Web访客。
  • 测试:访问http://192.168.1.10,应显示页面。

任务3:限制特定IP

sudo ufw allow from 192.168.1.100 to any port 22
sudo ufw deny from 192.168.1.200
  • 说明:允许VIP访客(192.168.1.100)访问SSH,拒绝可疑访客(192.168.1.200)。
  • 测试:192.168.1.100可SSH,192.168.1.200被拒。

任务4:查看规则

sudo ufw status numbered
  • 输出:列出门禁规则,如同查看权限列表。

任务5:删除规则

sudo ufw delete 2
  • 说明:删除编号为2的规则。

1.4 UFW的高级功能

尽管UFW以简单著称,仍支持一些高级配置:

  • 限制连接速率:防止SSH暴力破解:

    sudo ufw limit ssh
    • 说明:限制每分钟连接频率,如同限制刷卡次数。
  • 日志记录:记录被拒绝的访客:

    sudo ufw logging on
    • 说明:日志存储在/var/log/ufw.log,便于监控。

1.5 UFW的优缺点

  • 优点:
    • 简单易学,适合初学者。
    • 与iptables无缝集成,规则可查看和扩展。
    • 预定义服务(如“http”)提高效率。
  • 缺点:
    • 功能有限,不支持复杂NAT或自定义链。
    • 不适合动态或大规模网络环境。

1.6 适用场景

UFW适合个人服务器、开发环境或小型网络。例如,保护一台运行WordPress的Ubuntu服务器,只需几条UFW命令即可配置HTTP和SSH访问,轻松实现基本安全。

二、Firewalld:动态的门禁管理

2.1 Firewalld概述

Firewalld是CentOS、RHEL等发行版的默认防火墙工具,设计目标是支持动态配置和复杂网络环境。它就像一个“智能门禁管理系统”,通过“区域”(zones)和“服务”概念,灵活管理多个网络接口的规则。Firewalld基于Netfilter,支持iptables和nftables后端(CentOS 8起默认使用nftables)。

Firewalld的核心特点包括:

  • 动态配置:无需重启即可应用规则。
  • 区域管理:为不同网络接口设置不同信任级别。
  • 服务导向:按服务(如“http”)定义规则。

2.2 Firewalld的工作原理

Firewalld将网络接口分配到“区域”,每个区域有独立的规则集。例如,“public”区域适合外部网络,“internal”区域适合内网。规则通过firewall-cmd命令配置,生成Netfilter规则。例如:

sudo firewall-cmd --zone=public --add-port=80/tcp

相当于为“公共前门”开放80端口。

2.3 Firewalld的基本配置

以下是常见Firewalld配置任务,假设在一台CentOS 8服务器(IP:192.168.1.10,接口eth0和eth1)上操作。

任务1:启用Firewalld并设置默认区域

sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --set-default-zone=public
  • 说明:启动门禁系统,将eth0分配到“公共区域”。

任务2:允许HTTP和SSH服务

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload
  • 说明:为公共区域开放HTTP和SSH门,持久化配置。
  • 测试:访问http://192.168.1.10,SSH连接,应成功。

任务3:为不同接口设置不同区域

sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --zone=internal --add-service=ssh --permanent
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
  • 说明:eth1为内网接口,仅允许SSH;eth0为公网接口,允许HTTP。
  • 测试:eth1只接受SSH,eth0接受HTTP。

任务4:限制特定IP

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept' --permanent
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.200" reject' --permanent
sudo firewall-cmd --reload
  • 说明:允许VIP访客(192.168.1.100)访问SSH,拒绝192.168.1.200。
  • 测试:192.168.1.100可SSH,192.168.1.200被拒。

任务5:查看规则

sudo firewall-cmd --list-all --zone=public
  • 说明:列出公共区域的门禁规则。

2.4 Firewalld的高级功能

  • 直接规则:直接操作Netfilter规则:

    sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPT
    • 说明:类似iptables的底层操作。
  • 日志记录:记录被拒绝的流量:

    sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" log prefix="DROPPED: " level="warning" limit value="5/m" reject' --permanent
    sudo firewall-cmd --reload
    • 说明:限制日志频率,存储在/var/log/messages。
  • 动态切换区域:根据网络环境调整:

    sudo firewall-cmd --zone=dmz --change-interface=eth0
    sudo firewall-cmd --reload

2.5 Firewalld的优缺点

  • 优点:
    • 动态配置,适合云和容器环境。
    • 区域和服务概念,管理复杂网络更高效。
    • 支持iptables和nftables后端,兼容性强。
  • 缺点:
    • 学习曲线稍高,配置比UFW复杂。
    • 依赖D-Bus,可能增加系统开销。

2.6 适用场景

Firewalld适合动态网络环境,如云服务器、虚拟化平台或多接口设备。例如,在一台运行Kubernetes的CentOS服务器上,Firewalld可为不同Pod分配区域,确保内外网隔离。

三、nftables:下一代门禁系统

3.1 nftables概述

nftables是iptables的继任者,于2014年引入,旨在提供更高效、简洁的防火墙框架。它就像“下一代门禁控制器”,统一了iptables的filter、nat、mangle表,支持集合(sets)和映射(maps)等高级功能。nftables完全重构了Netfilter的规则处理逻辑,性能更优,语法更简洁。

nftables的核心特点包括:

  • 统一框架:单一张表取代多个表。
  • 高性能:内核优化,处理大量规则更快。
  • 动态更新:支持实时添加规则,如黑名单。

3.2 nftables的工作原理

nftables用单一的“表”包含“链”和“规则”,链与Netfilter钩子(PREROUTING、INPUT等)对应。例如:

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 tcp dport 22 accept

这相当于为“入口检查点”设置规则,允许SSH访客。

3.3 nftables的基本配置

以下是常见nftables配置任务,假设在一台Debian 11服务器(IP:192.168.1.10)上操作。

任务1:创建过滤表和链

sudo nft add table inet my_table
sudo nft add chain inet my_table input { type filter hook input priority 0 \; policy drop \;}
  • 说明:创建门禁表,设置默认拒绝策略。

任务2:允许SSH和HTTP

sudo nft add rule inet my_table input tcp dport 22 accept
sudo nft add rule inet my_table input tcp dport 80 accept
  • 说明:开放SSH和HTTP门。
  • 测试:SSH连接和Web访问应成功。

任务3:限制特定IP

sudo nft add set inet my_table blacklist { type ipv4_addr \; }
sudo nft add rule inet my_table input ip saddr @blacklist drop
sudo nft add element inet my_table blacklist { 192.168.1.200 }
  • 说明:创建黑名单,阻止192.168.1.200访客。
  • 测试:192.168.1.200无法访问。

任务4:日志记录

sudo nft add rule inet my_table input log prefix \"DROPPED: \" drop
  • 说明:记录被拒绝的访客,日志在/var/log/messages中。

任务5:持久化规则

保存规则:

sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable nftables
  • 说明:确保门禁规则开机加载。

3.4 nftables的高级功能

  • 集合与映射:动态管理IP地址:

    sudo nft add set inet my_table whitelist { type ipv4_addr \; flags dynamic \; }
    sudo nft add rule inet my_table input ip saddr @whitelist accept
    sudo nft add element inet my_table whitelist { 192.168.1.100 }
    • 说明:实时更新白名单。
  • 计数器与统计:监控流量:

    sudo nft add rule inet my_table input counter accept
    sudo nft list table inet my_table
    • 说明:查看访客计数器。
  • NAT配置:

    sudo nft add table inet my_table
    sudo nft add chain inet my_table nat_post { type nat hook postrouting priority 100 \; }
    sudo nft add rule inet my_table nat_post ip saddr 192.168.1.0/24 masquerade
    • 说明:为内网访客配置伪装。

3.5 nftables的迁移

nftables不兼容iptables,可使用iptables-translate转换规则。例如,iptables规则:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

转换为:

sudo nft add rule inet filter input tcp dport 22 accept

3.6 优缺点

  • 优点:
    • 语法简洁,性能高效。
    • 支持集合和动态更新,适合大规模网络。
    • 统一框架,减少维护成本。
  • 缺点:
    • 不兼容iptables,迁移成本高。
    • 生态成熟度不如iptables。
    • 学习曲线对于习惯iptables的用户稍高。

3.6 适用场景

nftables适合高性能需求或现代环境,如云原生、容器化平台。例如,在Docker环境中,nftables可为每个容器动态分配规则集。

四、工具对比:选择合适的门禁系统

工具 特点 优点 缺点 适用场景
iptables 功能全面,基于表和链 成熟生态,广泛兼容 语法复杂,性能瓶颈 传统服务器、网关设备
UFW 简化iptables前端 简单易用,适合新手 功能有限,不支持复杂配置 个人服务器、开发环境
Firewalld 动态区域管理 动态配置,适合复杂网络 依赖D-Bus,学习曲线稍高 云服务器、虚拟化环境
nftables 下一代统一框架 高性能,语法简洁 不兼容iptables,生态较新 高流量服务器、云原生环境
  • iptables:功能最全面,但配置复杂,适合需要深度定制的场景。
  • UFW:最简单,适合不想折腾的用户,但无法应对复杂需求。
  • Firewalld:动态灵活,适合多接口或云环境,但配置稍复杂。
  • nftables:性能最佳,未来潜力大,适合愿意迁移的现代系统。

五、应用案例

5.1:UFW保护Web服务器

场景:Ubuntu服务器(192.168.1.10)运行Nginx,需允许HTTP并限制SSH访问。 配置:

sudo ufw allow http
sudo ufw limit ssh
sudo ufw deny from 192.168.1.200
sudo ufw enable
  • 测试:HTTP访问成功,192.168.1.200无法SSH。

5.2:Firewalld多区域管理

场景:CentOS服务器(eth0为公网,eth1为内网),公网允许HTTP,内网允许SSH。 配置:

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --zone=internal --add-service=ssh --permanent
sudo firewall-cmd --reload
  • 测试:eth0接受HTTP,eth1接受SSH。

5.3:nftables动态黑名单

场景:Debian服务器需实时阻止恶意IP。 配置:

sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \;}
sudo nft add set inet filter blacklist { type ipv4_addr \; }
sudo nft add rule inet filter input ip saddr @blacklist drop
sudo nft add element inet filter blacklist { 192.168.1.200 }
sudo nft add rule inet filter input tcp dport { 22, 80 } accept
  • 测试:192.168.1.200被阻止,其他IP可访问SSH和HTTP。

六、Linux防火墙综述与未来趋势

6.1 综述

Linux防火墙工具各有千秋,共同构成了强大的网络安全生态:

  • iptables:经典之作,功能全面,适合传统环境,但配置复杂(见iptables详解)。
  • UFW:新手友好,简化配置,但功能有限。
  • Firewalld:动态管理,适应云和虚拟化场景。
  • nftables:性能优越,代表未来方向。

这些工具都基于Netfilter,核心区别在于用户接口和适用场景。选择工具时,需权衡复杂度、性能和生态支持。例如,个人博客服务器可使用UFW,企业网关可能选择Firewalld,而高流量云服务更适合nftables。

6.2 未来趋势

  • 云原生与容器化:Docker和Kubernetes环境需要动态规则,Firewalld和nftables因其动态性和CNI集成更具优势。
  • AI与自动化:AI驱动的防火墙可能自动生成规则,结合nftables的集合功能,动态更新黑名单。
  • 零信任架构:细粒度的流量控制需求推动Firewalld区域和nftables集合的广泛应用。

6.3 总结

Linux防火墙是网络安全的基石,从iptables的经典功能到UFW的简单易用,再到Firewalld的动态管理和nftables的高效性能,每种工具都为管理员提供了灵活的选择。本文通过门禁比喻和实践案例,展示了UFW、Firewalld和nftables的配置方法与应用场景。结合前两篇文章(Linux防火墙概述、iptables详解),读者可全面掌握Linux防火墙体系,根据需求打造安全的网络环境。未来,随着云计算和AI技术的发展,nftables和Firewalld有望成为主流,但iptables的遗产将继续影响网络安全实践。

原文 https://blog.csdn.net/2301_79518550/article/details/148922955