CentOS 防火墙配置入门与端口开放教程


搞懂 CentOS 防火墙,其实没那么难!小白也能看懂的端口开放教程

大家好!今天我们来聊聊一个让不少新手头疼的话题——CentOS 的防火墙配置。很多同学在部署完自己的应用后,会发现从外面怎么也访问不了,十有八九就是被防火墙给拦住了。

别担心,这篇文章会用最简单直白的方式,带你一步步搞定 CentOS 7/8 上的防火墙,让你轻松开放端口,安全地把服务暴露给全世界。

咱们的防火墙主角:firewalld

在比较新的 CentOS 版本里(比如 CentOS 7 之后),防火墙这事儿主要由一个叫 firewalld 的服务来管理。相比于它的前辈 iptablesfirewalld 最大的好处就是灵活、方便。你修改了规则之后,不用重启整个防火墙服务就能立即生效,对于线上业务来说简直是福音。

我们跟 firewalld 打交道,主要通过一个命令行工具 firewall-cmd。接下来,我们就用这个命令来解锁各种防火墙姿势。

第一步:摸清防火墙的“脾气”——状态检查

在动手之前,先来看看防火墙现在是个什么状态。

sudo systemctl status firewalld

或者用 firewall-cmd 命令也行:

sudo firewall-cmd --state

如果看到绿色的 running 字样,说明防火墙正在辛勤地为你站岗。 如果是 not running,那它就在“摸鱼”,你可以用下面的命令让它“上岗”并设置成开机自启:

# 启动防火墙
sudo systemctl start firewalld

# 设置开机自启
sudo systemctl enable firewalld

核心概念:防火墙的“地盘”—— Zone(区域)

firewalld 有一个特别重要的概念叫做“Zone”(区域)。你可以把它想象成给你的服务器划分了不同的安全地盘。 比如,你连接公司的网络和连接咖啡馆的 Wi-Fi,安全级别肯定不一样。firewalld 默认就给你预设了几个 Zone,比如 public (公共区域)、home (家庭区域)、work (工作区域)等。

每个网络接口(比如你的网卡)都会被分配到一个 Zone,而每个 Zone 都有自己独立的防火墙规则集。 对于我们大多数的云服务器来说,默认的网卡一般都在 public 这个区域里。

我们可以通过下面的命令查看当前默认的 Zone 和所有 Zone 的配置:

# 查看默认的 Zone
sudo firewall-cmd --get-default-zone

# 查看所有 Zone 的配置详情
sudo firewall-cmd --list-all-zones

一般来说,我们主要跟 public 这个 Zone 打交道就够了。

实战演练:开放端口,让服务“出得去”

这绝对是大家最关心的部分。假设你部署了一个网站服务,用的是 8080 端口,现在我们就来把它开放。

开放端口的命令格式是:firewall-cmd --zone=<区域> --add-port=<端口号>/<协议> --permanent

  • --zone:指定要操作的区域,我们用 public
  • --add-port:这就是告诉防火墙要添加一个端口。
  • --permanent这个参数非常重要! 加上它,规则才会被永久保存下来,不然服务器一重启,规则就没了。

好了,上代码:

# 开放 8080 TCP 端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

执行后,如果看到 success 的提示,说明命令成功了。

敲黑板!
加了 --permanent 的规则,需要重新加载一下防火墙配置才能立即生效。

# 重新加载防火墙规则,让新规则生效
sudo firewall-cmd --reload

这条命令不会中断当前的网络连接,非常安全。

现在,你的 8080 端口就已经对外开放了。我们可以通过以下命令来验证一下:

# 查看 public 区域所有开放的端口
sudo firewall-cmd --zone=public --list-ports

如果你看到输出里有 8080/tcp,那就大功告成了!

偷个懒:按服务名称开放

firewalld 已经为很多常见的服务(比如 HTTP、HTTPS、SSH)预设了名字。所以,如果你要开放的是这些标准服务的端口(比如 HTTP 的 80 端口),直接用服务名会更简单。

# 允许 http 服务(也就是开放 80 端口)
sudo firewall-cmd --zone=public --add-service=http --permanent

# 别忘了重新加载
sudo firewall-cmd --reload

同样,你可以用 --list-services 来查看当前区域已经允许了哪些服务。

案例:从零开始配置一台 Web 服务器的防火墙

假设你刚刚拿到一台全新的 CentOS 服务器,准备部署一个网站。我们需要保证能通过 SSH (默认22端口) 远程连接,并且网站的 HTTP (80端口) 和 HTTPS (443端口) 服务能被外界访问。

第一步:检查防火墙状态

sudo firewall-cmd --state
# 确认是 running 状态

第二步:确认 SSH 服务是允许的

通常情况下,public 区域默认就是允许 SSH 的,但为了保险起见,检查一下。

sudo firewall-cmd --zone=public --list-services

如果输出里没有 ssh,赶紧加上,不然你可能就把自己锁在门外了!

sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload

第三步:开放 Web 服务端口

# 允许 HTTP 服务 (80端口)
sudo firewall-cmd --zone=public --add-service=http --permanent

# 允许 HTTPS 服务 (443端口)
sudo firewall-cmd --zone=public --add-service=https --permanent

第四步:重新加载防火墙使配置生效

sudo firewall-cmd --reload

第五步:最终检查确认

sudo firewall-cmd --zone=public --list-all

现在,你应该能看到 services 列表里包含了 ssh, http, https。这台服务器的防火墙就配置好了,既保证了远程管理的通道,也开放了必要的 Web 服务端口。

总结一下

我们再来回顾一下几个核心命令:

  • firewall-cmd --state:查看防火墙运行状态。
  • firewall-cmd --list-all:查看默认区域的全部配置。
  • firewall-cmd --add-port=端口/协议 --permanent:永久开放一个端口。
  • firewall-cmd --add-service=服务名 --permanent:永久开放一个服务。
  • firewall-cmd --reload:让永久规则生效。

是不是很简单?firewalld 把复杂的防火墙规则变得非常人性化。 记住“修改 > 重载 > 验证”这个三步曲,你就可以轻松玩转 CentOS 的防火墙配置了。希望这篇文章能帮你扫清障碍,快去试试吧!


  目录