首页 > 运维 > linux运维 > 正文

Linux怎么使用firewalld管理端口开放

P粉602998670
发布: 2025-09-16 10:18:01
原创
418人浏览过
答案是通过firewalld的区域概念配置端口开放与网络规则。首先确认firewalld运行并启用,使用--add-port或--add-service在指定区域(如public)开放端口或服务,配合--permanent实现永久生效,并执行--reload应用配置;若访问仍失败,需排查未重载配置、区域分配错误、应用未监听、SELinux限制及外部防火墙等因素;firewalld的区域按信任级别划分,应遵循最小权限原则选择合适区域;此外,firewalld还支持端口转发、富规则、IP伪装和IP集等高级功能,实现精细化流量控制。

linux怎么使用firewalld管理端口开放

在Linux系统上,利用

firewalld
登录后复制
管理端口开放,核心思路就是通过其“区域”(zone)概念,为特定的网络接口或流量源配置允许的服务或端口,并确保这些配置在系统重启后依然有效。简单来说,就是告诉防火墙,哪个“门”可以对哪个“房间”开,开哪些“窗户”。

解决方案

我个人在使用Linux服务器时,

firewalld
登录后复制
是我最常用的防火墙管理工具之一。它比直接操作
iptables
登录后复制
要友好得多,抽象出了“区域”和“服务”的概念,让配置变得直观。

首先,你得确认

firewalld
登录后复制
服务是否正在运行。这几乎是我每次遇到网络问题时都会做的第一步。

sudo systemctl status firewalld
登录后复制

如果它没跑起来,就启动它并设置开机自启:

sudo systemctl start firewalld
sudo systemctl enable firewalld
登录后复制

firewalld
登录后复制
的核心是区域(zones)。默认情况下,你的网络接口通常会被分配到
public
登录后复制
区域,这是一个相对安全的默认设置。要查看当前活跃的区域以及它们的配置:

sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all --zone=public # 查看public区域的详细配置
登录后复制

假设你想开放一个TCP端口,比如8080,用于你的Web应用。我通常会先在运行时(runtime)添加,测试没问题后再使其永久生效。

sudo firewall-cmd --zone=public --add-port=8080/tcp
登录后复制

这个命令只是临时生效的,系统重启后就会失效。如果你觉得这个端口确实需要一直开放,那就得加上

--permanent
登录后复制
参数:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
登录后复制

请记住,带有

--permanent
登录后复制
的命令执行后,配置是写入了文件,但并没有立即应用到防火墙的运行时配置中。你还需要重新加载
firewalld
登录后复制
才能让永久配置生效:

sudo firewall-cmd --reload
登录后复制

如果想开放一个预定义的服务,比如HTTP(端口80)或HTTPS(端口443),

firewalld
登录后复制
已经内置了这些服务,直接添加服务名更方便,也更语义化:

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
登录后复制

要确认端口或服务是否已经开放,可以再次查看区域的配置:

sudo firewall-cmd --list-all --zone=public
登录后复制

如果某个端口或服务不再需要开放,移除它的方式也很简单,把

--add-port
登录后复制
--add-service
登录后复制
改成
--remove-port
登录后复制
--remove-service
登录后复制
,同样记得
--permanent
登录后复制
--reload
登录后复制

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --remove-service=http --permanent
sudo firewall-cmd --reload
登录后复制

为什么我的端口开了,但还是访问不了?

这真是个让人头疼的问题,我遇到过不止一次。你明明按照教程把端口开了,

firewall-cmd --list-all
登录后复制
也显示得清清楚楚,但从外部就是连不上。这背后的原因往往不是单一的,需要你像个侦探一样,逐一排查。

首先,最常见的错误就是忘记

firewall-cmd --reload
登录后复制
。尤其是你使用了
--permanent
登录后复制
参数后,配置是写到磁盘文件了,但防火墙的实际运行规则并没有更新。我承认,我刚开始用的时候也犯过几次这样的低级错误。

其次,区域(Zone)选择不当。你的服务器可能配置了多个网络接口,或者你的接口被分配到了一个你意想不到的区域。比如,你把端口开在了

public
登录后复制
区域,但你的网络接口实际上却在
internal
登录后复制
区域。你可以用
sudo firewall-cmd --get-active-zones
登录后复制
看看你的接口到底在哪。如果不在你期望的区域,你需要将接口绑定到正确的区域,或者在正确的区域开放端口。

再者,应用程序本身的问题。防火墙只是网络的第一道关卡,它允许流量进来,但不保证你的应用一定在监听那个端口。你得确保你的服务(比如Nginx、Apache、Node.js应用)确实启动了,并且正在监听你开放的那个端口。我通常会用

sudo netstat -tulnp | grep 8080
登录后复制
或者
sudo ss -tulnp | grep 8080
登录后复制
来检查。如果应用没跑起来,或者监听的是
127.0.0.1
登录后复制
而不是
0.0.0.0
登录后复制
(表示监听所有接口),那外部自然是访问不了的。

还有,SELinux。尤其是在RHEL/CentOS系列系统上,SELinux是个强大的安全机制,它可能会阻止某些服务在非标准端口上运行,即使

firewalld
登录后复制
允许了。例如,你开放了8080端口给HTTP服务,但SELinux可能只允许HTTP服务在80端口上运行。这时候,你可能需要调整SELinux的布尔值(
sudo setsebool -P httpd_can_network_connect_db on
登录后复制
之类的,具体取决于服务)或者为端口添加SELinux上下文。这玩意儿有时候确实挺烦人的,但为了安全,又不得不重视。

最后,别忘了上游网络设备或云服务商的防火墙。如果你在云服务器上,比如AWS的Security Groups、阿里云的安全组,或者你的网络前面还有硬件防火墙,这些都会在你的Linux服务器防火墙之前拦截流量。这些外部防火墙的规则也需要相应地配置。

智谱AI开放平台
智谱AI开放平台

智谱AI大模型开放平台-新一代国产自主通用AI开放平台

智谱AI开放平台38
查看详情 智谱AI开放平台

firewalld的“区域(Zone)”到底是什么,我该怎么选?

firewalld
登录后复制
的“区域”概念,在我看来,是它最优雅的设计之一。它不像
iptables
登录后复制
那样直接操作规则链,而是提供了一种更高级、更语义化的方式来管理网络流量。你可以把它想象成你家里的不同房间,每个房间都有不同的安全级别和对待访客的策略。

一个区域(Zone)实际上是一组预定义的规则集合,它决定了哪些流量可以进入或离开与该区域关联的网络接口。每个网络接口(比如

eth0
登录后复制
enp0s3
登录后复制
)都会被分配到一个区域。

firewalld
登录后复制
默认提供了几个区域,它们代表了不同的信任级别:

  • drop
    登录后复制
    : 最严格的区域。所有进入的包都会被直接丢弃,不回应,就像你对陌生人直接关门,连个“不”字都不说。只有出去的包才被允许。
  • block
    登录后复制
    : 比
    drop
    登录后复制
    稍微“礼貌”一点。所有进入的包都会被拒绝,并发送ICMP
    host-prohibited
    登录后复制
    port-unreachable
    登录后复制
    回应。
  • public
    登录后复制
    : 默认区域,通常用于公共网络,比如连接到互联网的服务器。它只允许你明确开放的服务和端口。这是我最常用于外部服务的区域。
  • external
    登录后复制
    : 用于配置路由器的外部接口。它会进行IP伪装(NAT),允许内部网络访问外部,但外部无法直接访问内部。
  • internal
    登录后复制
    : 用于内部网络。它信任内部的计算机,允许它们访问外部,并且内部计算机之间可以互相访问。
  • home
    登录后复制
    : 用于家庭网络。比
    internal
    登录后复制
    更宽松,信任所有家庭成员的设备。
  • work
    登录后复制
    : 用于工作环境。信任工作中的计算机。
  • trusted
    登录后复制
    : 最不安全的区域。信任所有网络连接,允许所有流量。我几乎不会在生产环境中使用这个区域,除非我完全清楚自己在做什么。

那么,该怎么选择呢?这真的取决于你的网络环境和安全需求。

  • 对于对外提供服务的服务器,比如Web服务器、数据库服务器,我几乎总是把它们的主要网络接口放在
    public
    登录后复制
    区域
    。这样,只有我明确允许的HTTP、HTTPS、SSH等服务才能被外部访问,其他所有端口都是默认关闭的。这提供了一个很好的安全基线。
  • 如果你有一个内部网络,并且想让内部机器互相通信,同时还能访问外部,那么
    internal
    登录后复制
    home
    登录后复制
    区域
    可能更合适。你可以把内部接口分配给这些区域。
  • 如果你想暂时完全隔离一台机器,比如进行安全测试,可以考虑将接口分配给
    drop
    登录后复制
    block
    登录后复制
    区域

你可以用

sudo firewall-cmd --get-active-zones
登录后复制
查看你的网络接口当前属于哪个区域。如果需要更改,比如把
eth0
登录后复制
public
登录后复制
改到
internal
登录后复制

sudo firewall-cmd --zone=internal --change-interface=eth0 --permanent
sudo firewall-cmd --reload
登录后复制

选择区域的原则是:最小权限原则。只开放你需要的,只信任你确信的。对于大部分服务器,

public
登录后复制
区域是最佳的起点。

除了端口,firewalld还能管理哪些网络规则?

firewalld
登录后复制
的能力远不止开放端口那么简单,它是一个非常全面的防火墙管理工具。除了我们前面提到的直接开放端口或服务,它还能处理许多更复杂的网络场景。

一个我经常用到的高级功能是端口转发(Port Forwarding)。有时候,你可能想让外部访问你服务器的80端口,但你的应用实际上运行在8080端口上。这时,你就可以设置一个转发规则:

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reload
登录后复制

这个命令告诉

firewalld
登录后复制
,所有进入
public
登录后复制
区域,目标端口是80/tcp的流量,都给我转发到本地的8080端口。这在一些微服务架构或者需要隐藏真实端口的应用场景中非常有用。

另一个强大的特性是富规则(Rich Rules)。富规则提供了比直接添加端口或服务更细粒度的控制,你可以根据源IP地址、目标IP地址、协议、端口、甚至时间等条件来定义复杂的规则。比如,我只想允许特定IP地址访问我的SSH服务:

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 --reload
登录后复制

这条规则就意味着,只有来自

192.168.1.100
登录后复制
的IPv4流量才能访问22/tcp端口。这对于限制管理端口的访问非常有用,大大提高了安全性。你甚至可以拒绝来自某个IP的流量,或者限制连接速率。

firewalld
登录后复制
还支持源地址伪装(Source Address Masquerading),这在你的Linux服务器作为路由器或网关时非常关键。它允许内部网络的计算机通过你的服务器访问外部网络,而外部网络看到的是你服务器的IP地址:

sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reload
登录后复制

此外,你还可以使用

firewalld
登录后复制
来管理IP集(IP Sets),这对于管理大量的IP地址黑白名单非常高效。而不是为每个IP地址都写一条富规则,你可以把它们组织到一个IP集中,然后用一条规则引用整个IP集。

对于那些对

iptables
登录后复制
nftables
登录后复制
非常熟悉,并且需要直接操作底层规则的用户,
firewalld
登录后复制
也提供了直接规则(Direct Rules)。这允许你直接插入
iptables
登录后复制
nftables
登录后复制
命令,但通常不推荐,因为它绕过了
firewalld
登录后复制
的抽象层,可能会导致配置混乱。我个人很少使用,除非遇到
firewalld
登录后复制
无法直接表达的极端复杂场景。

总的来说,

firewalld
登录后复制
不仅仅是一个端口管理器,它是一个功能丰富的网络防火墙管理框架。理解并善用它的区域、服务、端口转发和富规则,能让你对服务器的网络安全拥有更强大、更灵活的控制力。

以上就是Linux怎么使用firewalld管理端口开放的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号