简介
本文档介绍使用Ansible自动配置Firepower威胁防御(FTD)接口IP的Firepower管理中心(FMC)的步骤。
先决条件
要求
Cisco 建议您了解以下主题:
- Ansible
- Ubuntu服务器
- 思科Firepower管理中心(FMC)虚拟
- 思科Firepower威胁防御(FTD)虚拟
在这个实验室的背景下,Ansible被部署在Ubuntu。
必须确保Ansible成功安装在Ansible支持的任何平台上,才能运行本文中引用的Ansible命令。
使用的组件
本文档中的信息基于以下软件和硬件版本:
- Ubuntu服务器22.04
- Ansible 2.10.8
- Python 3.10
- 思科Firepower威胁防御虚拟7.4.1
- 思科Firepower管理中心虚拟7.4.1
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
Ansible是一个功能齐全的工具,在管理网络设备方面显示了显着的功效。使用Ansible可以采用多种方法来运行自动化任务。本文所采用的方法为试验提供了参考。
在本示例中,成功运行攻略示例后,接口ip地址、掩码和接口名称将更新为FTD。
配置
网络图
拓扑
配置
因为 思科不支持示例脚本或客户编写的脚本, 我们提供了一些示例,您可以根据自己的需求进行测试。
必须确保已经正式完成初步核查。
- Ansible服务器具有Internet连接。
- Ansible服务器能够成功与FMC GUI端口通信(FMC GUI的默认端口为443)。
- FTD已成功注册到FMC。
步骤1: 通过SSH或控制台连接到Ansible服务器的CLI。
第二步:运行命令ansible-galaxy collection install cisco.fmcansible
,以便在Ansible服务器上安装FMC的Ansible集合。
cisco@inserthostname-here:~$ ansible-galaxy collection install cisco.fmcansible
第三步:运行命mkdir /home/cisco/fmc_ansible
令,以创建新的文件夹来存储相关文件。在本示例中,主目录为/home/cisco/,新文件夹名称为fmc_ansible。
cisco@inserthostname-here:~$ mkdir /home/cisco/fmc_ansible
第四步: 导航到文件夹/home/cisco/fmc_ansible,创建资产文件。在本示例中,资产文件名为inventory.ini。
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
inventory.ini
您可以复制此内容并将其粘贴以供使用,并使用准确的参数更改突出显示的部分。
[fmc]
10.0.5.11
[fmc:vars]
ansible_user=cisco
ansible_password=cisco
ansible_httpapi_port=443
ansible_httpapi_use_ssl=True
ansible_httpapi_validate_certs=False
network_type=HOST
ansible_network_os=cisco.fmcansible.fmc
第五步: 导航到文件夹/home/cisco/fmc_ansible,创建变量文件。在本示例中,变量文件名为fmc-configure-interface-vars.yml。
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
fmc-configure-interface-vars.yml inventory.ini
您可以复制此内容并将其粘贴以供使用,并使用准确的参数更改突出显示的部分。
user:
domain: 'Global'
onboard:
acp_name: 'TEMPACP'
device_name:
ftd1: 'FTDA'
ftd_data:
outside_name: 'Outside'
inside_name: 'Inside'
dmz_name: 'DMZ'
outside_ip: '10.1.1.1'
inside_ip: '10.1.2.1'
dmz_ip: '10.1.3.1'
mask24: '255.255.255.0'
第6步:导航到文件夹/home/cisco/fmc_ansible,创建攻略文件。在本示例中,手册文件名为fmc-configure-interface-playbook.yaml。
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
fmc-configure-interface-playbook.yaml fmc-configure-interface-vars.yml inventory.ini
您可以复制此内容并粘贴以备使用,并使用准确的参数更改突出显示的部分。
---
- name: Update FTD Interface IP Address
hosts: fmc
connection: httpapi
tasks:
- name: Task01 - Get User Domain
cisco.fmcansible.fmc_configuration:
operation: getAllDomain
filters:
name: "{{ user.domain }}"
register_as: domain
- name: Task02 - Get Devices
cisco.fmcansible.fmc_configuration:
operation: getAllDevice
path_params:
domainUUID: '{{ domain[0].uuid }}'
query_params:
expanded: true
filters:
name: "{{ device_name.ftd1 }}"
register_as: device_list
- name: Task03 - Get Physical Interfaces
cisco.fmcansible.fmc_configuration:
operation: getAllFTDPhysicalInterface
path_params:
containerUUID: '{{ device_list[0].id }}'
domainUUID: '{{ domain[0].uuid }}'
register_as: physical_interfaces
- name: Task04 - Setup Outside Interface with static IP
cisco.fmcansible.fmc_configuration:
operation: updateFTDPhysicalInterface
data:
ifname: "{{ ftd_data.outside_name }}"
ipv4:
static:
address: "{{ Outside_ip | default(ftd_data.outside_ip) }}"
netmask: "{{ Outside_netmask | default(ftd_data.mask24) }}"
MTU: 1500
enabled: True
mode: NONE
type: physicalinterface
name: GigabitEthernet0/0
path_params:
domainUUID: '{{ domain[0].uuid }}'
containerUUID: '{{ device_list[0].id }}'
objectId: '{{ physical_interfaces[0].id }}'
- name: Task05 - Setup Inside Interface with static IP
cisco.fmcansible.fmc_configuration:
operation: updateFTDPhysicalInterface
data:
ifname: "{{ ftd_data.inside_name }}"
ipv4:
static:
address: "{{ Inside_ip | default(ftd_data.inside_ip) }}"
netmask: "{{ Inside_netmask | default(ftd_data.mask24) }}"
MTU: 1500
enabled: True
mode: NONE
type: physicalinterface
name: GigabitEthernet0/1
path_params:
domainUUID: '{{ domain[0].uuid }}'
containerUUID: '{{ device_list[0].id }}'
objectId: '{{ physical_interfaces[1].id }}'
- name: Task06 - Setup DMZ Interface with static
cisco.fmcansible.fmc_configuration:
operation: updateFTDPhysicalInterface
data:
ifname: "{{ ftd_data.dmz_name }}"
ipv4:
static:
address: "{{ DMZ_ip | default(ftd_data.dmz_ip) }}"
netmask: "{{ DMZ_netmask | default(ftd_data.mask24) }}"
MTU: 1500
enabled: True
mode: NONE
type: physicalinterface
name: GigabitEthernet0/2
path_params:
domainUUID: '{{ domain[0].uuid }}'
containerUUID: '{{ device_list[0].id }}'
objectId: '{{ physical_interfaces[2].id }}'
- name: Task07 - Get Deployable Devices
cisco.fmcansible.fmc_configuration:
operation: getDeployableDevice
path_params:
domainUUID: '{{ domain[0].uuid }}'
query_params:
expanded: true
register_as: deploy_devices
- name: Task08 - Start Deployment
cisco.fmcansible.fmc_configuration:
operation: createDeploymentRequest
data:
version: '{{ deploy_devices[0].version }}'
deviceList:
- '{{ deploy_devices[0].device.id }}'
forceDeploy: True
path_params:
domainUUID: '{{ domain[0].uuid }}'
register_as: deployment_job
- name: Wait for Deployment Complete
ansible.builtin.wait_for:
timeout: 120
delegate_to: localhost
- name: Task09 - Poll Deployment Status Until Deployment Successful
cisco.fmcansible.fmc_configuration:
operation: getDeploymentDetail
path_params:
containerUUID: '{{ deploy_devices[0].device.id }}'
domainUUID: '{{ domain[0].uuid }}'
register_as: deployment_status
until: deployment_status[0].status is match("SUCCEEDED")
retries: 200
delay: 3
- name: Task10 - Stop The Playbook If The Deployment Failed
fail:
msg: 'Deployment failed. Status: {{ deployment_status[0].status }}'
when: deployment_status[0].status is not match("SUCCEEDED")
注意:本示例手册中突出显示的名称用作变量。这些变量的对应值保留在变量文件中。
步骤 7. 导航到文件夹/home/cisco/fmc_ansible, run命令 ansible-playbook -i
.ini
.yaml -e@"
.yml"
才能演出不可能的任务。
在本示例中,命令为ansible-playbook -i inventory.ini fmc-configure-interface-playbook.yaml -e@"fmc-configure-interface-vars.yml"
。
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
cisco@inserthostname-here:~/fmc_ansible$ ls
fmc-configure-interface-playbook.yaml fmc-configure-interface-vars.yml inventory.ini
cisco@inserthostname-here:~/fmc_ansible$ ansible-playbook -i inventory.ini fmc-configure-interface-playbook.yaml -e@"fmc-configure-interface-vars.yml"
PLAY [Update FTD Interface IP Address] ***************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************************
ok: [10.0.5.11]
TASK [Task01 - Get User Domain] **********************************************************************************************************************************
ok: [10.0.5.11]
TASK [Task02 - Get Devices] **************************************************************************************************************************************
ok: [10.0.5.11]
TASK [Task03 - Get Physical Interfaces] **************************************************************************************************************************
ok: [10.0.5.11]
TASK [Task04 - Setup Outside Interface with static IP] ***********************************************************************************************************
changed: [10.0.5.11]
TASK [Task05 - Setup Inside Interface with static IP] ************************************************************************************************************
changed: [10.0.5.11]
TASK [Task06 - Setup DMZ Interface with static] ******************************************************************************************************************
changed: [10.0.5.11]
TASK [Task07 - Get Deployable Devices] ***************************************************************************************************************************
ok: [10.0.5.11]
TASK [Task08 - Start Deployment] *********************************************************************************************************************************
changed: [10.0.5.11]
TASK [Wait for Deployment Complete] ******************************************************************************************************************************
ok: [10.0.5.11]
TASK [Task09 - Poll Deployment Status Until Deployment Successful] ***********************************************************************************************
ok: [10.0.5.11]
TASK [Task10 - Stop The Playbook If The Deployment Failed] *******************************************************************************************************
skipping: [10.0.5.11]
PLAY RECAP *******************************************************************************************************************************************************
10.0.5.11 : ok=11 changed=4 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
验证
使用本部分可确认配置能否正常运行。
通过SSH或控制台和r连接到FTD的CLI运行命令 show interface ip brief
和.show running-config interface GigabitEthernet 0/X
接口名称、IP地址和掩码配置成功。
> show interface ip brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 10.1.1.1 YES manual up up
GigabitEthernet0/1 10.1.2.1 YES manual up up
GigabitEthernet0/2 10.1.3.1 YES manual up up
> show running-config interface GigabitEthernet 0/0
!
interface GigabitEthernet0/0
nameif Outside
cts manual
propagate sgt preserve-untag
policy static sgt disabled trusted
security-level 0
ip address 10.1.1.1 255.255.255.0
> show running-config interface GigabitEthernet 0/1
!
interface GigabitEthernet0/1
nameif Inside
cts manual
propagate sgt preserve-untag
policy static sgt disabled trusted
security-level 0
ip address 10.1.2.1 255.255.255.0
> show running-config interface GigabitEthernet 0/2
!
interface GigabitEthernet0/2
nameif DMZ
cts manual
propagate sgt preserve-untag
policy static sgt disabled trusted
security-level 0
ip address 10.1.3.1 255.255.255.0
故障排除
本部分提供的信息可用于对配置进行故障排除。
要查看ansible攻略手册的更多日志,您可以使用 — vvv运行ansible攻略
cisco@inserthostname-here:~/fmc_ansible$ ansible-playbook -i inventory.ini fmc-configure-interface-playbook.yaml -e@"fmc-configure-interface-vars.yml" -vvv
相关信息
Cisco Devnet FMC Ansible