IBM Cloud Docs
使用防御主机安全地访问远程实例

使用防御主机安全地访问远程实例

本教程可能会发生成本。 使用 成本估算器 根据您的预计使用量生成成本估算。

本教程将指导您部署堡垒主机,以便安全访问虚拟私有云(VPC)中的远程实例。 堡垒主机是指配置了公共IP地址,可通过SSH访问的实例。 堡垒主机一旦建立,即可作为跳转服务器,允许与未配置公共IP地址的实例进行安全连接。

为了减少VPC内服务器的暴露,您将创建并使用堡垒主机。 单个服务器上的管理任务将使用 SSH 执行,通过防御主机进行代理。 仅允许使用连接到服务器的特殊维护安全组来访问服务器以及从服务器定期访问因特网(例如,用于软件安装)。

目标

  • 了解如何设置防御主机和带规则的安全组
  • 通过防御主机安全管理服务器

架构*" caption-side="bottom"}{: caption="*

  1. 在云上建立所需的基础设施(子网、带有规则的安全组、虚拟服务器实例)后,管理员 DevOps 使用私有SSH密钥连接(SSH)到堡垒主机。
  2. 管理员分配带合适出站规则的维护安全组。
  3. 管理员通过防御主机安全地连接 (SSH) 到实例的专用 IP 地址,以安装或更新任何所需软件,例如,Web 服务器
  4. 因特网用户向 Web 服务器发出 HTTP/HTTPS 请求。

准备工作

  • 检查用户许可权。 确保您的用户帐户具有创建和管理 VPC 资源所需的足够许可权。 请参阅 VPC 的 必需许可权 列表。
  • 您需要 SSH 密钥来连接到虚拟服务器。 如果您没有 SSH 密钥,请参阅为 VPC 创建密钥 的说明
  • 本教程假定您要在现有虚拟私有云中添加防御主机。 如果您的帐户中没有 VPC,请先 创建 VPC,然后再继续执行后续步骤。

创建防御主机

在本部分中,您将创建和配置防御主机以及不同子网中的安全组。

创建子网

  1. 点击左侧面板中 “网络”下的 “子网”,然后点击 “创建”。

    1. 位置下,选择地理位置,区域和区域。
    2. 输入 vpc-secure-bastion-subnet 作为名称,然后选择您创建的虚拟私有云。
    3. 选择与 VPC 相同的资源组。
    4. 保留地址前缀不变,并将IP地址总数设置为256。
  2. 公共网关切换到已连接

    将公共网关连接到子网,以允许所有连接的资源与公用因特网进行通信。

  3. 单击创建子网以进行供应。

创建和配置防御安全组

让我们创建一个安全组,并为您的堡垒VSI(虚拟服务器实例)配置入站规则。

  1. 网络下选择 安全组,然后单击 创建

  2. 输入 vpc-secure-bastion-sg 作为名称,并选择之前创建的VPC。

  3. 选择与 VPC 相同的资源组。

  4. 现在,在入站部分点击 “添加”,创建以下入站规则。 这些规则允许 SSH 访问和 Ping (ICMP) 操作。 下表列出了这些数值。

    堡垒: 入站规则
    协议 端口/值 源类型
    TCP 端口范围: 22-22 任意
    ICMP 类型 :8,代码 :留空 任意

    要进一步增强安全性,入站流量可以限制为公司网络或者典型的家庭网络。 您可以运行 curl ipecho.net/plain ; echo 以获得网络的外部 IP 地址,并改为使用该地址。

  5. 单击创建安全组以创建安全组。

创建防御实例

子网和安全组已经就位,接下来创建防御虚拟服务器实例。

  1. 在左侧窗格的子网下,选择 vpc-secure-bastion-subnet
  2. 单击 连接的资源,然后在 连接的实例下,单击 创建 以在与子网相同的资源组下供应名为 vpc-secure-bastion-vsi 的新虚拟服务器。
  3. 选择一个地点,确保以后再次使用同一地点。
  4. 图像 下,单击 更改图像。 使用搜索字段来选择 Ubuntu Linux 作为 操作系统。 可以选取该映像的任何版本。
  5. 单击 更改概要文件,选择 计算 作为类别,并选取 cx2-2x4 (2 vCPUs 和 4 GB RAM) 作为概要文件。
  6. 创建一个新的 SSH密钥,点击 新密钥
    1. 输入 vpc-ssh-key 作为密钥名称。
    2. 选择与 VSI 相同的资源组。
    3. 按原样保留区域
    4. 将现有本地 SSH 密钥的内容复制并粘贴到公用密钥下。
    5. 单击添加 SSH 密钥
  7. 滚动以选择 联网 下的 VPC
  8. 确保选择了 虚拟网络接口,并将 vpc-secure-bastion-subnet 列示为子网。 单击该子网的“编辑”图标。
    1. 首先,在 网络连接和虚拟网络接口详细信息下,验证是否选择了 vpc-secure-bastion-subnet。 单击 下一步
    2. 对于 安全组 部分中的 网络,取消选中缺省安全组并标记 vpc-secure-bastion-sg。 单击 下一步
    3. 在“IP 配置”对话框中,保留所有内容,然后单击 下一步
    4. 最后,查看所有内容并通过单击 保存完成。
  9. 点击创建虚拟服务器
  10. 在实例启动并 运行后,单击 vpc-secure-bastion-vsi保留 浮动 IP,方法是单击 网络接口下的 编辑 图标,然后在 浮动 IP 地址 下选择 保留新的浮动 IP。 单击保存以完成。

测试您的防御

防御的浮动 IP 地址处于活动状态后,尝试使用 ssh 连接到该地址:

ssh -i ~/.ssh/<PRIVATE_KEY> root@<BASTION_FLOATING_IP_ADDRESS>

使用维护访问规则配置安全组

通过对运行中防御的访问权,继续创建用于安装和更新软件之类的维护任务的安全组。

  1. 网络下选择 安全组,然后单击 创建

  2. 输入 vpc-secure-maintenance-sg 作为名称,并选择之前创建的VPC。

  3. 选择与 VPC 相同的资源组。

  4. 接下来,添加下表中显示的 inbound 规则。 它允许从防御主机进行 SSH 访问。

    维护: 入站规则
    协议 端口/值 源类型
    TCP 端口 22-22 安全组 vpc-secure-bastion-sg
  5. 接下来,添加下表中显示的 出站 规则。 它允许从防御主机进行 SSH 访问。

    维护: 出站规则
    协议 端口/值 目标类型
    TCP 端口 80-80 任意
    TCP 端口 443-443 任意
    TCP 端口 53-53 任意
    UDP 端口 53-53 任意

    DNS 服务器请求在端口 53 上进行处理。 DNS 使用 TCP 进行专区传输,使用 UDP 进行名称查询,查询可以是定期(主要)或逆向的。 HTTP 请求位于端口 80 和 443 上。

  6. 单击创建安全组以创建安全组。

  7. 导航至安全组,然后选择 vpc-secure-bastion-sg

  8. 最后,编辑安全组,并添加以下出站规则。

    堡垒: 出站规则
    协议 目标类型 目标 端口/值
    TCP 安全组 vpc-secure-maintenance-sg 端口 22-22

使用防御主机访问 VPC 中的其他实例

在本节中,您将创建一个包含虚拟服务器实例和安全组的子网。

如果您已经在 VPC 中创建了要连接的虚拟服务器实例,则可以跳过接下来的三个部分,从 将虚拟服务器实例添加到维护安全组 开始。

创建子网

新建子网:

  1. 点击左侧面板中 “网络”下的 “子网”,然后点击 “创建”。
    1. 输入 vpc-secure-private-subnet 作为名称,然后选择您创建的 VPC。
    2. 选择与 VPC 相同的资源组。
    3. 选择地点
    4. 保留地址前缀不变,并将IP地址总数设置为256。
  2. 公共网关切换到已连接
  3. 单击创建子网以进行供应。

创建安全组

新建安全组:

  1. 单击“网络”下的 安全组,然后单击 创建
  2. 输入 vpc-secure-private-sg 作为名称,然后选择先前创建的 VPC。
  3. 单击创建安全组

创建虚拟服务器实例

在新创建的子网中创建虚拟服务器实例:

  1. 单击先前在 子网下创建的子网 vpc-secure-private-subnet
  2. 单击 附加资源,在 附加实例下,单击 创建
  3. 要配置实例,请执行以下操作:
    1. 输入唯一名称 vpc-secure-private-vsi 和先前的资源组。
    2. 选择已由防御主机虚拟服务器使用的相同位置
    3. 选择 公共 类型的虚拟服务器。
    4. 图像 下,单击 更改图像。 使用搜索字段来选择 Ubuntu Linux 作为 操作系统。 可以选取该映像的任何版本。
    5. 单击 更改概要文件,选择 计算 作为类别,并选取 cx2-2x4 (2 vCPUs 和 4 GB RAM) 作为概要文件。
    6. 对于 SSH 密钥,选取您先前为防御创建的 SSH 密钥。
  4. 再往下,选择您创建的 VPC。 与上面类似,单击 网络连接和虚拟网络接口详细信息vpc-secure-private-subnet 的“编辑”图标。
    1. 接下来,验证是否选择了 vpc-secure-private-subnet。 单击下一步
    2. 对于 安全组 部分中的 网络,取消选中缺省安全组并标记 vpc-secure-private-sg。 单击 下一步
    3. 在“IP 配置”对话框中,保留所有内容,然后单击 下一步
    4. 最后,查看所有内容并通过单击 保存完成。
  5. 点击创建虚拟服务器

将虚拟服务器实例添加到维护安全组中

对于服务器上的管理工作,您必须将特定虚拟服务器与维护安全组关联。 接下来,您将启用维护,登录到专用服务器,更新软件包信息,然后再次解除关联安全组。

接下来为服务器启用维护安全组。

  1. 导航至安全组,并选择 vpc-secure-maintenance-sg 安全组。
  2. 单击 连接的资源 选项卡,然后在过滤器中选择 虚拟服务器接口
  3. 单击 编辑虚拟服务器接口 以查看 VSI 的列表。 展开列表并检查 vpc-secure-private-vsi接口 列旁边的选择。
  4. 单击保存以应用更改。

连接到实例

要使用实例的专用 IP 通过 SSH 登录到该实例,您将使用防御主机作为跳板机

  1. 在左侧菜单中,选择“计算”部分中的 虚拟服务器实例。 请注意 vpc-secure-private-vsi保留 IP (专用 IP) 地址。

  2. 使用ssh命令和 -J 登录服务器,使用之前使用的堡垒浮动IP地址和刚刚查询的服务器专用IP地址

    ssh -J root@<BASTION_FLOATING_IP_ADDRESS> root@<PRIVATE_IP_ADDRESS>
    

    -J 标志在 OpenSSH V 7.3+ 中受支持。在较低版本中,-J 不可用。 在这种情况下,最安全和最直接的方法是使用 ssh 的 stdio 转发 (-W) 方式通过防御主机“弹回”连接。例如,ssh -o ProxyCommand="ssh -W %h:%p root@<BASTION_FLOATING_IP_ADDRESS" root@<PRIVATE_IP_ADDRESS>

安装软件并执行维护任务

连接后,您可以在虚拟服务器上安装软件或执行维护任务。

  1. 首先,更新软件包信息:
    apt-get update
    
  2. 安装所需的软件,例如 Nginx、MySQL 或 IBM Db2。

完成后,使用 exit 命令断开服务器的连接。

为了满足互联网用户 HTTP / HTTPS 的请求,为VSI分配一个 浮动IP,并通过专用VSI安全组中的入站规则打开所需端口(80 - HTTP 和443 - HTTPS )。

禁用维护安全组

完成软件安装或维护后,您应从维护安全组除去虚拟服务器,以使其保持隔离。

  1. 导航至安全组,并选择 vpc-secure-maintenance-sg 安全组。
  2. 单击 附加资源,然后单击 编辑虚拟服务器接口
  3. 展开虚拟服务器实例,取消勾选 vpc-secure-private-vsi 接口列旁边的选项。
  4. 单击保存以应用更改。

您可以使用跳转主机选项从上面重复 ssh 命令。 现在应该失败了。

除去资源

  1. 通过单击相应的操作菜单,切换到 虚拟服务器实例停止删除 实例。
  2. 删除 VSI 之后,切换到子网并删除子网。
  3. 删除子网后,切换到 VPC选项卡并删除您的VPC。

使用控制台时,您可能需要刷新浏览器以在删除资源后查看更新后的状态信息。