FortiGate เป็น Next-Generation Firewall จากค่าย Fortinet ที่มากทั้งประสิทธิภาพและความสามารถ ซึ่งในความสามารถในส่วนของ Security Fabric ของ FortiGate ก็จะมีสิ่งที่เรียกว่า Automation อยู่ ที่ช่วยให้ FortiGate สามารถทำงานตามเงื่อนไขได้โดยอัตโนมัติในระดับหนึ่ง แต่ถึงอย่างนั้นเราก็ยังไม่สามารถเขียนโปรแกรมไว้ใน Automation ของ FortiGate เพื่อควบคุมการทำงานที่ซับซ้อนเช่นการมีเงื่อนไข if-else ได้ แต่รู้หรือไม่ว่า FortiOS ของ FortiGate ก็มี REST API ให้เราสามารถใช้อุปกรณ์อื่นสั่งการให้ FortiGate ทำงานตามโปรแกรมที่เราเขียนได้
หมายเหตุ: บทวามนี้ใช้ FortiGate ที่ติดตั้ง FortiOS 7.0.6 ประกอบการเขียนบทความ

FortiOS ของ FortiGate มี API แบบไหนให้ใช้บ้าง
- Configuration APIs: เป็น API ที่ใช้สำหรับการตั้งค่าต่าง ๆ เช่นการสร้าง ลบ แก้ไข Policy, การตั้งค่า Network Interface
- Monitor APIs: เป็น API ที่ใช้สำหรับดึงค่าต่าง ๆ ที่เปลี่ยนแปลงโดย FortiGate เช่นปริมาณ Traffic ของแต่ละ Policy, ARP Table, จำนวน Users ที่ออนไลน์
- Log APIs: เป็น API ที่ใช้สำหรับดึง Log ที่อยู่ใน Disk หรือ FortiAnalyzer หรือ FortiCloud ออกมา เช่น Traffic Log, Web Filter, Application Control และอื่น ๆ (เทียบเท่าเมนู Log & Report)
ก่อนการใช้งาน
การดำเนินการต่าง ๆ ในระบบของ FortiOS จำเป็นต้องมีการยืนยันตัวตน Admin ก่อน แต่ในที่นี้ Admin ไม่ใช่มนุษย์ แต่เป็นคอมพิวเตอร์ที่เรียกใช้งาน API ดังนั้นจึงต้องสร้าง Admin แบบหนึ่งที่เรียกว่า REST API Admin ขึ้นมาก่อน ซึ่งเราจะได้ API Key ซึ่งเป็นเหมือน Username, Password สำหรับใช้งาน API
- เลือกเมนู System -> Administrators
- กด Create New
- กด REST API Admin
- ใส่ Username สำหรับใช้งาน REST API
- ที่ Administrator profile ให้สร้าง Profile ใหม่โดยการกด Create
- ตั้งชื่อ Profile เช่น “REST_TEST”
- กด Set All
- เลือก Read/Write ***เพื่อการสาธิตเท่านั้น หากนำไปใช้งานจริงควรเลือกเฉพาะ Permission ที่ API ต้องการใช้งาน***
- กด OK
- ปิด PKI Group
- เปิด Trusted Host
- ใส่ IP เครื่องที่จะเรียกใช้ API
- กด OK
- กดปุ่ม Copy เพื่อคัดลอก API Key ***แสดงเพียงครั้งเดียว หากทำหายต้องสร้างใหม่ และห้ามทำหลุด***





ตัวอย่างการนำไปใช้
ทดลองสั่ง Disable Interface
API Endpoint: https://<FORTIGATE-IP:PORT>/api/v2/cmdb/system/interface/<INTERFACE-NAME>?access_token=<ACCESS-TOKEN>
Method: PUT
ตัวอย่างการ Disable Port 2
API Endpoint: https://192.168.1.1:8443/api/v2/cmdb/system/interface/port2?access_token=Ung992LDWO1JBYb8XjosXYrFb4LDrS



ทดลองดึงข้อมูลการตั้งค่า Interface
API Endpoint: https://<FORTIGATE-IP:PORT>/api/v2/cmdb/system/interface/<INTERFACE-NAME>?access_token=<ACCESS-TOKEN>
Method: GET
ตัวอย่างการดึงข้อมูลการตั้งค่า Port 1
API Endpoint: https://192.168.1.1:8443/api/v2/cmdb/system/interface/port1?access_token=Ung992LDWO1JBYb8XjosXYrFb4LDrS

ทดลองดึงข้อมูล User ในระบบ
API Endpoint: https://<FORTIGATE-IP:PORT>/api/v2/monitor/user/device/query?access_token=<ACCESS-TOKEN>
Method: GET
ตัวอย่างการดึงข้อมูล User ในระบบ
API Endpoint: https://192.168.1.1:8443/api/v2/monitor/user/device/query?access_token=Ung992LDWO1JBYb8XjosXYrFb4LDrS

แถมเล็กน้อย ถ้าหากเราต้องการจำนวน User ที่ออนไลน์อยู่ในขณะนั้น เราก็สามารถเขียนโปรแกรมให้ Filter เฉพาะฟิลดิ์ is_online ที่มีค่า true ได้
หา Documentation หรือคู่มือจากที่ไหน
วิธีที่ 1: ดัก HTTP Request โดยใช้ DevTools ของ Browser (Google Chrome / Edge)

วิธีนี้จะเป็นการใช้เครื่องมือในแท็บ Network ของ DevTools เพื่อดักจับ HTTP Request ที่รับ-ส่งระหว่าง Browser และ FortiGate จากรูปจะเป็น HTTP Request ที่ดักได้ในจังหวะที่เลือกเปิด Interface Port 2 ขึ้นมา โดยเราสามารถคัดลอก Code การเรียก API ไปได้
วิธีที่ 2: ปุ่ม API Preview


วิธีนี้ ให้เราลองแก้ไขค่าอะไรสักอย่าง แล้วกด API Preview โดยในรูปจะเป็นการ Preview ในขณะแก้ไข Interface จะเป็นการให้ FortiGate แสดงฟิลดิ์ที่แก้ไขได้ออกมา
วิธีที่ 3: Fortinet Developer Network
Fortinet Developer Network เป็นชุมชนสำหรับนักพัฒนาที่มีเอกสาร คู่มือ เครื่องมือสสสำหรับช่วยพัฒนาโซลูชั่นส์ที่นำมาใช้งานกับ Product ของ Fortinet ซึ่งสำหรับ FortiGate ก็จะมีเอกสารคู่มือการใช้งาน API และเครื่องมือสำหรับทดลองการใช้งาน API ด้วย (Datasheet)

แต่ Fortinet Developer Network เป็นบริการที่เราต้องสมัครเพิ่มเติม แต่ไม่เสียค่าใช้จ่าย ให้ลองติดต่อสอบถามผู้แทนจำหน่ายผลิตภัณฑ์ของ Fortinet ที่จำหน่ายให้ท่านนะครับ
ปฏิเสธไม่ได้เลยว่า Network และ Programming เป็นของที่มาคู่กัน ซึ่ง Fortinet ก็มี REST API ให้เราได้เข้าไปใช้งานเพื่อต่อยอดความสามารถของ Next-Generation Firewall ได้อย่างไม่รู้จบ หากมีข้อสงสัยหรือข้อแนะนำ ทักมาพูดคุย สอบถามได้ที่เพจ ASCII Network and IT Solutions Co., Ltd. (คลิ๊ก) นะครับ
Cover image credits:
Coder photo created by DCStudio – www.freepik.com