IBM Cloud Docs
使用瞻博网络vSRX创建气隙

使用瞻博网络vSRX创建气隙

只有在创建隔离恢复环境并使用瞻博网络® vSRX 隔离环境时,才需要执行以下步骤。

Ansible® playbook 用于配置瞻博网络 vSRX 以允许从生产环境中的 Veeam 备份代理向隔离恢复环境中的 Veeam® Linux® 加固存储库传输流量。 网络备份完成后,使用 Ansible playbook 阻止流量,将 Veeam Linux 加固存储库与生产环境隔离。 Ansible playbook 由自动化服务器上的 cron 作业启动。

该文档还介绍了第二个 Ansible 游戏本,可用于安排气隙的打开和关闭。

可对游戏簿进行扩展,以触发 Veeam 备份工作,而不是按照由 Veeam 备份服务器控制的计划运行备份工作。 有关使用 Veeam PowerShell 模块的更多信息,请参阅 Start-VBRJob

作为替代方案,可以在备份任务前后使用脚本,连接到自动化服务器并启动 Ansible playbook。 有关更多信息,请参阅 Script 设置New-PSSession

New-PSSession 模块需要 PowerShell 7. 有关详细信息,请参阅 安装 MSI 软件包

另一种方法是使用 Posh-Junos® PowerShell 模块,直接从 Veeam 备份服务器与 vSRX 连接。 有关更多信息,请参阅 如何编写脚本:Windows® PowerShell

打开和关闭气隙

该文件没有描述瞻博网络 vSRX 的配置。 您必须创建所需的配置。 播放书假定 vSRX 配置包括以下项目:

  • 一个名为 sa-ansible 的用户,带有 SSH 密钥。
    • 设置系统登录用户 sa-ansible uid 2002
    • 设置系统登录用户 sa-ansible class super-user
    • 设置系统登录用户 sa-ansible authentication ssh-rsa <public_key>
  • NETCONF 已启用。
    • 设置系统服务 netconf ssh 端口 830
    • 从目标地址设置防火墙过滤器 PROTECT-IN term NETCONF <vSRX_private_ip>/32
    • 从协议 TCP 设置防火墙过滤器 PROTECT-IN term NETCONF
    • 从目标端口设置防火墙过滤器 PROTECT-IN term NETCONF 830
    • 设置防火墙过滤器 PROTECT-IN term NETCONF,然后接受
  • 安全区的配置如下。
    • IBM_CLOUD_PRIVATE 上的 reth0(不受信任的网络)
    • IBM_CLOUD_PUBLIC 上的 reth1(不受信任的网络)
    • IRE_PRIVATE 上的 reth2(可信网络)
    • IRE_PUBLIC 上的 reth3(可信网络)
  • 在名为 CYBER 的地址簿中,为 Veeam 代理和 Veeam Linux加固存储库创建地址簿条目。
    • 设置安全地址簿 CYBER 地址 PROXY_1 <proxy_1_ip>/32
    • 设置安全地址簿 CYBER 地址 PROXY_2 <proxy_2_ip>/32
    • 设置安全地址簿 CYBER 地址 LHBR_1 <lhbr_ip>/32
    • 设置安全地址簿 CYBER 地址设置 CYBER_PROD 地址 PROXY_1
    • 设置安全地址簿 CYBER 地址设置 CYBER_PROD 地址 PROXY_2
    • 设置安全地址簿 CYBER 地址设置 CYBER_IRE 地址 LHBR_1
    • 设置安全地址簿 CYBER 附加区域 IBM_CLOUD_PRIVATE
    • 设置安全地址簿 CYBER 附加区域 IRE_PRIVATE
  • 一个自定义应用程序,用于定义 TCP 端口 2500 - 3300,这是 Veeam 用作数据传输通道的默认端口范围。
    • 设置应用程序 - 应用程序 VEEAM_DATA 协议 TCP
    • 设置应用程序 - 应用程序 VEEAM_DATA 目的地端口 2500-3300
  • 定义的安全策略可拒绝从 Veeam 代理到 Veeam Linux加固存储库的流量。
    • 设置区域 IBM_CLOUD_PRIVATE 至区域 IRE_PRIVATE 的安全策略 policy AIRGAP match source-address CYBER_PROD
    • 设置区域 IBM_CLOUD_PRIVATE 至区域 IRE_PRIVATE 的安全策略 policy AIRGAP match destination-address CYBER_IRE
    • 将安全策略从区域 IBM_CLOUD_PRIVATE 设置为区域 IRE_PRIVATE 策略 AIRGAP 匹配应用程序 VEEAM_DATA
    • 将安全策略从区域 IBM_CLOUD_PRIVATE 设置为区域 IRE_PRIVATE 策略 AIRGAP 然后拒绝
    • 将安全策略从区域 IBM_CLOUD_PRIVATE 设置为区域 IRE_PRIVATE 策略 AIRGAP,然后登录会话启动
    • 将安全策略从区域 IBM_CLOUD_PRIVATE 设置为区域 IRE_PRIVATE 策略 AIRGAP,然后记录会话-关闭
    • 将安全策略从区域 IBM_CLOUD_PRIVATE 设置为区域 IRE_PRIVATE 策略 AIRGAP 然后计数

Ansible playbook 使用 junipernetworks.junos.junos_config 模块,可管理运行瞻博网络 JUNOS 的设备上的配置。 该模块要求在被管理的远程设备上启用 NETCONF 系统服务。 可使用 ansible-galaxy collection install junipernetworks.junos 命令在 Ansible 服务器上安装该模块。

Ansible hosts 文件包含以下几行:

[vsrx]
gateway01 ansible_host=<vsrx_private_ip> ansible_user=sa-ansible ansible_connection=ansible.netcommon.netconf ansible_network_os=junipernetworks.junos.junos
  • [vsrx] 需要与 airgap.yml 文件中的 - hosts: vsrx 项匹配。
  • <vsrx_private_ip> 是运行 Ansible 的自动化服务器可访问的 vSRX 的私有 IP 地址。
  • ansible 用户需要与 vSRX, 例如 set system login user sa-ansible.

使用 ansible-playbook airgap.yml --tag openansible-playbook airgap.yml --tag close 运行 Ansible 游戏本。

  • 脚本通过 NETCONF 以用户 sa-ansible 和 SSH 密钥的身份通过专用 IP 地址连接到 vSRX。

  • 使用命令 show security policies policy-name AIRGAP 并显示输出。

  • 如果使用 --tag close 选项,则运行 set security policies from-zone IBM_CLOUD_PRIVATE to-zone IRE_PRIVATE policy AIRGAP then deny 命令。

  • 如果使用 --tag open 选项,则运行 set security policies from-zone IBM_CLOUD_PRIVATE to-zone IRE_PRIVATE policy AIRGAP then permit 命令。

  • 再次使用命令 show security policies policy-name AIRGAP 并显示输出结果。

  • 在 vSRX 设备上使用 ansible - airgap openedansible - airgap closed 注释时,可以看到 show system commit 注释。

    0   2022-04-22 10:48:40 UTC by sa-ansible via netconf
    ansible - airgap opened
    1   2022-04-22 10:30:21 UTC by sa-ansible via netconf
    ansible - airgap closed
    

Ansible playbook 文件 airgap.yml 包含以下几行:

- hosts: vsrx
  connection: local
  gather_facts: no

  tasks:
    - name: Get show security policies policy-name AIRGAP
      junipernetworks.junos.junos_command:
        commands:
        - show security policies policy-name AIRGAP
      register: airgap_policy
      tags:
        - open
        - close

    - name: Display AIRGAP security policy
      debug:
        var: airgap_policy.stdout_lines
      tags:
        - open
        - close

    - name: Close airgap
      junipernetworks.junos.junos_config:
        lines:
          - set security policies from-zone IBM_CLOUD_PRIVATE to zone IRE_PRIVATE policy AIRGAP then deny
        comment: ansible - airgap closed
      tags: close

    - name: Open airgap
      junipernetworks.junos.junos_config:
        lines:
          - set security policies from-zone IBM_CLOUD_PRIVATE to zone IRE_PRIVATE policy AIRGAP then permit
        comment: ansible - airgap opened
      tags: open

    - name: Get show security policies policy-name AIRGAP
      junipernetworks.junos.junos_command:
        commands:
        - show security policies policy-name AIRGAP
      register: airgap_policy
      tags:
        - open
        - close

    - name: Display AIRGAP security policy
      debug:
        var: airgap_policy.stdout_lines
      tags:
        - open
        - close

安排

下面的文件 sched_airgap.yml 使用自动化服务器上的 cron 根据计划打开和关闭气隙。 ansible-playbook sched_airgap.yml --tags set 命令配置 cron 作业,而 ansible-playbook sched_airgap.yml --tags cancel 命令则删除 cron 作业。 您可以使用 crontab -l 命令进行验证。 Ansible 的输出记录在日志文件 /swlib/ansible/airgap.log 中。 以下示例在每天 01:00 打开气隙,05:00 关闭气隙。

- hosts: localhost
  connection: local
  gather_facts: no

  tasks:
  - name: Create the airgap-open cron job
    ansible.builtin.cron:
      name: airgap-open
      weekday: "*"
      minute: "*"
      hour: "1"
      job: "ansible-playbook -i /swlib/ansible/hosts /swlib/ansible/airgap.yml --tags open >>/swlib/ansible/airgap.log"
    tags: set

  - name: Create the airgap-close cron job
    ansible.builtin.cron:
      name: airgap-close
      weekday: "*"
      minute: "*"
      hour: "5"
      job: "ansible-playbook -i /swlib/ansible/hosts /swlib/ansible/airgap.yml --tags close >>/swlib/ansible/airgap.log"
    tags: set

  - name: Delete the airgap-open cron job
    ansible.builtin.cron:
      name: airgap-open
      state: absent
    tags: cancel

  - name: Delete the airgap-close cron job
    ansible.builtin.cron:
      name: airgap-close
      state: absent
    tags: cancel

如果您正在创建网络恢复隔离恢复环境解决方案架构,请参阅 生产环境配置 了解详细信息。