跳到主要内容

安全组策略

安全组是 QVMConsole VPC 网络的访问控制核心,基于 nftables ACL 实现细粒度的网络流量控制。通过安全组策略,管理员可以定义入站和出站规则,精确控制虚拟机的网络访问权限,确保网络安全。

安全组架构

安全组管理

安全组类型

类型说明特点
默认组系统预设的安全组基础安全策略,不可删除
自定义组用户创建的安全组可自由配置规则
VM 维度组与单台虚拟机关联的安全组记录用于虚拟机详情页的网络管理展示与快速切换

安全组操作

操作说明限制
创建创建新的安全组名称需唯一
编辑修改安全组名称和描述-
删除删除安全组需确保无虚拟机使用
默认安全组

每个 VPC 网络都包含一个默认安全组,提供基础的安全保护。默认安全组包含必要的入站和出站规则,确保虚拟机可以正常通信。

安全组默认全放通

系统设置「安全与维护 → 安全防护」提供安全组默认全放通开关(security_group_default_allow_all,环境变量 KVM_SECURITY_GROUP_DEFAULT_ALLOW_ALL,默认关闭):

行为说明
开启时二次确认开启需确认重大安全风险;关闭直接生效
作用范围仅对开启后新建的安全组生效,不会追加到已有安全组
自动添加的规则两条入站全放通规则:IPv4 全部协议 0.0.0.0/0、IPv6 全部协议 ::/0(全端口),备注为「系统默认全放通规则」
添加失败仅记录警告日志,不阻断安全组创建
风险警示

全放通意味着新建虚拟机所有端口和协议均可被外部访问,存在重大安全风险。请仅在受信任的内网或测试环境中开启;生产环境建议保持关闭并按需精确放行。

安全组规则配置

规则配置项

配置项说明必填示例
方向规则应用的方向入站/出站
IP 版本地址族(address_family),区分 IPv4/IPv6 规则IPv4 / IPv6
协议网络协议类型TCP/UDP/ICMP/ICMPv6/全部
端口范围目标端口范围80-80 或 1-65535
目标类型规则匹配的目标类型CIDR/交换机/安全组
目标值具体的目标值192.168.1.0/24 或 2001:db8::/64
备注规则说明信息允许 HTTP 访问

规则数据模型中 address_family 取值为 ipv4 / ipv6(默认 ipv4);协议取值 tcp/udp/icmp/icmpv6/all

IPv6 规则

选择 IPv6 版本时:

  • 协议中的 ICMP 自动切换为 ICMPv6(切换 IP 版本时联动)
  • CIDR 目标支持 IPv6 地址或前缀,如 ::/0 表示所有 IPv6 来源
  • 目标为交换机/安全组时,仅匹配其中的 IPv6 地址

目标资源可见性

规则目标为「交换机」或「安全组」时,下拉框仅展示与当前安全组属于同一用户的资源:管理员视图中的资源列表可能包含所有用户的数据,而每个用户都有一个名为「默认安全组」的项,不过滤会因同名无法区分,且后端本就会拒绝跨用户选择。交换机目标还要求是系统交换机或已启用 DHCP 的交换机。

方向说明

方向说明应用场景
入站(ingress)控制进入虚拟机的流量限制外部访问虚拟机
出站(egress)控制从虚拟机发出的流量限制虚拟机访问外部

协议类型

协议说明典型应用
TCP传输控制协议Web 服务、数据库、SSH
UDP用户数据报协议DNS、DHCP、视频流
ICMP互联网控制消息协议(仅 IPv4 规则)Ping、网络诊断
ICMPv6IPv6 控制消息协议(仅 IPv6 规则)Ping6、ND、路径 MTU 发现
全部所有协议通用访问控制

目标类型

类型说明示例
CIDRIP 地址段192.168.1.0/24
交换机VPC 交换机 IDswitch-001
安全组引用其他安全组sg-web-server
目标类型选择

选择合适的目标类型可以简化规则管理。例如,使用"交换机"类型可以自动匹配该交换机下的所有虚拟机,无需手动指定 IP 地址。

规则展开查看

安全组支持展开查看所有规则,便于管理和审计:

规则列表显示

规则详情字段

字段说明
方向入站/出站
IP 版本IPv4/IPv6(默认 IPv4)
协议TCP/UDP/ICMP/ICMPv6/全部
端口范围起始端口-结束端口
目标类型CIDR/交换机/安全组
目标值具体的目标值
备注规则说明

ACL 预览与应用

安全组规则最终需要转换为 nftables ACL 规则才能生效。

ACL 预览

ACL 预览功能展示当前所有安全组规则生成的 nftables 规则:

预览内容说明
规则总数生成的 nftables 规则数量
入站规则入站方向的规则列表
出站规则出站方向的规则列表
规则格式nftables 配置格式

ACL 应用流程

安全组规则匹配流程

当网络数据包到达虚拟机时,安全组规则按以下流程进行匹配:

匹配流程图

匹配规则说明

阶段说明处理方式
方向匹配确定数据包方向匹配对应方向的规则
协议匹配检查协议类型匹配协议字段
端口匹配检查端口范围匹配端口范围字段
目标匹配检查目标地址匹配目标类型和值
规则顺序

安全组规则按顺序匹配,一旦匹配成功就停止后续规则的匹配。建议将最严格的规则放在前面,最宽松的规则放在后面。

实现原理

安全组规则最终转换为 nftables ACL 规则,加载到 kvm_console_vpc_acl 表中。

nftables 表结构

表名说明
kvm_console_vpc_aclVPC 安全组规则表

链结构

链名方向说明
ingress入站处理进入虚拟机的流量
egress出站处理从虚拟机发出的流量

规则转换示例

安全组规则nftables 规则
入站 TCP 80 允许 0.0.0.0/0ip daddr 0.0.0.0/0 tcp dport 80 accept
出站 TCP 443 允许 10.0.0.0/8ip saddr 10.0.0.0/8 tcp dport 443 accept
入站 ICMP 允许 192.168.1.0/24ip saddr 192.168.1.0/24 icmp type echo-request accept
入站 TCP 443(IPv6)允许 2001:db8::/64ip6 daddr 2001:db8::/64 tcp dport 443 accept
入站 ICMPv6(IPv6)允许 ::/0ip6 ... meta l4proto ipv6-icmp accept

ACL 引擎按虚拟机地址的地址族分别生成 ip(IPv4)与 ip6(IPv6)规则;规则仅作用于同地址族的虚拟机地址,跨地址族的规则自动跳过。

安全组最佳实践

规则设计原则

  1. 最小权限原则:只开放必要的端口和协议
  2. 分层防护:结合网络层和应用层安全策略
  3. 定期审计:定期检查和更新安全组规则
  4. 文档记录:为每条规则添加清晰的备注

常见安全组配置

场景入站规则出站规则
Web 服务器TCP 80, 443 允许所有TCP 80, 443 允许所有
数据库服务器TCP 3306 允许内网限制出站
SSH 管理TCP 22 允许管理员 IP允许所有
开发测试允许所有允许所有
安全警告

避免配置过于宽松的安全组规则,如允许所有 IP 访问所有端口。这会带来严重的安全风险,可能导致未授权访问。

安全组与虚拟机关系

关系说明

关系说明
绑定关系虚拟机必须绑定至少一个安全组
多对多一个虚拟机可以绑定多个安全组
规则叠加多个安全组的规则会叠加生效
动态更新修改安全组规则后自动应用到绑定的虚拟机

多安全组规则叠加

规则叠加规则

当虚拟机绑定多个安全组时,规则会叠加生效。入站规则取并集(允许任一安全组允许的流量),出站规则同样取并集。

故障排除

常见问题

问题可能原因解决方案
无法访问虚拟机安全组规则未配置入站添加相应的入站规则
虚拟机无法访问外部安全组规则未配置出站添加相应的出站规则
部分端口无法访问端口规则配置错误检查端口范围和协议
规则不生效ACL 未应用应用 ACL 规则

诊断步骤

诊断建议

遇到网络访问问题时,建议先检查安全组绑定和规则配置,然后检查 ACL 是否已应用。如果问题仍然存在,可以使用网络诊断工具进一步排查。