全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

管理Linux实例的系统防火墙操作教程

最近更新时间:2025-12-11 14:56:49

一、操作背景

在云服务器上,不正确的防火墙配置是导致服务无法访问或实例远程连接失败的常见原因。本文旨在提供一套安全、标准化的操作流程,指导如何管理 Linux 实例的操作系统防火墙,例如检查状态、安全地启用防火墙、开放特定服务端口,以及在排查问题时临时禁用防火墙。

二、工作原理

所有进出KEC实例的网络流量均先经安全组过滤,再由操作系统防火墙处理。在同时满足安全组和系统防火墙的放行策略后,才能到达目标应用。

  • 安全组(云网络层)

    • 作用:安全组在KEC的使用中扮演了云上虚拟防火墙的角色,用于控制实例的出入方向流量。它在操作系统之外,是访问实例的第一道关卡。

    • 逻辑: 无论实例内部防火墙如何配置,如果安全组未放行某个端口(如 SSH 的 22 端口),所有来自外部的访问请求都会在该层被直接拒绝。

  • 操作系统防火墙(实例层)

    • 作用: 运行在 Linux 操作系统内部的防火墙软件,默认关闭,如 firewalld。它负责对通过了安全组的流量进行进一步的精细化控制。

    • 逻辑: 流量必须先通过安全组,才能到达操作系统防火墙。两者是“与”关系,必须同时允许,流量才能最终到达部署的应用程序。

三、操作指南

firewalld核心参数对照表

参数 / 选项

核心含义

常用示例

补充说明

--zone

指定规则生效的「区域」(firewalld 按区域划分网络信任级别)

--zone=public

1. 默认区域为 public;

2. 可选值:trusted/internal/work/drop/block 等;

3. 所有端口 / 服务规则必须绑定某个区域

--permanent

标记规则为「永久生效」(不添加则仅运行时生效,重启 firewalld 失效)

--permanent

--add-port=80/tcp

1. 永久规则需执行 firewall-cmd --reload 后生效;

2. 无此参数 = 临时规则(立即生效,重启丢失)

--service

指定「内置服务名」(firewalld 预定义了服务与端口 / 协议的映射关系)

--service=http

1. 内置服务列表:firewall-cmd --get-services

2. 如 http=80/tcp、ssh=22/tcp、dns=53/tcp+udp

--port

指定「端口 + 协议」(精确开放单个 / 范围端口,需指定 tcp/udp 协议)

--port=8080/tcp--port=3000-3005/udp

1. 格式:端口号/协议端口范围/协议

2. 协议仅支持 tcp/udp,不填默认 tcp

--add-port

向指定区域「添加开放端口」规则

--zone=public --add-port=22/tcp

可组合 --permanent 实现永久添加,如 --permanent --add-port=80/tcp

--remove-port

从指定区域「移除已开放的端口」规则

--zone=public --remove-port=80/tcp

移除永久规则需加 --permanent,且移除后需 reload 生效

--add-service

向指定区域「添加开放服务」规则(无需手动记端口,直接用服务名)

--zone=public --add-service=https

等同于开放该服务绑定的所有端口(如 https=443/tcp)

--remove-service

从指定区域「移除已开放的服务」规则

--zone=public --remove-service=mysql

移除后该服务对应的端口会被防火墙拦截

--add-rich-rule

向指定区域「添加富规则」(复杂规则,如源 IP 限制、端口转发、优先级等)

--add-rich-rule='rule family=ipv4 source address=192.168.1.1 accept'

富规则支持更精细的访问控制,是基础端口 / 服务规则的补充

--remove-rich-rule

从指定区域「移除富规则」

--remove-rich-rule='rule family=ipv4 source address=192.168.1.1 accept'

需完整复制富规则内容才能精准移除

--add-interface

将网卡「绑定到指定区域」(该网卡的流量受此区域规则管控)

--zone=internal --add-interface=eth0

一个网卡只能绑定一个区域,默认所有网卡绑定到默认区域

--remove-interface

将网卡「解绑指定区域」(解绑后回归默认区域)

--zone=internal --remove-interface=eth0

--list-ports

查看指定区域「已开放的所有端口」

--zone=public --list-ports

不加 --zone 则查看默认区域;加 --permanent 查看永久配置的端口

--list-services

查看指定区域「已开放的所有服务」

--zone=public --list-services

不加 --zone 则查看默认区域;加 --permanent 查看永久配置的服务

--get-default-zone

查看当前「默认区域」

firewall-cmd --get-default-zone

未指定 --zone 时,所有规则默认应用到该区域

--set-default-zone

设置「默认区域」

firewall-cmd --set-default-zone=internal

修改后立即生效,新规则默认绑定到该区域

--reload

重载防火墙配置(使永久规则生效,不中断现有连接)

firewall-cmd --reload

区别于 systemctl restart firewalld(重启服务,会中断连接)

步骤一:查看防火墙状态

在进行任何修改前,首先确认防火墙的当前运行状态。

# 执行下面命令查看 firewalld 服务状态
sudo firewall-cmd --state

1.not running:表示防火墙已关闭。

2.running:表示防火墙处于启用状态。

3.若提示 command not found,说明 firewalld 未安装。可执行 sudo yum install firewalld -ysudo dnf install firewalld -y 进行安装。

步骤二:启用防火墙

切勿在未配置允许规则前直接启用防火墙,会导致连接被切断,造成实例“失联”。请遵循“先放行,后启用”的原则(ssh服务默认在防火墙中放行)。

# 启动防火墙服务。
systemctl start firewalld

# 将 SSH 服务永久性地添加到允许列表中,确保远程管理通道不会中断。
sudo firewall-cmd --permanent --add-service=ssh

# 重新加载防火墙规则,使上一步的配置生效。
sudo firewall-cmd --reload

# (可选)将防火墙设置为开机自启动,确保重启后防护依然有效。
sudo systemctl enabled firewalld

步骤三:开放指定端口或服务

1.开放指定端口或服务

# 按服务名开放防火墙配置(推荐)
# 永久开放 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/tcp

2.使新规则生效: 添加或删除规则后,必须重新加载防火墙。

sudo firewall-cmd --reload

步骤四:删除指定端口或服务

1.删除指定端口或服务

# 按服务名删除防火墙配置
# 永久删除 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/tcp

2.使新规则生效: 添加或删除规则后,必须重新加载防火墙。

sudo firewall-cmd --reload

步骤五:关闭防火墙

在诊断网络连接问题时,可以临时关闭防火墙以判断是否为其实例内部的阻断策略所致。

不建议在生产环境关闭防火墙,在测试完成或问题定位后应重新启用防火墙。

sudo systemctl stop firewalld

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈