ต่อเนื่องจากบทความ “เริ่มต้นใช้งาน REST API บน Sangfor Athena NGFW”
บทความนี้รวมตัวอย่างการใช้งานจริง 3 กลุ่มที่ถูกถามบ่อย ได้แก่ การจัดการ Network Object (ipgroups),
การเพิ่ม/ลบ Blacklist ทั้งแบบถาวรและแบบชั่วคราว (ใช้ทำ automation ร่วมกับระบบ SOC/SOAR)
และการอ่านข้อมูล monitoring — ปิดท้ายด้วยสคริปต์ Python ที่นำไปปรับใช้ได้ทันที
ทุกตัวอย่างต้อง login รับ token และแนบ Cookie: token=... ตามขั้นตอนในบทความก่อนหน้า
จัดการ Network Object (ipgroups)
Network Object (เมนู Objects > Network Objects บน Web UI) เรียกผ่าน resource
ipgroups — ใช้เคสเช่น sync รายการ IP จากระบบทะเบียนทรัพย์สินเข้าไฟร์วอลล์อัตโนมัติ:
# ดู Network Object ทั้งหมด
GET https://192.168.1.1/api/v1/namespaces/public/ipgroups
# ดู object เดียวตามชื่อ
GET https://192.168.1.1/api/v1/namespaces/public/ipgroups/All
# สร้าง object ใหม่ (ช่วง IP กำหนดใน ipRanges; ใส่ start อย่างเดียว = IP เดี่ยว)
POST https://192.168.1.1/api/v1/namespaces/public/ipgroups
{
"name": "Server-Farm-A",
"businessType": "IP",
"ipRanges": [
{ "start": "10.10.1.1", "end": "10.10.1.50" }
]
}
# แก้เฉพาะบางฟิลด์ (PATCH = incremental)
PATCH https://192.168.1.1/api/v1/namespaces/public/ipgroups/Server-Farm-A
{
"ipRanges": [ { "start": "10.10.1.1", "end": "10.10.1.60" } ]
}
# ลบ object
DELETE https://192.168.1.1/api/v1/namespaces/public/ipgroups/Server-Farm-A
Global Blacklist / Whitelist แบบถาวร
ตรงกับเมนู SOC > Blacklist/Whitelist บน Web UI ใช้ resource
whiteblacklist โดยฟิลด์ type เป็น BLACK หรือ WHITE
และ url รองรับทั้ง IP เดี่ยว, IPv6, subnet และโดเมน:
# ดูรายการ blacklist ปัจจุบัน
GET https://192.168.1.1/api/v1/namespaces/public/whiteblacklist?type=BLACK
# เพิ่มทีละรายการ
POST https://192.168.1.1/api/v1/namespaces/public/whiteblacklist
{
"type": "BLACK",
"description": "known bad IP from threat feed",
"url": "203.0.113.50",
"enable": true
}
# เพิ่มเป็นชุด (batch) — ผสม IPv4 / IPv6 / subnet ได้
POST https://192.168.1.1/api/batch/v1/namespaces/public/whiteblacklist
[
{ "type": "BLACK", "description": "single IPv4", "url": "192.168.150.1" },
{ "type": "BLACK", "description": "single IPv6", "url": "3001::2" },
{ "type": "BLACK", "description": "IPv4 subnet", "url": "192.168.151.0/24" }
]
# ลบรายการเดียว
DELETE https://192.168.1.1/api/v1/namespaces/public/whiteblacklist/203.0.113.50
Block IP ชั่วคราว (Temporary Blacklist) — เหมาะกับ SOC automation
ตรงกับ SOC > Blacklist/Whitelist > Blacklist > Temporary Blacklist บน Web UI
ใช้ resource blockip จุดเด่นคือกำหนดระยะเวลาบล็อกได้ (เช่น "3d" = 3 วัน)
แล้วระบบปลดบล็อกให้เองอัตโนมัติ เหมาะกับ workflow ตอบสนอง incident อัตโนมัติจาก SIEM/SOAR:
# บล็อกหลาย IP พร้อมกัน เป็นเวลา 3 วัน
POST https://192.168.1.1/api/batch/v1/namespaces/public/blockip
{
"srcIP": [ "192.168.1.2", "192.168.1.3" ],
"ipType": "SRC",
"blockTime": "3d"
}
# ดูรายการ IP ที่ถูกบล็อกอยู่ (เห็นเวลาปลดบล็อกคงเหลือ deblockTime ด้วย)
GET https://192.168.1.1/api/v1/namespaces/public/blockip
# ปลดบล็อกแบบระบุรายการ (รายการที่เพิ่มเองใช้ attack = "PLT-MANUAL")
POST https://192.168.1.1/api/batch/v1/namespaces/public/blockip?_method=DELETE
[
{ "srcIP": "192.168.1.2", "attack": "PLT-MANUAL" }
]
# ตั้งค่าระยะเวลาบล็อกอัตโนมัติเริ่มต้น
PATCH https://192.168.1.1/api/v1/namespaces/public/blockiptime
{ "blockTime": "1d" }
DELETE .../blockipclear สำหรับล้างรายการบล็อกทั้งหมดในคลิกเดียว
ควรระวังไม่ให้สคริปต์เรียกโดยไม่ตั้งใจ
อ่านข้อมูล Monitoring
# Traffic แยกราย IP
GET https://192.168.1.1/api/v1/namespaces/public/iptraffics
# Top application ตาม traffic (เลือกจำนวนอันดับด้วย topNumber)
GET https://192.168.1.1/api/v1/namespaces/public/topapptraffics?topNumber=5
# Top user ตาม traffic (endpoint นี้ใช้ POST + _method=GET แล้วส่งเงื่อนไขใน body)
POST https://192.168.1.1/api/v1/namespaces/public/topusertraffics?_method=GET
{ "topNumber": 5 }
เหมาะกับการดึงเข้าระบบ dashboard ภายนอก เช่น Grafana / สคริปต์รายงานอัตโนมัติ โดยตั้ง scheduler เรียกเป็นระยะ (อย่าลืม keepalive หรือ login ใหม่เมื่อ token หมดอายุ)
สคริปต์ Python ตัวอย่าง: บล็อก IP อัตโนมัติ
ตัวอย่างสคริปต์รวมทุกขั้นตอน: login → บล็อก IP ชั่วคราว 3 วัน → ตรวจสอบผล → logout
(ต้องติดตั้งไลบรารี requests ก่อนด้วย pip install requests)
import requests
HOST = "https://192.168.1.1" # Management IP ของ NGFW
USER = "api-user"
PASSWORD = "<รหัสผ่าน>"
BAD_IPS = ["203.0.113.50", "203.0.113.51"] # IP ที่ต้องการบล็อก
s = requests.Session()
s.verify = False # กรณี self-signed cert (lab เท่านั้น — production ควรติดตั้ง cert ที่ถูกต้อง)
# 1) Login รับ token
r = s.post(f"{HOST}/api/v1/namespaces/public/login",
json={"name": USER, "password": PASSWORD})
token = r.json()["data"]["loginResult"]["token"]
s.headers["Cookie"] = f"token={token}"
# 2) บล็อก IP ชั่วคราว 3 วัน
r = s.post(f"{HOST}/api/batch/v1/namespaces/public/blockip",
json={"srcIP": BAD_IPS, "ipType": "SRC", "blockTime": "3d"})
print("block result:", r.json()["code"], r.json()["message"])
# 3) ตรวจสอบรายการที่ถูกบล็อกอยู่
r = s.get(f"{HOST}/api/v1/namespaces/public/blockip")
for item in r.json()["data"]["items"]:
print(item["blockAddr"], "จะปลดบล็อกในอีก", item["deblockTime"])
# 4) Logout
s.post(f"{HOST}/api/v1/namespaces/public/logout",
json={"loginResult": {"token": token}})
ข้อจำกัดและข้อควรระวัง
- กลุ่ม API ของ Blacklist/Whitelist และ Temporary Blacklist ไม่รองรับบน Virtual System (เรียกได้เฉพาะระบบหลัก) — ระบุไว้ในคู่มือ API ของแต่ละ endpoint
- ทดสอบสคริปต์ใน lab ก่อนเสมอ โดยเฉพาะ endpoint ประเภทลบ/ล้างข้อมูล
- ควรให้สคริปต์ log ทุกการเปลี่ยนแปลงที่สั่งผ่าน API ไว้ตรวจสอบย้อนหลัง (audit trail)
- ถ้าเรียก API แล้วได้ code 1003 / 1012 แปลว่า token หมดอายุ ให้ login ใหม่ (idle timeout เริ่มต้น 10 นาที)
ดาวน์โหลดคู่มือฉบับเต็ม
บทความนี้คัดเฉพาะส่วนที่ใช้งานบ่อยมาสรุป หากต้องการรายละเอียดครบทุกคำสั่ง/ทุก endpoint สามารถดาวน์โหลดคู่มือทางการของ Sangfor ได้จาก Sangfor Community โดยตรง:
- Athena NGFW API Userguide (PDF) — คู่มือ REST API ฉบับเต็ม ครอบคลุมทุก endpoint พร้อมโครงสร้าง request/response
ข้อคิดเห็น
0 ข้อคิดเห็น
โปรด ลงชื่อเข้าใช้ เพื่อแสดงข้อคิดเห็น