[toc]
# 測試目標
:::success
透過 Infoblox WAPI 建立 RPZ 清單,採用 cURL 命令 或 Postman 軟體執行 API 請求達成目標
:::
Infoblox 有提供 REST API (Web-based Application Programming Interface, WAPI),可讓管理者輕鬆將 NIOS 整合至自動化環境。
對於 Infoblox WAPI 官方有份文件 [[**Infoblox REST API NIOS 8.6**]](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-infoblox-rest-api.pdf),其中提供詳細 API 說明及範例,有興趣可以參考。
:::info
瀏覽器網址列輸入 **`https://<infoblox_ip_address>/wapidoc`**,則提供 WAPI 線上文件。

目前 WAPI 版本為 **2.12.3**。
:::
REST API 運作架構,透過命令或程式與 Infoblox 進行互動,達成靈活及彈性的應用。之後會透過簡單的 **Curl 命令**或 **Postman 軟體**執行操作測試。
<img width=480 src='https://hackmd.io/_uploads/ryy5bthnn.png'><br>
以下將針對**建立 Response Policy Zones(RPZ) 清單部份**做簡易說明(文件 pp.48 - 56),設定 RPZ 清單後可從原廠的情資中心定期更新資料庫來進行阻擋保護,一般方式會從原廠提供的 RPZ 清單,逐條手動輸入相關資訊建立完成,這裡想**透過 WAPI 方式自動化完成該項作業**。
# 使用 GUI 設定 RPZ 清單
在使用 API 方式建立 RPZ 清單前,我們先了解一下,傳統上**設定一組 RPZ 項目**,至少需要完成下列步驟:
1. 先使用瀏覽器登入 NIOS
2. 點選 **Data Management**
3. 選擇 **DNS**
4. 選擇 **Response Policy Zones**
5. 點選 **`+`** 新增 RPZ 項目
6. 選擇 **Add Response Policy Zone Feed** > Next
7. 輸入 **Name**
8. 調整 **Policy Override** [選項]
9. 調整 **Severity** [選項] > Next
10. 選擇 **Name Server Group**(ns_group)> **Save & Close**
然後根據項目數量,重複執行上述相同步驟完成建立任務。
:::warning
- 原廠提供 **RPZ 清單目前計有 17 組**,所以用手動輸入建立 RPZ 清單的操作方式,需要**執行上述步驟 17 次**。
- 這裡還似乎忘記了要事先建立 **Name Server Group**(ns_group)。
:::

# API 測試
## 操作 API 工具
操作 API 最簡單的工具就是 **Curl 命令列**,原廠文件也是以此工具作為基礎。該工具在 Linux/MacOS 應該都是預設安裝的套件。所以初期測試工具也是以 Curl 命令為主。
後續再使用 **Postman 軟體**,相關軟體應用,可以參考 [[**使用 Postman 初探 Infoblox Web-based API(WAPI) 測試**]](https://hackmd.io/@farmer87/postman_infoblox_wapi_00)。Postman 軟體降低了 API 應用的複雜程度,也可作為命令或程式進行 API 開發的輔助工具。
好了,到此就先當作跟我一樣有 API 基本概念來進行測試了。
## Schema
使用 cURL 進行 Infoblox API 連接測試,根據 [[官方文件 p.11]](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-infoblox-rest-api.pdf) 說明,將必要的參數用變數指定,先對於 **Schema** API 進行首次查詢。
**API Call** (p.11)

以下就是使用 cURL 命令執行的**腳本範例**:
```bash
## 指定 Grid Master 及 API 請求資訊
grid_master_ip='10.7.155.91'
grid_master_user='admin'
grid_master_pass='infoblox'
login="${grid_master_user}:${grid_master_pass}"
wapi_ver='v2.12.3'
wapiUri="https://${grid_master_ip}/wapi/${wapi_ver}"
## API 請求
curl -s -k -u ${login} -X GET "${wapiUri}/?_schema&_return_as_object=1"
```
**執行結果**
系統回覆查詢成功!回傳 API v2.12.3 支援的查詢物件。

按照這個範例,參考 Infoblox WAPI 官方文件,再執行幾個 API 查詢試試。
## Get Members
**API Call** (p.83)

**腳本範例**
```bash
grid_master_ip='10.7.155.91'
grid_master_user='admin'
grid_master_pass='infoblox'
login="${grid_master_user}:${grid_master_pass}"
wapi_ver='v2.12.3'
wapiUri="https://${grid_master_ip}/wapi/${wapi_ver}"
curl -s -k -u ${login} -X GET "${wapiUri}/?member?_return_as_object=1"
```
**執行結果**

## Get details of a member based on its IPv4 address
**API Call** (p.84)

**腳本範例**
```bash
grid_master_ip='10.7.155.91'
grid_master_user='admin'
grid_master_pass='infoblox'
login="${grid_master_user}:${grid_master_pass}"
wapi_ver='v2.12.3'
wapiUri="https://${grid_master_ip}/wapi/${wapi_ver}"
curl -s -k -u ${login} -X GET "${wapiUri}/member?ipv4_address=${grid_master_ip}&_return_fields%2B=vip_setting&_return_as_object=1"
```
**執行結果**

## Modify the name of a member
**API Call** (p.86)

- 若要透過 API 調整設定,就會使用 **PUT** 請求,會需要指定對象(物件),上面看到的 <font color=red>member/b25IL...ZSQw:infoblox.localdomain</font> 就是參照物件。
- 對於參照物件需要先使用 **GET** 請求來取得,所以通常在進行 **調整設定 (PUT)** 或 **刪除設定(DELETE)** 前,都會需要先取得變動物件的參照值 (Object Reference)。
- 另外使用 **PUT** 請求時,會需要在 **BODY** 部份加入所需調整的項目資訊,使用 **`--data`** 可以將資訊內容帶入,一般都會採用 **JSON 格式**。
- 如果要調整的資訊內容有點多或複雜,可以採用將內容儲存成**檔案**,在進行 API 請求時直接引入檔案即可。可參考下面 [[**建立 Name Server Group**]](#建立-Name-Server-Group) 部份。
**腳本範例**
其實沒有很困難,只是步驟多一點,根據上面的運行概念,撰寫簡單的執行腳本即可。
```bash
grid_master_ip='10.7.155.91'
grid_master_user='admin'
grid_master_pass='infoblox'
login="${grid_master_user}:${grid_master_pass}"
wapi_ver='v2.12.3'
wapiUri="https://${grid_master_ip}/wapi/${wapi_ver}"
## 指定 Grid Member 資訊
grid_member_ip='10.7.155.92'
## 查詢 Grid Member 資訊
curl -s -k -u ${login} -X GET "${wapiUri}/member?ipv4_address=${grid_member_ip}&_return_as_object=1"
```
**執行結果一**

結果顯示目前 Grid Member 的查詢資訊:
- **參照物件 (_ref)**: **`member/b25lLnZpcnR1YWxfbm9kZSQ0:test.infoblox.localdomain`**
- **主機名稱 (host_name)**: **`test.infoblox.localdomain`**
接著持續進行。
```bash
## 將指定物件參照值放入變數
grid_member_ref=$(curl -s -k -u ${login} -X GET "${wapiUri}/member?ipv4_address=${grid_member_ip}&_return_as_object=1" | jq -r '.result[]._ref') && echo ${grid_member_ref}
## 指定 Grid Member 欲調整的主機名稱
grid_member_hostname='reporting.infoblox.localdomain'
## 執行主機名稱變更
curl -s -k -u ${login} -X PUT "${wapiUri}/${grid_member_ref}" --header 'Content-Type: application/json' --data "{ \"host_name\": \"${grid_member_hostname}\" }"
```
**執行結果二**

執行完成後,再次查詢內容,顯示 Grid Member 主機名稱已變更為 **`reporting.infoblox.localdomain`**。
:::info
透過上面展示的 API Call 方式也可以完成以下程序:
- 加入 Grid 成員 (Add a member to the grid, **p.87**)
- 觸發成員加入 (Initiate member join, **p.89**)
- 設定 Grid NTP 設定 (Configure NTP, **p.81**)
- 啟用 DNS 服務 (Enable DNS Service on a member, **p.87**)
其他部份可自行參考文件測試。
:::
大致上就跟一般 API 使用方式相同,接著就直接切入**目標: 設定 RPZ 清單**。
# 組態 RPZ
## 建立 Name Server Group
設定 RPZ 清單前,請先完成 **Name Server Group (NS Group)** 建立,由於我們會採用原廠提供的情資中心定期更新 RPZ 清單,所以參考原廠提供的設定資訊,先增加一組 **External Primary Name Server**,此時系統會要求設定 **Grid Secondary**,所以第二組 Name Server 就指定 Grid Master 即可。
:::warning
- 若是有設定 Name Server 使用 **External Primary**,則 **Grid Secondary** 則為必要設定條件,且會以 **Grid Primary** 作為組態參數。(**`use_exteral_primary`**)
- 可獨立組態 **Grid Primary**。
- 由於原廠提供的 Name Server 採用 **TSIG** 確保訊息安全,請根據內容完成 **External Primary** 配置。
```
RPZ IP: 61.216.*.*
Key Name: TSIG-*******
Key Algorithm: HMAC-MD5
Key Data: D5bU9A9GkKna6w4*********************Bw3g==
```
:::
由於 Infoblox 也提供 API 配置 NS Group,這裡就直接採用 API 配置也較為簡便。
**API Call** (P.43)

根據組態資訊建立 **ns_group.json** 配置 JSON 檔。

:::info
配置 JSON 檔其實可以透過簡單的變數轉換產生!可參考 [[**附錄: 範例腳本**]](#NS-Group-轉換-JSON-組態腳本)
:::
使用 API 請求完成 NS Group 的建立並顯示結果。:100:

讓我們暫時回到 GUI 空間,同時檢驗組態,看來沒有問題!


:::info
執行到此,有沒有發現其實採用 API 進行宣告式組態的佈署極為便利。只要配置環境及架構不變動,可以在短時間就可以佈署相同環境,至於環境變動下,也可以根據部署條件修改宣告的配置參數,迅速部署環境。
:::
## 建立 RPZ 清單
讓我們回到最初目標吧!前面提到使用 GUI 進行 RPZ 配置需要**執行重複步驟 17 次**!除了擔心輸入錯誤資訊外,也浪費了不少寶貴時間。既然原廠 RPZ 清單更新配置變動不大,採用 API 進行自動化佈署應該不錯的方式?!到此應該也有所體悟了吧。
### 整理 RPZ 清單
原廠提供 RPZ 清單格式如下:

大致整理以下列表格進行呈現:
| feed | rpz_name |
| --- | --- |
| AntiMalware | antimalware.rpz.infoblox.local |
| Base | base.rpz.infoblox.local |
| Bogon | bogon.rpz.infoblox.local |
| DHS_AIS_Domain | dhs-ais-domain.rpz.infoblox.local |
| DHS_AIS_IP | dhs-ais-ip.rpz.infoblox.local |
| 以下省略 | ... |
為了後續使用 API 處立程序便利性,建議先整理成以下格式(以逗點區分的 CSV 文字檔):

:::info
- **feed** 項目作為註解(Comment)部份。
- **rpz_name** 項目作為 Name(FQDN) 部份。
- 之後版本還可以加入其他欄位,例如 **Severity**, **Policy Override** 等,在建立時可以一併調整。
- 儲存為`逗點區的 CSV 文字檔`,可簡化用於**程式選取**或**軟體匯入**作業,也便於後續**維護管理**清單。
:::
接著檢視建立 RPZ 清單的 API,使用 **POST 請求**,先前已經展示過操作方式了!進行到這裡,應該跟我一樣都有基礎 API 操作能力了吧?

每個 RPZ 設定都要提供以下 JSON 配置內容,並帶入 **BODY** 進行 POST 請求建立 RPZ 紀錄。以下是第一組 RPZ 紀錄的 JSON 配置範例:
```json
{
"fqdn": "antimalware.rpz.infoblox.local",
"comment": "AntiMalware",
"ns_group": "rpz-group",
"rpz_policy": "NODATA",
"rpz_severity": "WARNING"
}
```
:::info
| 參數 | 對應設定 | 備註 |
| --- | --- | --- |
| **fqdn** | Name | -- |
| **rpz_policy** | Policy Override | DISABLED => Log Only(Disabled)<br>GIVEN => None(Given) [**預設**]<br>**NODATA => Block(No Data)**<br>NXDOMAIN => Block(No Such Domain)<br>PASSTHRU => Passthru<br>SUBSTITUTE => Substitute(Domain Name) |
| **rpz_severity** | Severity | INFORAMATIONAL => Informational<br>**WARNING => Warning**<br>MAJOR => Major [**預設**]<br>CRITICAL => Critical |
| **comment** | Comment | 以 feed 名稱作為註解 |
:::
### 建立測試
執行以下腳本,完成第一筆 RPZ 紀錄。
```bash
grid_master_ip='10.7.155.91'
grid_master_user='admin'
grid_master_pass='infoblox'
login="${grid_master_user}:${grid_master_pass}"
wapi_ver='v2.12.3'
wapiUri="https://${grid_master_ip}/wapi/${wapi_ver}"
curl -s -k -u ${login} -X POST "${wapiUri}/zone_rp" -H'Content-Type: application/json' -d '{"fqdn": "antimalware.rpz.infoblox.local","comment": "AntiMalware","ns_group": "rpz-group","rpz_policy": "NODATA","rpz_severity": "WARNING"}'
```
**執行結果**

回到 GUI 空間檢視。OK喔!

### 大量建立
既然有第一筆紀錄建立成功的經驗,剩下的 16 筆就按照相同方式完成就好了?!
既然都是重複動作,只要變更每個 **fqdn** 和 **comment** 的參數值即可,再加上我們已經先將 RPZ 清單用 CSV 格式整理過了,輕鬆使用以下方式就可以達成目標,這裡就簡單帶過,各位可以用自己的方式完成即可。
#### 方式一
只要透過簡單的整理技法,再使用 for 迴圈重複執行就可以了!
```bash
fqdn=($(cat rpz_feed.csv | awk -F',' '{print $2}' | sed '1d'))
comment=($(cat rpz_feed.csv | awk -F',' '{print $1}' | sed '1d'))
for ((i=1;i<=${#fqdn[@]};i++)); do echo "{\"fqdn\": \"${fqdn[$i]}\",\"comment\": \"${comment[$i]}\",\"ns_group\": \"rpz-group\",\"rpz_policy\":\"NODATA\",\"rpz_severity\": \"WARNING\"}"; done
```
**執行範例**

#### 方式二
這裡使用文件 P.110 提到的 **Multiple Object Body using /request** 功能,使用**一次請求**,搭配 **JSON 配置檔** 帶入 **Body** 完成 API 動作。
:::warning
其實還是要先整理 RPZ 清單,但只要對設備執行**一次 API 請求**。
:::

同樣使用 [**整理技法**](#整理技法) 將 CSV 格式的 RPZ 清單轉換成以下檔案。可以參考 [[**附錄:範例腳本**]](#RPZ-轉換-JSON-組態腳本)。
**rpz_feed.json**
```json
[
{
"method": "POST",
"object": "zone_rp",
"data":
{
"fqdn": "antimalware.rpz.infoblox.local",
"comment": "AntiMalware",
"ns_group": "rpz-group",
"rpz_policy": "NODATA",
"rpz_severity": "WARNING"
}
},
{
"method": "POST",
"object": "zone_rp",
"data":
{
"fqdn": "base.rpz.infoblox.local",
"comment": "Base",
"ns_group": "rpz-group",
"rpz_policy": "NODATA",
"rpz_severity": "WARNING"
}
},
......
```
接著就直接執行 API 呼叫,並檢視實際執行狀態。看起來沒有問題的!:100:
```bash
curl -s -k -u ${login} -X POST "${wapiUri}/request" -H'Content-Type: application/json' -d @rpz_feed.json
```

回到 GUI 空間檢視!看起來也沒有問題的!:100:

好喔!只要執行一次 API 請求就可以完成 RPZ 清單的建立作業,雖然初期維護成本較高,但之後只要變動不大,都可以做適度調整快速完成,如果搭配其他佈署任務一同進行,應該是可以簡化 Infoblox 建置任務的。
# 試試 Postman
一般測試 API 都會透過視覺化的 Postman 來進行,使用 Postman 基本上可簡化 API 請求程序,執行時也可帶入檔案進行批次執行,這裡就簡單說明執行程序就好。Postman 基礎設定可以參考 [[**使用 Postman 初探 Infoblox Web-based API(WAPI) 測試**]](https://hackmd.io/@farmer87/infoblox_wapi_00)。
這裡就展示用匯入檔案的方式執行大量建立的方式。
## Request 設定
- **Header**

- **Body**

:::info
這裡的變數參照值等會就會按照匯入檔案的內容帶入。
:::
- **Test**

:::info
使用 **`console.log`** 可以在 API 請求完成後,在 Console 中顯示完成 RPZ 項目。
:::
## Run Collection
- 在 Collections 名稱右側點擊,選擇 **Run Collection** 執行。

- 或是在右下底部區域,點選 **Runner**。

- 選擇該 API 請求後,點選右側 **Select File** 匯入 RPZ 清單 CSV 檔案。

- 匯入 RPZ 清單,Postman 會自動取得 RPZ 清單數量作為**迭代次數**。很明顯的目前提供的 RPZ 清單為 17 筆紀錄。

- 點擊上圖右下方的 **Preview**,可預覽檔案內容確認變數參照值。**對應的變數名稱則與匯入檔案第一列一致**即可,這樣 Postman 便可自動正確取用。

- 點擊 <img width=200 src='https://hackmd.io/_uploads/rkx5T2FT3.png'>,Postman 便會重複執行 API 請求共 17 次,完成 RPZ 清單建立。

- 從 Postman Console 也可以看到佈署程序。
<img width=640 src='https://hackmd.io/_uploads/HkGmqs3C3.png'><br>
:::info
使用 Postman 軟體也是可以達成與 cURL 命令相同的結果,透過視覺化運行,也降低了 API 使用的壓力,真的是 API 好幫手。
:::
# 結論
:::success
- 使用 API 可以進行半自動化的設備組態及佈署。
- 使用 Postman 應該可以很輕鬆地進行 API 功能測試。
- 初期設置及學習成本較高,但後續導入系統及版本管理,應可降低維運成本。
- 其他 API 功能還有待學習進行測試。
:::
# 參考
- [Why use Infoblox WAPIs?](https://community.infoblox.com/t5/best-practices/why-use-infoblox-wapis/ba-p/13262)
- [Infoblox REST API NIOS 8.6](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-infoblox-rest-api.pdf)
- [Consolidate your WAPIs using the Request Object](https://blogs.infoblox.com/community/consolidate-your-wapis-using-the-request-object/)
- [The definitive list of REST examples](https://community.infoblox.com/t5/api-examples/the-definitive-list-of-rest-examples/td-p/1214)
- [Get more value out of Infoblox NIOS APIs](https://blogs.infoblox.com/community/get-more-value-out-of-infoblox-nios-apis/)
- [Interfacing with Infoblox WAPI using Python](http://dnaeon.github.io/interfacing-with-infoblox-wapi-using-python/)
- [Introduction to Infoblox API (WAPI) using Python](https://sifbaksh.com/introduction-to-infoblox-api-wapi-using-python/)
- [WAPI Documentation using Swagger](https://github.com/infobloxopen/infoblox-swagger-wapi)
---
- [Automate Infoblox Infrastructure Using Ansible](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-guide-automate-infoblox-infrastructure-using-ansible.pdf)
- [Infoblox Terraform Provider v2](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-guide-infoblox-ipam-plugin-for-terraform.pdf)
# 附錄
## NS Group 轉換 JSON 組態腳本
**ns_group.conf**
```bash
ns_group_name='rpz-group'
# external primary
external_primary_name='infoblox'
external_primary_address='61.216.*.*'
external_primary_tsigkey_name='TSIG-*******'
external_primary_tsigkey_alg='HMAC-MD5'
external_primary_tsigkey='D5bU9A9GkKna6w4******Bw3g=='
# grid secondary
grid_master_hostname='gm.infoblox.localdomain'
# options
default_grid='true'
use_external_primary='true'
```
**nsGroupConverter.sh**
```bash
#!/bin/bash
#
function conv_nsgroup_json () {
cat << EOF > ${targetConfig}
{
"name":"${ns_group_name}",
"external_primaries": [
{
"address": "${external_primary_address}",
"name": "${external_primary_name}",
"stealth": false,
"tsig_key": "${external_primary_tsigkey}",
"tsig_key_alg": "${external_primary_tsigkey_alg}",
"tsig_key_name": "${external_primary_tsigkey_name}",
"use_tsig_key_name": true
}
],
"grid_secondaries": [
{
"enable_preferred_primaries": false,
"grid_replicate": false,
"lead": false,
"name": "${grid_master_hostname}",
"preferred_primaries": [],
"stealth": false
}
],
"is_grid_default": ${default_grid},
"comment": "Created by Infoblox WAPI via cURL",
"use_external_primary": ${use_external_primary}
}
EOF
}
sourceConfig='ns_group.conf'
targetConfig='ns_group.json'
if [[ ! -f "${sourceConfig}" ]]; then
echo -e "<!> ${sourceConfig} NOT FOUND <!>"
exit
else
source ${sourceConfig}
conv_nsgroup_json
echo -e "> Convert NS_Group JSON to ${targetConfig}"
fi
```
**ns_group.json**
```json
{
"name":"rpz-group",
"external_primaries": [
{
"address": "61.216.*.*",
"name": "infoblox",
"stealth": false,
"tsig_key": "D5bU9A9GkKna6w4******Bw3g==",
"tsig_key_alg": "HMAC-MD5",
"tsig_key_name": "TSIG-*******",
"use_tsig_key_name": true
}
],
"grid_secondaries": [
{
"enable_preferred_primaries": false,
"grid_replicate": false,
"lead": false,
"name": "gm.infoblox.localdomain",
"preferred_primaries": [],
"stealth": false
}
],
"is_grid_default": true,
"comment": "Created by Infoblox WAPI via cURL",
"use_external_primary": true
}
```
## RPZ 轉換 JSON 組態腳本
**rpz_feed.csv**
```csv
zone_rp_feed,zone_rp_name,ns_group,rpz_policy,rpz_severity
AntiMalware,antimalware.rpz.infoblox.local,Rpz-group,NODATA,WARNING
Base,base.rpz.infoblox.local,Rpz-group,NODATA,WARNING
Bogon,bogon.rpz.infoblox.local,Rpz-group,NODATA,WARNING
DHS_AIS_Domain,dhs-ais-domain.rpz.infoblox.local,Rpz-group,NODATA,WARNING
DHS_AIS_IP,dhs-ais-ip.rpz.infoblox.local,Rpz-group,NODATA,WARNING
<以下省略>
```
**rpzFeedConverter.sh**
```bash
#!/bin/bash
rpzCsvfile="${1:-rpz_feed.csv}"
rpzJsonfile='rpz_feed.json'
nsGroupName='rpz-group'
rpzPolicy='NODATA'
rpzSeverity='WARNING'
if [[ ! -f "${rpzCsvfile}" ]]; then
echo -e "\n<!> RPZ Feed File [${rpzCsvfile}] NOT FOUND <!>\n"
exit
fi
feedName=($(cat ${rpzCsvfile} | awk -F',' '{print $1}' | sed '1d'))
rpzName=($(cat ${rpzCsvfile} | awk -F',' '{print $2}' | sed '1d'))
feedCount=${#feedName[@]}
echo "["
for ((i=0;i<${feedCount};i++)); do
count=$(expr $i + 1)
if [[ ${count} != ${feedCount} ]]; then
echo " {
\"method\": \"POST\",
\"object\": \"zone_rp\",
\"data\":
{
\"fqdn\": \"${rpzName[$i]}\",
\"comment\": \"${feedName[$i]}\",
\"ns_group\": \"${nsGroupName}\",
\"rpz_policy\": \"NODATA\",
\"rpz_severity\": \"WARNING\"
}
},"
else
echo " {
\"method\": \"POST\",
\"object\": \"zone_rp\",
\"data\":
{
\"fqdn\": \"${rpzName[$i]}\",
\"comment\": \"${feedName[$i]}\",
\"ns_group\": \"${nsGroupName}\",
\"rpz_policy\": \"NODATA\",
\"rpz_severity\": \"WARNING\"
}
}"
fi
done
echo "]"
```
**rpz_feed.json**
```json
[
{
"method": "POST",
"object": "zone_rp",
"data":
{
"fqdn": "antimalware.rpz.infoblox.local",
"comment": "AntiMalware",
"ns_group": "rpz-group",
"rpz_policy": "NODATA",
"rpz_severity": "WARNING"
}
},
{
"method": "POST",
"object": "zone_rp",
"data":
{
"fqdn": "base.rpz.infoblox.local",
"comment": "Base",
"ns_group": "rpz-group",
"rpz_policy": "NODATA",
"rpz_severity": "WARNING"
}
},
{
"method": "POST",
"object": "zone_rp",
"data":
{
"fqdn": "bogon.rpz.infoblox.local",
"comment": "Bogon",
"ns_group": "rpz-group",
"rpz_policy": "NODATA",
"rpz_severity": "WARNING"
}
},
{
"method": "POST",
"object": "zone_rp",
"data":
{
"fqdn": "dhs-ais-domain.rpz.infoblox.local",
"comment": "DHS_AIS_Domain",
"ns_group": "rpz-group",
"rpz_policy": "NODATA",
"rpz_severity": "WARNING"
}
},
{
"method": "POST",
"object": "zone_rp",
"data":
{
"fqdn": "dhs-ais-ip.rpz.infoblox.local",
"comment": "DHS_AIS_IP",
"ns_group": "rpz-group",
"rpz_policy": "NODATA",
"rpz_severity": "WARNING"
}
},
... 中間省略 ...
]
```