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

答案是通过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 firewalldsudo systemctl enable firewalld

firewalld

的核心是区域(zones)。默认情况下,你的网络接口通常会被分配到

public

区域,这是一个相对安全的默认设置。要查看当前活跃的区域以及它们的配置:

sudo firewall-cmd --get-active-zonessudo 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 --permanentsudo firewall-cmd --zone=public --add-service=https --permanentsudo 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 --permanentsudo firewall-cmd --zone=public --remove-service=http --permanentsudo 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服务器防火墙之前拦截流量。这些外部防火墙的规则也需要相应地配置。

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 --permanentsudo firewall-cmd --reload

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

public

区域是最佳的起点。

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

firewalld

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

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

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanentsudo 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' --permanentsudo firewall-cmd --reload

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

192.168.1.100

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

firewalld

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

sudo firewall-cmd --zone=external --add-masquerade --permanentsudo firewall-cmd --reload

此外,你还可以使用

firewalld

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

对于那些对

iptables

nftables

非常熟悉,并且需要直接操作底层规则的用户,

firewalld

也提供了直接规则(Direct Rules)。这允许你直接插入

iptables

nftables

命令,但通常不推荐,因为它绕过了

firewalld

的抽象层,可能会导致配置混乱。我个人很少使用,除非遇到

firewalld

无法直接表达的极端复杂场景。

总的来说,

firewalld

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/199764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 20:32:33
下一篇 2025年11月1日 20:33:29

相关推荐

  • 如何使用 Ant Design 实现自定义的 UI 设计?

    如何使用 Ant Design 呈现特定的 UI 设计? 一位开发者提出: 我希望使用 Ant Design 实现如下图所示的 UI。作为一个前端新手,我不知从何下手。我尝试使用 a-statistic,但没有任何效果。 为此,提出了一种解决方案: 可以使用一个图表库,例如 echarts.apac…

    2025年12月24日
    000
  • Antdv 如何实现类似 Echarts 图表的效果?

    如何使用 antdv 实现图示效果? 一位前端新手咨询如何使用 antdv 实现如图所示的图示: antdv 怎么实现如图所示?前端小白不知道怎么下手,尝试用了 a-statistic,但没有任何东西出来,也不知道为什么。 针对此问题,回答者提供了解决方案: 可以使用图表库 echarts 实现类似…

    2025年12月24日
    300
  • 如何使用 antdv 创建图表?

    使用 antdv 绘制如所示图表的解决方案 一位初学前端开发的开发者遇到了困难,试图使用 antdv 创建一个特定图表,却遇到了障碍。 问题: 如何使用 antdv 实现如图所示的图表?尝试了 a-statistic 组件,但没有任何效果。 解答: 虽然 a-statistic 组件不能用于创建此类…

    2025年12月24日
    200
  • 如何在 Ant Design Vue 中使用 ECharts 创建一个类似于给定图像的圆形图表?

    如何在 ant design vue 中实现圆形图表? 问题中想要实现类似于给定图像的圆形图表。这位新手尝试了 a-statistic 组件但没有任何效果。 为了实现这样的图表,可以使用 [apache echarts](https://echarts.apache.org/) 库或其他第三方图表库…

    好文分享 2025年12月24日
    100
  • echarts地图中点击图例后颜色变化的原因和修改方法是什么?

    图例颜色变化解析:echarts地图的可视化配置 在使用echarts地图时,点击图例会触发地图颜色的改变。然而,选项中并没有明确的配置项来指定此颜色。那么,这个颜色是如何产生的,又如何对其进行修改呢? 颜色来源:可视化映射 echarts中有一个名为可视化映射(visualmap)的对象,它负责将…

    2025年12月24日
    000
  • 如何在 VS Code 中解决折叠代码复制问题?

    解决 VS Code 折叠代码复制问题 在 VS Code 中使用折叠功能可以帮助组织长代码,但使用复制功能时,可能会遇到只复制可见部分的问题。以下是如何解决此问题: 当代码被折叠时,可以使用以下简单操作复制整个折叠代码: 按下 Ctrl + C (Windows/Linux) 或 Cmd + C …

    2025年12月24日
    000
  • 姜戈顺风

    本教程演示如何在新项目中从头开始配置 django 和 tailwindcss。 django 设置 创建一个名为 .venv 的新虚拟环境。 # windows$ python -m venv .venv$ .venvscriptsactivate.ps1(.venv) $# macos/linu…

    2025年12月24日
    000
  • css网页设计模板怎么用

    通过以下步骤使用 CSS 网页设计模板:选择模板并下载到本地计算机。了解模板结构,包括 index.html(内容)和 style.css(样式)。编辑 index.html 中的内容,替换占位符。在 style.css 中自定义样式,修改字体、颜色和布局。添加自定义功能,如 JavaScript …

    2025年12月24日
    000
  • 深入理解CSS框架与JS之间的关系

    深入理解CSS框架与JS之间的关系 在现代web开发中,CSS框架和JavaScript (JS) 是两个常用的工具。CSS框架通过提供一系列样式和布局选项,可以帮助我们快速构建美观的网页。而JS则提供了一套功能强大的脚本语言,可以为网页添加交互和动态效果。本文将深入探讨CSS框架和JS之间的关系,…

    2025年12月24日
    000
  • HTML+CSS+JS实现雪花飘扬(代码分享)

    使用html+css+js如何实现下雪特效?下面本篇文章给大家分享一个html+css+js实现雪花飘扬的示例,希望对大家有所帮助。 很多南方的小伙伴可能没怎么见过或者从来没见过下雪,今天我给大家带来一个小Demo,模拟了下雪场景,首先让我们看一下运行效果 可以点击看看在线运行:http://hai…

    2025年12月24日 好文分享
    500
  • 10款好看且实用的文字动画特效,让你的页面更吸引人!

    图片和文字是网页不可缺少的组成部分,图片运用得当可以让网页变得生动,但普通的文字不行。那么就可以给文字添加一些样式,实现一下好看的文字效果,让页面变得更交互,更吸引人。下面创想鸟就来给大家分享10款文字动画特效,好看且实用,快来收藏吧! 1、网页玻璃文字动画特效 模板简介:使用css3制作网页渐变底…

    2025年12月24日 好文分享
    000
  • tp5如何引入css文件

    tp5引入css文件的方法:1、将css文件放在public目录下的static文件里即可;2、在页面引入中写上“”语句即可。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 其实很简单,只需要将css,js,image文件放在这个目录下即可 页…

    2025年12月24日
    000
  • 聊聊CSS 与 JS 是如何阻塞 DOM 解析和渲染的

    本篇文章给大家介绍一下css和js阻塞 dom 解析和渲染的原理。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 hello~各位亲爱的看官老爷们大家好。估计大家都听过,尽量将CSS放头部,JS放底部,这样可以提高页面的性能。然而,为什么呢?大家有考虑过么?很长一段时间,我都是知其…

    2025年12月24日
    200
  • js如何修改css样式

    js修改css样式的方法:1、使用【obj.className】来修改样式表的类名;2、使用【obj.style.cssTest】来修改嵌入式的css;3、使用【obj.className】来修改样式表的类名;4、使用更改外联的css。 本教程操作环境:windows7系统、css3版,DELL G…

    2025年12月24日
    000
  • 如何使用纯CSS、JS实现图片轮播效果

    本篇文章给大家详细介绍一下使用纯css、js实现图片轮播效果的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 .carousel {width: 648px;height: 400px;margin: 0 auto;text-align: center;position: a…

    2025年12月24日
    000
  • js如何修改css

    js修改css的方法:1、使用【obj.style.cssTest】来修改嵌入式的css;2、使用【bj.className】来修改样式表的类名;3、使用更改外联的css文件,从而改变元素的css。 本教程操作环境:windows7系统、css3版,DELL G3电脑。 js修改css的方法: 方法…

    2025年12月24日
    000
  • js如何改变css样式

    js改变css样式的方法:1、使用cssText方法;2、使用【setProperty()】方法;3、使用css属性对应的style属性。 本教程操作环境:windows7系统、css3版,DELL G3电脑。 js改变css样式的方法: 第一种:用cssText div.style.cssText…

    2025年12月24日
    000
  • nginx的css不起作用怎么办

    nginx的css不起作用是因为误删文件导致的,其解决办法就是打开相应的文件并添加代码“include /etc/nginx/mime.types;”,然后重启Nginx守护即可。 本文操作环境:windows7系统、css3版,DELL G3电脑。 nginx的css不起作用是什么原因? 最近部署…

    2025年12月24日 好文分享
    000
  • 为什么css放上面js放下面

    css放上面js放下面的原因:1、在加载html生成DOM tree的时候,可以同时对DOM tree进行渲染,这样可以防止闪跳,白屏或者布局混乱;2、javascript加载后会立即执行,同时会阻塞后面的资源加载。 本文操作环境:Windows7系统、HTML5&&CSS3版,DE…

    2025年12月24日
    000
  • apache不加载css文件怎么办

    apache不加载css文件的解决办法:1、删除中文字符,使用unicode代替;2、将css文件另存为utf-8格式;3、检查css路径,打开浏览器看是否报404错误;4、使用chmod 777 css文件,给文件添加读取权限。 本教程操作环境:Windows7系统、HTML5&&…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信