最近更新时间:2025-12-11 14:56:49
在云服务器上,不正确的防火墙配置是导致服务无法访问或实例远程连接失败的常见原因。本文旨在提供一套安全、标准化的操作流程,指导如何管理 Linux 实例的操作系统防火墙,例如检查状态、安全地启用防火墙、开放特定服务端口,以及在排查问题时临时禁用防火墙。
所有进出KEC实例的网络流量均先经安全组过滤,再由操作系统防火墙处理。在同时满足安全组和系统防火墙的放行策略后,才能到达目标应用。
安全组(云网络层)
作用:安全组在KEC的使用中扮演了云上虚拟防火墙的角色,用于控制实例的出入方向流量。它在操作系统之外,是访问实例的第一道关卡。
逻辑: 无论实例内部防火墙如何配置,如果安全组未放行某个端口(如 SSH 的 22 端口),所有来自外部的访问请求都会在该层被直接拒绝。
操作系统防火墙(实例层)
作用: 运行在 Linux 操作系统内部的防火墙软件,默认关闭,如 firewalld。它负责对通过了安全组的流量进行进一步的精细化控制。
逻辑: 流量必须先通过安全组,才能到达操作系统防火墙。两者是“与”关系,必须同时允许,流量才能最终到达部署的应用程序。
参数 / 选项 | 核心含义 | 常用示例 | 补充说明 |
| 指定规则生效的「区域」(firewalld 按区域划分网络信任级别) |
| 1. 默认区域为 public; 2. 可选值:trusted/internal/work/drop/block 等; 3. 所有端口 / 服务规则必须绑定某个区域 |
| 标记规则为「永久生效」(不添加则仅运行时生效,重启 firewalld 失效) |
| 1. 永久规则需执行 2. 无此参数 = 临时规则(立即生效,重启丢失) |
| 指定「内置服务名」(firewalld 预定义了服务与端口 / 协议的映射关系) |
| 1. 内置服务列表: 2. 如 http=80/tcp、ssh=22/tcp、dns=53/tcp+udp |
| 指定「端口 + 协议」(精确开放单个 / 范围端口,需指定 tcp/udp 协议) |
| 1. 格式: 2. 协议仅支持 tcp/udp,不填默认 tcp |
| 向指定区域「添加开放端口」规则 |
| 可组合 --permanent 实现永久添加,如 |
| 从指定区域「移除已开放的端口」规则 |
| 移除永久规则需加 |
| 向指定区域「添加开放服务」规则(无需手动记端口,直接用服务名) |
| 等同于开放该服务绑定的所有端口(如 https=443/tcp) |
| 从指定区域「移除已开放的服务」规则 |
| 移除后该服务对应的端口会被防火墙拦截 |
| 向指定区域「添加富规则」(复杂规则,如源 IP 限制、端口转发、优先级等) |
| 富规则支持更精细的访问控制,是基础端口 / 服务规则的补充 |
| 从指定区域「移除富规则」 |
| 需完整复制富规则内容才能精准移除 |
| 将网卡「绑定到指定区域」(该网卡的流量受此区域规则管控) |
| 一个网卡只能绑定一个区域,默认所有网卡绑定到默认区域 |
| 将网卡「解绑指定区域」(解绑后回归默认区域) |
| |
| 查看指定区域「已开放的所有端口」 |
| 不加 |
| 查看指定区域「已开放的所有服务」 |
| 不加 |
| 查看当前「默认区域」 |
| 未指定 |
| 设置「默认区域」 |
| 修改后立即生效,新规则默认绑定到该区域 |
| 重载防火墙配置(使永久规则生效,不中断现有连接) |
| 区别于 |
在进行任何修改前,首先确认防火墙的当前运行状态。
# 执行下面命令查看 firewalld 服务状态
sudo firewall-cmd --state1.not running:表示防火墙已关闭。
2.running:表示防火墙处于启用状态。
3.若提示 command not found,说明 firewalld 未安装。可执行 sudo yum install firewalld -y 或 sudo dnf install firewalld -y 进行安装。
切勿在未配置允许规则前直接启用防火墙,会导致连接被切断,造成实例“失联”。请遵循“先放行,后启用”的原则(ssh服务默认在防火墙中放行)。
# 启动防火墙服务。
systemctl start firewalld
# 将 SSH 服务永久性地添加到允许列表中,确保远程管理通道不会中断。
sudo firewall-cmd --permanent --add-service=ssh
# 重新加载防火墙规则,使上一步的配置生效。
sudo firewall-cmd --reload
# (可选)将防火墙设置为开机自启动,确保重启后防护依然有效。
sudo systemctl enabled firewalld1.开放指定端口或服务
# 按服务名开放防火墙配置(推荐)
# 永久开放 HTTP 和 HTTPS 服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 按端口号开放防火墙配置
# 永久开放8080/tcp端口
sudo firewall-cmd --permanent --add-port=8080/tcp2.使新规则生效: 添加或删除规则后,必须重新加载防火墙。
sudo firewall-cmd --reload1.删除指定端口或服务
# 按服务名删除防火墙配置
# 永久删除 HTTP 和 HTTPS 服务
sudo firewall-cmd --permanent --remove-service=http
sudo firewall-cmd --permanent --remove-service=http
# 按端口号删除防火墙配置
# 永久删除 8080/tcp 端口
sudo firewall-cmd --permanent --remove-port=8080/tcp2.使新规则生效: 添加或删除规则后,必须重新加载防火墙。
sudo firewall-cmd --reload在诊断网络连接问题时,可以临时关闭防火墙以判断是否为其实例内部的阻断策略所致。
不建议在生产环境关闭防火墙,在测试完成或问题定位后应重新启用防火墙。
sudo systemctl stop firewalld
纯净模式
