# 用安全组控制入站和出站流量

安全组只包含允许规则的过滤模型、创建与绑定的操作步骤，以及绑定一张网卡就可能让整机入站流量默认拒绝的连带风险。

安全组是绑定在网络接口上的一份"只加白名单"规则集。每条规则放行特定的入站或出站流量，没有被任何规则匹配到的流量，按安全组的默认策略处理。面板顶部有一条常驻提示："安全组只添加允许规则；未匹配的入站流量默认拒绝，出站流量默认允许。"

**给一张网络接口绑定安全组，可能让整台实例的入站流量都切换为默认拒绝——包括没有绑定任何安全组的其他网络接口。** 默认策略作用在整台实例上，不是逐张网络接口生效。对多网卡实例来说，只给私网网卡绑定安全组，也可能在绑定生效的那一刻连带切断公网网卡的入站流量。在给任何网络接口绑定安全组之前，先看清楚本页后面"绑定安全组到网络接口"一节里绑定会做什么。

_界面示意图：VPC 详情页的安全组面板：顶部常驻的说明提示、安全组列表（含规则数和已绑定网络接口数列）、以及新建安全组按钮_

## 开始之前

- **列出目标实例上的每一张网络接口**，确认哪些已经绑定了安全组。绑定影响的是整台实例，不只是下拉框里选中的那一张。
- **先把需要放行的端口——SSH、RDP 或其他管理端口——加入规则，再执行绑定**，不要反过来。
- **明白解绑最后一张网络接口会把整机防火墙彻底关闭。** 这不是部分回退，详见下文"解绑安全组"。

## 创建安全组

1. 在 VPC 详情页，进入**安全组**面板。
2. 点击**新建安全组**。
3. 填写名称，描述为可选项。
4. 点击**保存**。

新建的安全组规则数为零，也没有绑定到任何网络接口。创建本身不会影响任何实例——风险从绑定这一步才开始，不是从创建开始。

## 添加允许规则

1. 在安全组列表中，点击目标安全组的编辑图标。
2. 点击**添加规则**。
3. 选择协议。选择 **TCP** 或 **UDP** 会出现起始和结束端口字段；其他协议不需要填写端口。
4. 如果出现端口字段，填写起始端口和结束端口。起始端口不在 1-65535 之间会被拒绝并提示"起始端口必须在 1-65535 之间"；结束端口小于起始端口或大于 65535 会被拒绝并提示"结束端口必须不小于起始端口，且不超过 65535"。
5. 选择远程来源：CIDR 或 IP List，二选一。两者都不填会阻止保存，提示"请选择 CIDR 或 IP List"。
6. 点击**保存**。

_界面示意图：编辑安全组规则对话框：含协议、端口、远程来源列的规则表格、添加规则按钮、规则数计数器，以及规则列表为空时出现的警告横幅_

一个安全组最多容纳 50 条规则，对话框里会实时显示当前计数。规则列表为空时点击保存或关闭，会出现警告"当前没有允许规则，入站将全部拒绝。"这条警告只出现在这里、也就是编辑规则的对话框里——它不会出现在真正触发绑定的网络接口下拉框上，所以看到这条警告本身不是危险时刻，把一个空安全组绑定到网络接口上才是。

## 绑定安全组到网络接口

绑定用的下拉框没有二次确认：选中即生效。

在选择安全组之前，先看下面这张表，了解会发生什么：

| 对象                     | 会发生什么                                                   | 不会发生什么                             |
| ------------------------ | ------------------------------------------------------------ | ---------------------------------------- |
| 该实例的防火墙           | 整机被启用，入站默认策略改为拒绝，出站默认策略保持允许       | 变化不会只停留在你选中的那张网络接口上   |
| 同一实例上的其他网络接口 | 只要自己没有绑定安全组，也会一起切换为入站默认拒绝           | 不会继续保持它们原来的开放状态           |
| 被绑定安全组的规则       | 作为入站放行的例外生效                                       | 规则列表为空不会等效于"全部放行"         |
| 出站流量                 | 继续保持默认允许                                             | 不受本次绑定影响                         |
| 生效方式                 | 以异步工作请求执行，面板提示"绑定已更新，正在同步实例防火墙" | 下拉框关闭的那一刻，新规则不保证已经生效 |

如果实例还没有完成配置，绑定只会更新记录本身。此时没有防火墙可同步，面板提示改为"绑定已更新"。

> [!CAUTION]
> 多网卡实例上，只要有任意一张网络接口首次绑定了安全组，该实例上的**全部**网络接口都会切换为入站默认拒绝，不只是被选中的那张。选择安全组之前，先确认每一张网络接口都已经具备所需的放行规则——尤其是生产实例上的
> SSH 或 RDP 端口。

1. 在 VPC 详情页，进入**网络接口**面板。
2. 找到目标网络接口，打开它的安全组下拉框。
3. 选择要绑定的安全组。

_界面示意图：网络接口面板：某一行的安全组下拉框展开状态，显示可选安全组列表和用于解绑的空白选项_

打开[工作请求](/zh-cn/compute/operations/work-requests/)确认同步已经完成。

## 解绑安全组

解绑用的是同一个下拉框：选中空白选项，而不是某个安全组。

解绑一台实例上最后一张已绑定的网络接口之前，先看下面这张表：

| 对象                                                     | 会发生什么                                                                 | 不会发生什么                                     |
| -------------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------ |
| 被解绑的网络接口                                         | 不再受该安全组规则的过滤                                                   | 不会停留在某种"部分开放"的中间状态               |
| 该实例上的其他部分，如果这是实例最后一张已绑定的网络接口 | 整机防火墙被彻底关闭，流量恢复为完全开放，等同于从未绑定过任何安全组的状态 | 不会以更安全、更收敛的形式保留原来的默认拒绝策略 |
| 该实例上的其他部分，如果其他网络接口仍绑定着安全组       | 保持默认拒绝，不受这次解绑影响                                             | 解绑一张网络接口不会连带关闭其他网络接口的防火墙 |

在多网卡实例上，单独解绑一张网络接口并不等于完整回退。只有当这台实例上不再有任何网络接口绑定安全组时，整机的默认拒绝策略才会关闭。

## 修改规则会影响所有绑定该安全组的实例

保存安全组的规则改动，会重新同步当前绑定它的每一张网络接口所在的防火墙，覆盖所有正在使用这个安全组的实例。如果多台实例共用同一个安全组——例如一个项目里的全部 Web 服务器——修改一条规则会在同一次操作里影响所有这些实例，不只是你正在查看的那一台。

## 删除安全组

1. 在安全组列表中，点击目标安全组的删除图标。
2. 确认对话框内容：`确认删除安全组「{{name}}」？此操作无法撤销。`
3. 点击**删除安全组**确认。

_界面示意图：安全组列表中处于禁用状态的删除图标及其提示文字，旁边是删除确认对话框_

只要还有任何网络接口绑定着这个安全组，删除图标就会保持禁用，鼠标悬停会显示"请先从所有 ENI 解绑"。先把它从每一张网络接口上解绑，再执行删除。

## 绑定和解绑不会影响什么

- **出站流量。** 无论入站规则多少、无论是否绑定了安全组，出站始终保持默认允许。
- **实例本身、其存储和正在运行的负载。** 这是网络访问控制，不是电源或存储操作。
- **控制台访问。** 它走的是管理面，而不是实例的网络接口，所以即使入站网络流量被完全拒绝，控制台依然可用。
- **没有执行绑定动作的实例。** 新建但未绑定的安全组，在你把它挂到某张网络接口之前，不会影响任何实例。

## 操作被拒绝时

面板会用你的界面语言原样显示平台返回的提示，下面按提示分类列出，并说明处理方法。

### 获取安全组失败

> 获取安全组失败

面板未能拉取这个 VPC 下的安全组列表。刷新页面重试；如果持续失败，打开[工作请求](/zh-cn/compute/operations/work-requests/)确认这个 VPC 本身状态正常。

### 创建、保存或删除安全组失败

> 创建安全组失败

> 保存安全组失败

> 删除安全组失败

创建、保存规则或删除请求本身失败——例如网络错误或登录状态过期。安全组在这次操作前的状态不受影响。重试该操作即可。

### 更新安全组绑定失败

> 更新安全组绑定失败

绑定或解绑请求在写入之前就失败了，下拉框会自动恢复为之前的值。重新选择一次即可。

## 相关文档

- [VPC 网络](/zh-cn/network/vpc/)
- [网络接口](/zh-cn/compute/instances/network/)
- [实例详情](/zh-cn/compute/instances/detail/)
- [工作请求](/zh-cn/compute/operations/work-requests/)
