สำหรับเพื่อนๆที่ใช้งาน เจ้า Firewall Fortigate อยู่ แล้วอยากจะทำ Captive Portal อาจจะเจอปัญหาว่า ต้องการทำ Captive Portal เพื่อ Authen User ออกเน็ต โดยการนำ User Group หรือ users ไปใส่ไว้ใน Policy เพื่อที่จะทำ Captive Portal ตาม Administrator Guide ของ Fortigate แต่แล้ว มันกลับไม่เป็นผล ไม่มีการเด้งหน้า Captive Portal เกิดขึ้น ทุกคนสามารถใช้งานอินเตอร์เน็ตได้ปกติ
ตัวผมเองก็เกิดปัญหานี้ โดยวิธีการแก้ในช่วงแรกๆ เราก็ไปเปิด Captive Portal บน Interface มันซะเลย แต่ก็จะไม่ตรงตามวัตถุประสงค์ของเรา ที่เราต้องการจะให้ Authen เฉพาะตอนออกเน็ตเท่านั้น ถ้าติดต่อกันภายใน (vlan routing) ไม่ต้อง Authen
หลังจากที่ได้ทดลองดูแล้วก็เริ่มจะเข้าใจมากขึ้น เลยเขียนขึ้นมาเป็นบทความนี้ เอาไว้แชร์ให้กับเพื่อนๆ ที่ติดปัญหาเดียวกันนี้อยู่ครับ
เวลาทำ Captive Portal ผ่าน Firewall Policy บน FortiGate หลายคนมักเข้าใจว่าแค่นำ policy ที่ติด authentication ไปวางไว้เหนือ policy ปกติ ระบบก็ควรบังคับให้ผู้ใช้ login ได้ทันที แต่ในการใช้งานจริงกลับพบว่า แม้ policy ที่ติด auth จะอยู่ด้านบน ผู้ใช้ก็ยังออกอินเทอร์เน็ตได้โดยไม่ถูก redirect ไปหน้า Captive Portal สาเหตุของพฤติกรรมนี้มาจากค่า default ของ FortiGate ที่อนุญาตให้ unauthenticated traffic fall through ไปยัง policy ถัดไปได้ หากยังมี policy อื่นที่ match ทราฟฟิกเดียวกันอยู่.

ค่า default ของระบบ (auth-on-demand implicitly) อนุญาตให้ unauthenticated traffic fall through ไปยัง policy ถัดไปได้ หากยังมี policy อื่นที่ match ทราฟฟิกเดียวกันอยู่
ลองยกตัวอย่าง การตั้งค่า Policy ดังรูป

จะเห็นว่า มีการตั้งค่า Policy ไว้ 2 Policy เป็น Policy ของการที่จะให้ Client จาก port2 ออกอินเตอร์เน็ตทั้งคู่ แต่มีความแตกต่างอยู่ที่ Policy (1) มี Group User แต่ Policy (4) ไม่มี Group User
ซึ่งถ้าเป็นไปตามปกติแล้ว Client ของ Port2 ควรจะติด Authen ตามที่เราเข้าใจกัน Policy ทำงาน By Order แต่จากผลลัพธ์แล้ว ไม่เป็นไปอย่างที่คิด Client สามารถออกอินเตอร์เน็ตได้ตามปกติ

ทีนี้ หากเราทดลอง เปลี่ยนค่า auth-on-demand เป็น always เพื่อให้ถ้า Traffic มีติด Auth FortiGate จะบังคับให้เกิด firewall authentication เลย

ลองเปลี่ยนเรียบร้อย ทดลองผลลัพธ์ ติด Authen เรียบร้อย

สำหรับการเปิด Authen ผ่าน Policy บน Firewall Fortigate หากเราไม่อยากเปลี่ยนการตั้งค่า auth-on-demand เราสามารถทำได้อีกวิธี คือการ Scope Source Address , Destination Address ให้มากที่สุด ไม่ใช่ตั้งค่าเป็น all แล้วนำ User ไปใส่ใน Policy ก็สามารถทำให้ติด Authen ได้เช่นกันครับ