华为云 ECS 上用 firewalld 配防火墙:开放常用端口、按来源限制 SSH,以及和安全组怎么配合

举报
yd_252351073 发表于 2026/11/03 09:28:47 2026/11/03
【摘要】 华为云 ECS 上用 firewalld 配防火墙:开放常用端口、按来源限制 SSH,以及和安全组怎么配合在华为云 ECS 上部署业务时,很多人只改安全组、不管本机防火墙;也有人两边都开,结果端口明明监听了却访问不通。firewalld 是 CentOS、Huawei Cloud EulerOS(HCE)、部分 Rocky 镜像上的默认防火墙,和安全组是两道独立的过滤层。本文讲清楚两者的分...

华为云 ECS 上用 firewalld 配防火墙:开放常用端口、按来源限制 SSH,以及和安全组怎么配合

在华为云 ECS 上部署业务时,很多人只改安全组、不管本机防火墙;也有人两边都开,结果端口明明监听了却访问不通。firewalld 是 CentOS、Huawei Cloud EulerOS(HCE)、部分 Rocky 镜像上的默认防火墙,和安全组是两道独立的过滤层。本文讲清楚两者的分工,给出开放 HTTP、HTTPS、自定义端口和按来源 IP 收紧 SSH 的完整命令,并整理「改完不生效」「zone 搞错」「把自己锁在外面」三类常见排错。下文用 your_domain 表示业务域名,源地址示例用 203.0.113.10,本机回环用 127.0.0.1。

一、先分清:安全组与 firewalld

安全组作用在云侧虚拟网卡入口,firewalld 作用在操作系统内核的包过滤。入站流量必须两道都放行,业务才通;任一层拒绝,对端都会表现为超时或连接失败。

建议分工:

  1. 安全组管「粗粒度」:只开业务必需端口(如 22、80、443、业务端口),源地址尽量收窄到办公网段或堡垒机,不要长期对 0.0.0.0/0 开放 SSH。
  2. firewalld 管「细粒度」:按服务、按源 IP、按 zone 再收一层,尤其适合临时开放、按来源限 SSH、以及同一台机器多网卡/多业务隔离。
  3. 两层规则保持一致:安全组开了 443,本机也要放行;只开其中一层会导致「安全组看着通了,本机还是拒绝」。

查看本机是否在跑 firewalld:

sudo systemctl status firewalld
sudo firewall-cmd --state

若状态不是 running,先启用:

sudo systemctl enable --now firewalld

Ubuntu 默认是 ufw,不是 firewalld。若镜像是 Ubuntu,本文命令不适用,请改用 ufw 或自行安装 firewalld 后再对照操作。

二、确认默认 zone 再动手

firewalld 用 zone 组织规则,公网网卡通常落在 public。先看当前默认 zone 和网卡归属:

sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all

后面所有 --permanent 规则建议显式带上 --zone=public(或你实际使用的 zone),避免写到别的 zone 导致「命令成功了,流量仍被拒」。

三、开放常用端口与服务

firewalld 既支持按服务名,也支持按端口。常用 HTTP/HTTPS 推荐用服务名:

sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
sudo firewall-cmd --reload

自定义业务端口(以 TCP 8080 为例):

sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-ports

记得同步改安全组入方向:协议 TCP、端口 8080、源地址按需要填写。两层都放行后,再在 ECS 上确认进程在监听:

ss -lntup | grep 8080
curl -I 127.0.0.1:8080

本机 127.0.0.1 通、公网不通,优先查安全组;公网通、本机 firewall-cmd --list-all 里没有对应端口,则是 firewalld 漏放。

四、按来源 IP 限制 SSH

SSH 对全网开放风险很高。更稳妥的做法是:安全组先把 22 的源收窄;firewalld 再加一条「仅允许指定源」的富规则,并把原来对所有人开放的 ssh 服务去掉。

假设办公出口是 203.0.113.10:

# 允许指定源访问 SSH
sudo firewall-cmd --zone=public --permanent \
  --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept'

# 去掉对所有人开放的 ssh 服务(若之前加过)
sudo firewall-cmd --zone=public --permanent --remove-service=ssh

sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-rich-rules

多个办公出口就多写几条 rich rule。改之前务必保留一条当前会话能连上的路径,并确认安全组里 22 端口的源地址也包含你正在使用的公网 IP,否则 reload 后可能立刻断连。

若暂时只想「先收安全组、本机仍保留 ssh 服务」,也可以只改控制台安全组,本机不动。两边都收才是完整加固。

五、和业务发布流程怎么配合

上线一个对外 Web 服务时,推荐顺序是:

  1. 应用在本机 127.0.0.1 或 0.0.0.0 监听并自测通过。
  2. firewalld 放行对应服务或端口并 reload。
  3. 安全组增加同端口入方向规则。
  4. 从办公网或测试机访问 your_domain 对应端口做验收。

下线或缩端口时反过来:先改安全组收紧,再改 firewalld,最后停服务。这样不会出现「服务已停但端口仍对公网暴露」或「防火墙先关导致自己排查时连不上」的别扭状态。

六、常见排错

1. 改完不生效

最常见原因是只加了运行时规则、没加 --permanent,或加了 permanent 却忘了 --reload。永久规则写入磁盘后必须 reload 才进入生效集:

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

两边不一致时,以 permanent 为准补规则再 reload。另一个原因是规则写进了错误 zone:get-active-zones 看网卡实际 zone,把规则迁过去。

2. zone 搞错或网卡跑到了别的 zone

多网卡、改过 NetworkManager、或手工 --change-interface 后,网卡可能不在 public。用下面命令确认并纠正:

sudo firewall-cmd --get-active-zones
sudo firewall-cmd --permanent --zone=public --change-interface=eth0
sudo firewall-cmd --reload

接口名以 ip link 实际输出为准,不一定是 eth0。

3. 被锁在外面:从控制台救回来

若 rich rule 写错源地址、或误删 ssh,SSH 会立刻断。此时不要慌,走华为云控制台救:

  1. 登录控制台,打开该 ECS,进入「远程登录」或 VNC/管理控制台登录(不依赖 22 端口)。
  2. 在控制台终端执行:
sudo firewall-cmd --zone=public --add-service=ssh
sudo firewall-cmd --zone=public --permanent --add-service=ssh
sudo firewall-cmd --reload
  1. 同时检查安全组入方向是否仍放行你当前公网 IP 的 22 端口。
  2. 恢复连通后,再重新设计「按源限制」规则,先加对 rich rule,确认能连,再 --remove-service=ssh。

临时急救也可以:sudo systemctl stop firewalld(会清空本机层过滤,仅作抢救,通了立刻重新 enable 并按白名单配置)。

七、小结

安全组与 firewalld 是串联的两道门,只开一道不够。配置时固定三个习惯:先确认 active zone,再写带 --zone 与 --permanent 的规则并 reload,最后用 list-all 与安全组规则交叉核对。SSH 务必按来源收紧,改规则前留好控制台登录退路。按本文做完,常用 Web 端口可稳定对外开放,管理面也能收敛到可信源,排错路径也更清晰。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。