สำหรับเพื่อนๆที่เป็นสาย System Integrator ในการ Implement ตัว Fortigate Firewall เมื่อคอนฟิก network เสร็จเรียบร้อยแล้ว สิ่งที่ขาดไม่ได้คือการทำ management interface เพื่อให้ทางทีม สามารถเข้าไปที่ตัว Firewall เพื่อ Troubleshoot ปัญหาบางอย่างได้
สิ่งที่เพื่อนๆทำกันคือการทำ IPSec VPN Tunnel ขึ้นมา เพื่อจะให้ทีมสามารถ Remote ไปยัง Firewall ได้ แต่ถ้า VPN จู่ๆ ไม่สามารถใช้งานได้ เราก็ไม่สามารถเข้าถึง Fortigate ได้เลย
อีก 1 ท่า ที่ทำกันคือการเปิด https บนขา WAN เพื่อให้สามารถ Remote ไปยัง Fortigate ได้เลย แต่ก็จะโดน Brute Force Logins มายังขา wan เรื่อยๆ
ในบทความนี้จะมานำเสนอวิธีการทำ Local-in-Policy เพื่อป้องกันไม่ให้ผู้ใช้งานที่ไม่ได้รับอนุญาต Remote มายัง Firewall Fortigate ของเราได้ครับ
Local-in Policy บน Fortigate คืออะไร
Local-in Policy คือ Policy ที่ใช้ควบคุม Traffic ซึ่งมีปลายทางเป็น ตัว FortiGate เอง ไม่ใช่ Traffic ที่วิ่งผ่าน FortiGate เพื่อไปยัง Server หรืออุปกรณ์ภายในระบบ เช่น เมื่อมีผู้ใช้งานจาก Internet ส่ง Request เข้ามาที่ Public IP บน Interface WAN ของ FortiGate เพื่อเชื่อมต่อ IPsec VPN Traffic เหล่านี้จะถือเป็น Local-in Traffic เพราะปลายทางคือ Service ที่ทำงานอยู่บน FortiGate โดยตรง
ทำไมเราถึงต้องเปิดใช้งาน Local-in Policy
จากรูปเราจะเห็นว่า มีการ Brute Force โดน Brute Force โดยการ Login ขา wan มาซ้ำๆ โดยเราสามารถป้องกันได้โดยใช้ Local-in Policy
โดยโจทย์ของเราในบทความนี้คือการทำ Geo-IP Blocking ให้ IP ที่อยู่ในประเทศไทยเท่านั้น ที่สามารถ Remote มาที่ Fortigate ได้

วิธีการ Configure Local-in Policy บน Fortigate ผ่านหน้า GUI ( > FortiOS 7.6.0 )
1. เปิด Feature
ไปที่ System –> Feature Visibility ให้เลือก Additional Features –> Local-In Policy หากต้องการใช้งาน IPv6 ด้วย ให้เลือก Core Features –> IPv6 –> คลิก Apply

2. สร้าง Object Geo-Thailand
ไปที่ Policy & Objects –> Addresses –> Create new

ทำการตั้งค่าตามรูปได้เลยครับ –> คลิก OK

3. เปิด Log ของ Local-In Policy
ไปที่ Log Settings –> Local Traffic Logging เลือกเป็น Specify และ Log Local-in traffic เลือกเป็น Per Policy / หรือ Global ก็ได้นะครับ แล้วแต่เพื่อนๆเลย แต่ในตัวอย่างนี้จะเปิด log ของ Local-In เป็น Per Policy ครับ

4. ตั้งค่า Local-In Policy
ไปที่ Policy & Objects –> Local-In Policy –> Create new

ทำการตั้งค่า Local-In Policy ตามรูปได้เลยครับ
Incoming Interface : Interface ที่เราจะทำ Local-In Policy –> เลือกเป็น SD-WAN Interface เพราะขา WAN อยู่ใน SD-WAN
Source : IP ที่เราจะให้เข้ามาที่ Fortigate ของเรา –> เลือกเป็น Geo-Thailand
Destination : IP ปลายทางที่ Source จะเข้าถึง ตรงนี้หากท่านใด Strict มากๆ ให้สร้าง Address เพิ่มเป็น IP ที่เราต้องการนะครับ เช่น IP ขา WAN เป็นต้น แต่เนื่องจากในตัวอย่างมีการใช้งานเป็น Dynamic Public IP จึงเลือก Destination เป็น ALL
Schedule : ช่วงเวลาที่จะเปิด Policy นี้ –> เลือกเป็น ALL
Service : คือ Service ที่เราจะเปิดให้ Internet เข้ามาผ่านขา WAN ของเรา ในที่นี้ผมจะเปิดไว้ 3 Services คือ 1. tcp-10443 คือ management port ของ fortigate, 2. ESP/IKE คือ Port ไว้ทำ IPSec VPN
Action : เลือกเป็น Accept
อย่าลืมติ๊ก Enable this policy –> OK

ซึ่งหน้าตาของ Local-In Policy จะเป็นประมาณนี้ครับ เพื่อนๆสามารถแก้ไขได้ตามต้องการเลย อย่าลืมตั้งค่า Implicit Deny ไว้บรรทัดสุดท้ายด้วยนะครับ เนื่องจาก Local-In Policy จะไม่ได้มีการทำ Implicit Deny เหมือน Firewall Policy

5. ทดสอบ และดู Log
สำหรับการทดสอบ จะเป็นการใช้งานจริงเลย คือมีคนพยายาม Access Fortigate เราผ่านขา WAN โดยเรามาดู Log ได้ว่า IP เหล่านั้น โดน Block ไหม โดยไปที่ Log&Report –> Local Traffic เราจะเห็นเลยว่า Action เป็น Deny เรียบร้อยแล้ว Policy ID = 2 คือ Deny ALL ที่เราทำไว้ครับ

(Optional) หากเพื่อนๆทำการเปิด Logging แล้ว แต่ไม่เห็น Log สามารถใช้คำสั่ง CLI ตามนี้เพื่อเปิดได้เลยครับ
config log setting
set local-in allow enable
set local-out enable
end
config log memory filter
set local-traffic enable
end
# If you log to a disk (e.g., FortiAnalyzer, Syslog, or internal HDD)
config log disk filter
set local-traffic enable
end
Log Login failed ก็จะหมดไปจากหน้า System Events ไม่ขึ้นมาให้เราหา Log ที่ต้องการลำบากครับผม

วิธีการ Configure Local-in Policy บน Fortigate ผ่าน CLI ( < FortiOS 7.6.0 )
สำหรับการ Config Local-In Policy บน Fortigate จะใช้คำสั่งดังนี้เลยครับ
config firewall local-in-policy
edit 1
set intf "SD-WAN_Zone"
set srcaddr "THAILAND"
set dstaddr "all"
set action accept
set service "[TCP] 10443" "ESP" "IKE"
set schedule "always"
set logtraffic enable
next
edit 3
set intf "SD-WAN_Zone"
set srcaddr "all"
set dstaddr "all"
set action accept
set service "NTP"
set schedule "always"
set logtraffic enable
next
edit 2
set intf "SD-WAN_Zone"
set srcaddr "all"
set dstaddr "all"
set service "ALL"
set schedule "always"
set logtraffic enable
next
end