はじめに
このドキュメントでは、REST APIを使用してFirepower Device Management(FDM)バージョン6.7で簡易ネットワーク管理プロトコル(SNMP)を有効にする方法について説明します。
前提条件
要件
次の項目に関する知識があることが推奨されます。
- Firepower Device Management(FDM)バージョン6.7で管理されるFirepower Threat Defense(FTD)
- REST APIの知識
- SNMPの知識
使用するコンポーネント
Firepower Device Managementバージョン6.7で管理されるFirepower Threat Defense。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
背景説明
6.7の新機能
FTD Device REST APIは、SNMPサーバ、ユーザ、ホスト、およびホストグループの設定と管理をサポートします。FP 6.7でSNMP FTD Device REST APIがサポートされている場合:
- ユーザは、FTD Device REST APIを使用してSNMPを設定し、ネットワークを管理できます。
- SNMPサーバ、ユーザ、およびホスト/ホストグループは、FTD Device REST APIを使用して追加/更新または管理できます。
このドキュメントに含まれる例は、FDM APIエクスプローラによる構成手順を説明しています。
注:SNMPは、FTDがバージョン6.7を実行し、FDMによって管理されている場合にのみ、REST APIを介して設定できます。
機能概要 – SNMP FTD Device REST APIのサポート
- この機能は、SNMPに固有の新しいFDM URLエンドポイントを追加します。
- これらの新しいAPIを使用して、システムを監視するポーリングおよびトラップ用のSNMPを設定できます。
- APIを介したSNMP設定後、Firepowerデバイス上の管理情報ベース(MIB)は、NMSまたはSNMPクライアント上のポーリングまたはトラップ通知に使用できます。
SNMP API/URLエンドポイント
URL |
方式 |
モデル |
/devicesettings/default/snmpservers |
GET |
SNMPサーバ |
/devicesettings/default/snmpservers/{objId} |
PUT、GET(取得) |
SNMPサーバ |
/object/snmphosts |
投稿、取得 |
SNMPHost |
/object/snmphosts/{objId} |
PUT、DELETE、GET |
SNMPHost |
/object/snmpusergroups |
投稿、取得 |
SNMPUserGroup(ユーザグループ) |
/object/snmpusergroups/{objId} |
PUT、DELETE、GET |
SNMPUserGroup(ユーザグループ) |
/object/snmpusers |
投稿、取得 |
SNMPUser |
/object/snmpusers/{objId} |
PUT、DELETE、GET |
SNMPUser |
設定
SNMPホストには、3つのプライマリバージョンがあります。
- SNMP V1
- SNMP V2C
- SNMPバージョン3
これらはそれぞれ、securityConfigurationに固有の形式を持っています。 V1およびV2C:設定をV1またはV2Cとして識別するコミュニティストリングとタイプフィールドが含まれています。
SNMP V3の場合:有効なSNMP V3ユーザと、設定をV3として識別するタイプフィールドが含まれています。
SNMP v3
1. FDM APIエクスプローラにアクセスします。
FDM GUIからFDM REST APIエクスプローラにアクセスするには、3ドットを選択し、次にAPIエクスプローラを選択します。または、URL API Explorerに移動します。
2. ネットワークオブジェクトの構成
SNMPホストの新しいネットワークオブジェクトを作成します。FDM APIエクスプローラで、NetworkObjectを選択し、次に/object/networksを選択します:
SNMPホストのJSON形式は次のとおりです。このJSONを本文セクションに貼り付け、SNMPホストのIPアドレスに一致するように値のIPアドレスを変更します。
{
"version": "null",
"name": "snmpHost",
"description": "SNMP Server Host",
"subType": "HOST",
"value": "192.168.203.61",
"isSystemDefined": false,
"dnsResolution": "IPV4_ONLY",
"type": "networkobject"
}
下にスクロールしてTRY IT OUT!ボタンを選択し、APIコールを実行します。コールが成功すると、応答コード200が返されます。
レスポンス本文のJSONデータをメモ帳にコピーします。後で、SNMPホストに関する情報を入力する必要があります。
3. 新しいSNMPv3ユーザを作成します。
FDM APIエクスプローラで、「SNMP」を選択し、次に「POST」/object/snmpusersを選択します。
このJSONデータをメモ帳にコピーし、目的のセクション(authenticationPassword、encryptionPassword、アルゴリズムなど)を変更します。
{
"version": null,
"name": "snmpUser",
"description": "SNMP User",
"securityLevel": "PRIV",
"authenticationAlgorithm": "SHA",
"authenticationPassword": "cisco123",
"encryptionAlgorithm": "AES128",
"encryptionPassword": "cisco123",
"id": null,
"type": "snmpuser"
}
注意:この例で使用されているパスワードは説明のみを目的としています。実稼働環境では、強力なパスワードを使用してください
変更されたJSONデータをbodyセクションにコピーします。
下にスクロールしてTRY IT OUT!ボタンを選択し、APIコールを実行します。コールが成功すると、応答コード200が返されます。レスポンス本文のJSONデータをメモ帳にコピーします。後で、SNMPユーザに関する情報を入力する必要があります。
4. インターフェイス情報を取得します。
FDM APIエクスプローラで、「Interface」を選択し、「/devices/default/interfaces」を選択します。SNMPサーバに接続するインターフェイスから情報を収集する必要があります。
下にスクロールしてTRY IT OUT!ボタンを選択し、APIコールを実行します。コールが成功すると、応答コード200が返されます。レスポンス本文のJSONデータをメモ帳にコピーします。後で、インターフェイスに関する情報を入力する必要があります。
JSONデータのインターフェイスのバージョン、名前、ID、およびタイプを覚えておいてください。インターフェイス内部のJSONデータの例:
{
"version": "kkpkibjlu6qro",
"name": "inside",
"description": null,
"hardwareName": "Ethernet1/2",
"monitorInterface": true,
"ipv4": {
"ipType": "STATIC",
"defaultRouteUsingDHCP": false,
"dhcpRouteMetric": null,
"ipAddress": {
"ipAddress": "192.168.203.71",
"netmask": "255.255.255.0",
"standbyIpAddress": null,
"type": "haipv4address"
},
"dhcp": false,
"addressNull": false,
"type": "interfaceipv4"
},
"ipv6": {
"enabled": false,
"autoConfig": false,
"dhcpForManagedConfig": false,
"dhcpForOtherConfig": false,
"enableRA": false,
"dadAttempts": 1,
"linkLocalAddress": {
"ipAddress": "",
"standbyIpAddress": "",
"type": "haipv6address"
},
"ipAddresses": [
{
"ipAddress": "",
"standbyIpAddress": "",
"type": "haipv6address"
}
],
"prefixes": null,
"type": "interfaceipv6"
},
"managementOnly": false,
"managementInterface": false,
"mode": "ROUTED",
"linkState": "UP",
"mtu": 1500,
"enabled": true,
"macAddress": null,
"standbyMacAddress": null,
"pppoe": null,
"speedType": "AUTO",
"duplexType": "AUTO",
"present": true,
"tenGigabitInterface": false,
"gigabitInterface": false,
"id": "fc3d07d4-49d2-11eb-85a8-65aec636a0fc",
"type": "physicalinterface",
"links": {
"self": "https://10.62.148.231/api/fdm/v6/devices/default/interfaces/fc3d07d4-49d2-11eb-85a8-65aec636a0fc"
}
},
JSONデータから、内部のインターフェイスには、SNMPサーバと関連付ける必要のあるこのデータがあることがわかります。
- バージョン: kkpkibjlu6qro
- 名前:inside、id:fc3d07d4-49d2-11eb-85a8-65aec636a0fc、
- タイプ:物理インターフェイス、
5. 新しいSNMPv3ホストを作成します。
FDM APIエクスプローラで、SNMPを選択し、SNMPの下で/object/snmphosts/を転記します。
このJSONをテンプレートとして使用します。それに応じて、前の手順のデータをコピーしてテンプレートに貼り付けます。
{
"version": null,
"name": "snmpv3-host",
"description": null,
"managerAddress": {
"version": "bsha3bhghu3vmk",
"name": "snmpHost",
"id": "1d10ce6d-49de-11eb-a432-e320cd56d5af",
"type": "networkobject"
},
"pollEnabled": true,
"trapEnabled": true,
"securityConfiguration": {
"authentication": {
"version": "bmwzw4iw7php7",
"name": "snmpUser",
"id": "65da6c50-49df-11eb-a432-e7823944dabc",
"type": "snmpuser"
},
"type": "snmpv3securityconfiguration"
},
"interface": {
"version": "kkpkibjlu6qro",
"name": "inside",
"id": "fc3d07d4-49d2-11eb-85a8-65aec636a0fc",
"type": "physicalinterface"
},
"id": null,
"type": "snmphost"
}
注:
- managerAddress id、type、version、およびnameの値を、手順1で取得した情報で置き換えます。
- authenticationの値を、ステップ2で取得した情報で置き換えます。
- interfaceの値を、手順3で受け取ったデータに置き換えます。SNMP2には認証がなく、タイプはsnmpv3securityconfigurationではなくsnmpv2csecurityconfigurationです。
変更されたJSONデータをbodyセクションにコピーします。
下にスクロールしてTRY IT OUT!ボタンを選択し、APIコールを実行します。コールが成功すると、応答コード200が返されます。
FDM GUIに移動し、変更を配置します。SNMP設定の大部分を確認できます。
SNMP v2c
v2cの場合、ユーザを作成する必要はありませんが、次の手順を実行する必要があります。
- ネットワークオブジェクト構成の作成(SNMPv3セクションと同じ)
- インターフェイス情報の取得(「SNMPv3」セクションでの説明と同じ)
- 新しいSNMPv2cホストオブジェクトの作成
SNMPv2cオブジェクトを作成するJSONペイロードの例を次に示します。
{
"version": null,
"name": "snmpv2-Host",
"description": null,
"managerAddress": {
"version": "bsha3bhghu3vmk",
"name": "snmpv4hostgrp",
"id": "1d10ce6d-49de-11eb-a432-e320cd56d5af",
"type": "networkobject"
},
"pollEnabled": true,
"trapEnabled": true,
"securityConfiguration": {
"community": "cisco123",
"type": "snmpv2csecurityconfiguration"
},
"interface": {
"version": "kkpkibjlu6qro",
"name": "inside",
"id": "fc3d07d4-49d2-11eb-85a8-65aec636a0fc",
"type": "physicalinterface"
},
"id": null,
"type": "snmphost"
}
POSTメソッドを使用して、JSONペイロードを展開します。
下にスクロールして「TRY IT OUT!」ボタンを選択し、APIコールを実行します。コールが成功すると、応答コード200が返されます。
SNMP設定の削除
ステップ 1:
SNMPホスト情報の取得(SNMP > /object/snmphosts):
下にスクロールして「TRY IT OUT!」ボタンを選択し、APIコールを実行します。コールが成功すると、応答コード200が返されます。
オブジェクトのリストが表示されます。削除するsnmphostオブジェクトのIDをメモします。
{
"items": [
{
"version": "ofaasthu26ulx",
"name": "snmpv2-Host",
"description": null,
"managerAddress": {
"version": "bsha3bhghu3vm",
"name": "snmpHost",
"id": "1d10ce6d-49de-11eb-a432-e320cd56d5af",
"type": "networkobject"
},
"udpPort": 162,
"pollEnabled": true,
"trapEnabled": true,
"securityConfiguration": {
"community": "*********",
"type": "snmpv2csecurityconfiguration"
},
"interface": {
"version": "kkpkibjlu6qro",¬
"name": "inside",
"hardwareName": "Ethernet1/2",
"id": "fc3d07d4-49d2-11eb-85a8-65aec636a0fc",
"type": "physicalinterface"
},
"id": "1bfbd1f0-4ac6-11eb-a432-e76cd376bca7",
"type": "snmphost",
"links": {
"self": "https://10.62.148.231/api/fdm/v6/object/snmphosts/1bfbd1f0-4ac6-11eb-a432-e76cd376bca7"
}
},
ステップ 2:
SNMP > /object/snmphosts{objId}でDELETEオプションを選択します。手順1で収集したIDを貼り付けます。
下にスクロールして「TRY IT OUT!」ボタンを選択し、APIコールを実行します。コールは応答コード400を返します。
ステップ 3:
変更を展開します。
この導入では、ホスト情報が削除されます。
FP1120-1# show run snmp-server
snmp-server group AUTH v3 auth
snmp-server group PRIV v3 priv
snmp-server group NOAUTH v3 noauth
snmp-server location null
snmp-server contact null
snmp-server community *****
v2cのsnmpwalkが失敗します。
root@kali2:~# snmpwalk -v2c -c cisco123 -OS 192.168.203.71
Timeout: No Response from 192.168.203.71
v3では、この順序でオブジェクトを削除する必要があります。
- SNMPホスト(成功したリターンコードは204)
- SNMPユーザ(成功したリターンコードは204)
誤った順序でオブジェクトを削除しようとすると、次のエラーが発生します。
{
"error": {
"severity": "ERROR",
"key": "Validation",
"messages": [
{
"description": "You cannot delete the object because it contains SNMPHost: snmpv3-host2, SNMPHost: snmpv3-host.
You must remove the object from all parts of the configuration before you can delete it.",
"code": "deleteObjWithRel",
"location": ""
}
]
}
}
確認
SNMP v3の検証
導入後、FTD CLIに移動してSNMP設定を確認します。engineID値は自動生成されることに注意してください。
FP1120-1# connect ftd
> system support diagnostic-cli
Attaching to Diagnostic CLI ... Press 'Ctrl+a then d' to detach.
Type help or '?' for a list of available commands.
FP1120-1> enable
Password:
FP1120-1# show run all snmp-server
snmp-server group AUTH v3 auth
snmp-server group PRIV v3 priv
snmp-server group NOAUTH v3 noauth
snmp-server user snmpUser PRIV v3 engineID 80000009febdf0129a799ef469aba2d5fcf1bfd7e86135a1f8 encrypted auth sha ca:1b:18:f3:62:b1:63:7e:92:34:92:b3:cf:54:86:f9:8e:2a:4c:fd priv aes 128 ca:1b:18:f3:62:b1:63:7e:92:34:92:b3:cf:54:86:f9
snmp-server listen-port 161
snmp-server host inside 192.168.203.61 version 3 snmpUser udp-port 162
snmp-server location null
snmp-server contact null
snmp-server community *****
snmp-server enable traps snmp authentication linkup linkdown coldstart warmstart
no snmp-server enable traps syslog
no snmp-server enable traps ipsec start stop
no snmp-server enable traps entity config-change fru-insert fru-remove fan-failure power-supply power-supply-presence cpu-temperature chassis-temperature power-supply-temperature chassis-fan-failure accelerator-temperature l1-bypass-status
no snmp-server enable traps memory-threshold
no snmp-server enable traps interface-threshold
no snmp-server enable traps remote-access session-threshold-exceeded
no snmp-server enable traps connection-limit-reached
no snmp-server enable traps cpu threshold rising
no snmp-server enable traps ikev2 start stop
no snmp-server enable traps nat packet-discard
no snmp-server enable traps config
no snmp-server enable traps failover-state
no snmp-server enable traps cluster-state
snmp-server enable oid mempool
snmp-server enable
snmpwalkテスト
root@kali2:~# snmpwalk -v3 -l authPriv -u snmpUser -a SHA -A cisco123 -x AES -X cisco123 192.168.203.71
iso.3.6.1.2.1.1.1.0 = STRING: "Cisco Firepower Threat Defense, Version 6.7.0 (Build 65), ASA Version 9.15(1)"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.9.1.2663
iso.3.6.1.2.1.1.3.0 = Timeticks: (1616700) 4:29:27.00
iso.3.6.1.2.1.1.4.0 = STRING: "null"
iso.3.6.1.2.1.1.5.0 = STRING: "FP1120-1"
iso.3.6.1.2.1.1.6.0 = STRING: "null"
iso.3.6.1.2.1.1.7.0 = INTEGER: 4
...
SNMP v2cの検証
FP1120-1# show run snmp-server
snmp-server host inside 192.168.203.61 community ***** version 2c
snmp-server location null
snmp-server contact null
snmp-server community *****
v2c用snmpwalk:
root@kali2:~# snmpwalk -v2c -c cisco123 -OS 192.168.203.71
iso.3.6.1.2.1.1.1.0 = STRING: "Cisco Firepower Threat Defense, Version 6.7.0 (Build 65), ASA Version 9.15(1)"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.9.1.2663
iso.3.6.1.2.1.1.3.0 = Timeticks: (10482200) 1 day, 5:07:02.00
iso.3.6.1.2.1.1.4.0 = STRING: "null"
iso.3.6.1.2.1.1.5.0 = STRING: "FP1120-1"
iso.3.6.1.2.1.1.6.0 = STRING: "null"
iso.3.6.1.2.1.1.7.0 = INTEGER: 4
トラブルシュート
ファイアウォールでトレースによるキャプチャを有効にします。
FP1120-1# capture CAPI trace interface inside match udp any any eq snmp
snmpwalkツールを使用して、パケットが表示されることを確認します。
FP1120-1# show capture
capture CAPI type raw-data trace interface inside [Capturing - 3137 bytes]
match udp any any eq snmp
キャプチャの内容:
FP1120-1# show capture CAPI
154 packets captured
1: 17:04:16.720131 192.168.203.61.51308 > 192.168.203.71.161: udp 39
2: 17:04:16.722252 192.168.203.71.161 > 192.168.203.61.51308: udp 119
3: 17:04:16.722679 192.168.203.61.51308 > 192.168.203.71.161: udp 42
4: 17:04:16.756400 192.168.203.71.161 > 192.168.203.61.51308: udp 51
5: 17:04:16.756918 192.168.203.61.51308 > 192.168.203.71.161: udp 42
SNMPサーバの統計情報カウンタにSNMP GetまたはGet-nextの要求と応答が表示されることを確認します。
FP1120-1# show snmp-server statistics
62 SNMP packets input
0 Bad SNMP version errors
0 Unknown community name
0 Illegal operation for community name supplied
0 Encoding errors
58 Number of requested variables
0 Number of altered variables
0 Get-request PDUs
58 Get-next PDUs
0 Get-bulk PDUs
0 Set-request PDUs (Not supported)
58 SNMP packets output
0 Too big errors (Maximum packet size 1500)
0 No such name errors
0 Bad values errors
0 General errors
58 Response PDUs
0 Trap PDUs
入力パケットをトレースします。パケットは内部NLPインターフェイスに対してUN-NATです。
FP1120-1# show capture CAPI packet-number 1 trace
30 packets captured
1: 17:04:16.720131 192.168.203.61.51308 > 192.168.203.71.161: udp 39
Phase: 1
Type: CAPTURE
Subtype:
Result: ALLOW
Config:
Additional Information:
MAC Access list
Phase: 2
Type: ACCESS-LIST
Subtype:
Result: ALLOW
Config:
Implicit Rule
Additional Information:
MAC Access list
Phase: 3
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
Additional Information:
NAT divert to egress interface nlp_int_tap(vrfid:0)
Untranslate 192.168.203.71/161 to 169.254.1.3/4161
Phase: 4
Type: ACCESS-LIST
Subtype:
Result: ALLOW
Config:
Implicit Rule
Additional Information:
Phase: 5
Type: NAT
Subtype: per-session
Result: ALLOW
Config:
Additional Information:
Phase: 6
Type: IP-OPTIONS
Subtype:
Result: ALLOW
Config:
Additional Information:
Phase: 7
Type: NAT
Subtype: rpf-check
Result: ALLOW
Config:
Additional Information:
Phase: 8
Type: NAT
Subtype: per-session
Result: ALLOW
Config:
Additional Information:
Phase: 9
Type: FLOW-CREATION
Subtype:
Result: ALLOW
Config:
Additional Information:
New flow created with id 1078, packet dispatched to next module
Phase: 10
Type: INPUT-ROUTE-LOOKUP-FROM-OUTPUT-ROUTE-LOOKUP
Subtype: Resolve Preferred Egress interface
Result: ALLOW
Config:
Additional Information:
Found next-hop 169.254.1.3 using egress ifc nlp_int_tap(vrfid:0)
Phase: 11
Type: ADJACENCY-LOOKUP
Subtype: Resolve Nexthop IP address to MAC
Result: ALLOW
Config:
Additional Information:
Found adjacency entry for Next-hop 169.254.1.3 on interface nlp_int_tap
Adjacency :Active
MAC address 3208.e2f2.b5f9 hits 0 reference 1
Result:
input-interface: inside(vrfid:0)
input-status: up
input-line-status: up
output-interface: nlp_int_tap(vrfid:0)
output-status: up
output-line-status: up
Action: allow
NATルールは、SNMP設定の一部として自動的に展開されます。
FP1120-1# show nat
Manual NAT Policies (Section 1)
1 (nlp_int_tap) to (inside) source dynamic nlp_client_0_192.168.203.61_intf4 interface destination static nlp_client_0_ipv4_40 nlp_client_0_ipv4_40 service nlp_client_0_17svc162_39 nlp_client_0_17svc162_39
translate_hits = 0, untranslate_hits = 0
Auto NAT Policies (Section 2)
…
2 (nlp_int_tap) to (inside) source static nlp_server_0_snmp_intf4 interface service udp 4161 snmp
translate_hits = 0, untranslate_hits = 2
バックエンドポートでは、UDP 4161はSNMPトラフィックをリッスンします。
> expert
admin@FP1120-1:~$ sudo netstat -an | grep 4161
Password:
udp 0 0 169.254.1.3:4161 0.0.0.0:*
udp6 0 0 fd00:0:0:1::3:4161 :::*
設定が正しくない、または不完全な場合、UN-NATフェーズがないため、入力SNMPパケットはドロップされます。
FP1120-1# show cap CAPI packet-number 1 trace
6 packets captured
1: 18:36:35.868485 192.168.203.61.50105 > 192.168.203.71.161: udp 42
Phase: 1
Type: CAPTURE
Subtype:
Result: ALLOW
Config:
Additional Information:
MAC Access list
Phase: 2
Type: ACCESS-LIST
Subtype:
Result: ALLOW
Config:
Implicit Rule
Additional Information:
MAC Access list
Phase: 3
Type: ROUTE-LOOKUP
Subtype: No ECMP load balancing
Result: ALLOW
Config:
Additional Information:
Destination is locally connected. No ECMP load balancing.
Found next-hop 192.168.203.71 using egress ifc identity(vrfid:0)
Phase: 4
Type: NAT
Subtype: per-session
Result: ALLOW
Config:
Additional Information:
Phase: 5
Type: ACCESS-LIST
Subtype:
Result: DROP
Config:
Implicit Rule
Additional Information:
Result:
input-interface: inside(vrfid:0)
input-status: up
input-line-status: up
Action: drop
Drop-reason: (acl-drop) Flow is denied by configured rule, Drop-location: frame 0x0000557415b6347d flow (NA)/NA
FTD LINA syslogは、入力パケットが廃棄されたことを示しています。
FP1120-1# show log | include 161
Dec 30 2020 18:36:38: %FTD-7-710005: UDP request discarded from 192.168.203.61/50105 to inside:192.168.203.71/161
Dec 30 2020 18:36:39: %FTD-7-710005: UDP request discarded from 192.168.203.61/50105 to inside:192.168.203.71/161
Q&A
Q. FTD管理インターフェイスを使用してSNMPメッセージを送信できますか。
いいえ。これは現在サポートされていません。
関連する機能拡張の不具合:ngfw-mgmtインターフェイスの6.7 SNMP Rest APIサポート
関連情報