วิธีบล๊อคหรืออนุญาตการเชื่อมต่อเป็นรายประเทศ ด้วย CSF Country Code Deny

  1. วิธีลง CSF ใน Ubuntu บน EC2
  2. ตั้งค่าและเปิดใช้งาน Web UI สำหรับ CSF
  3. รวมคำสั่งและวิธีการตั้งค่า CSF ทั้งโดย command line และตั้งค่าในไฟล์
  4. ตั้งค่า CSF เพื่อความปลอดภัยขั้นพื้นฐาน
  5. ตั้งค่า CSF เพื่อป้องกัน DDOS Attack เบื้องต้น
  6. วิธีบล๊อคหรืออนุญาตการเชื่อมต่อเป็นรายประเทศ ด้วย CSF Country Code Deny
หมายเหตุ

บทความนี้ใช้กับเครื่องที่ลง CSF เรียบร้อยแล้ว หากยังไม่ได้ลงสามารถดูข้อมูลการลงได้ในโพส วิธีลง CSF ใน Ubuntu บน EC2

บางครั้งเราอาจจะอยากบล๊อคการเชื่อมต่อจากประเทศใดประเทศหนึ่ง อาจจะด้วยเหตุผลเพื่อจำกัดการดูเนื้อหาจากประเทศนั้น หรือเพื่อประหยัดแบนวิธจากการเชื่อมต่อจากประเทศที่ไม่ใช่กลุ่มเป้าหมายของเรา หรือในบางครั้งเซิฟเวอร์ก็จะตกเป็นเป้าการโจมตี อาจจะด้วยการ Brute Force Attach, DDOS หรือการโจมตีในรูปแบบอื่น การโจมตีนี้ในบางครั้งก็อาจจะมาจากกลุ่มเครื่องคอมพิวเตอร์ในประเทศใดประเทศหนึ่ง

โดยการตั้งค่า Country Code Deny สามารถทำได้โดยการใส่รหัสประเทศที่ต้องการบล๊อค (ดูรหัสประเทศได้ที่ Wikipedia ISO_3166-1 Alpha 2) ไปยัง CC_DENY ในไฟล์ csf.conf ดังนี้

# ใส่รหัส 2 ตัวของประเทศที่ต้องการบล๊อค หากมีมากกว่า 1 ประเทศ ให้คั่นด้วยเครื่องหมายลูกน้ำ (,)
CC_DENY = "RU,UA"
หมายเหตุการการบล๊อคการเชื่อมต่อรายประเทศ

การเปิด Country Code Deny จะทำให้การเชื่อมต่อกับเซิฟเวอร์ช้าลงบ้าง เพราะต้องเปรียบเทียบรหัสประเทศเข้ากับฐานข้อมูล IP ทุกครั้ง

ข้อมูลการจับคู่ IP ที่เชื่อมต่อมาเข้ากับรหัสประเทศนั้นอาจจะมีที่ไม่ถูกต้องบ้าง เพราะฐานข้อมูลการจับคู่อาจจะไม่ถูกต้อง 100% หรือมีการใช้ Proxy เป็นต้น

เนื่องจากการบล๊อครายประเทศนี้อาจจะทำให้การเชื่อมต่อมายังเซิฟเวอร์ช้าลง และในเซิฟเวอร์ที่มีการเชื่อมต่อจำนวนมาก หรือเซิฟเวอร์มีขนาดเล็ก​ CPU น้อย/หน่วยความจำไม่เยอะ จึงอาจจะเลี่ยงไปบล๊อคหรืออนุญาต เป็นรายพอร์ทแทน โดยมีตัวเลือกคือ

Option 1: อนุญาตการเชื่อมต่อไปยังบางพอร์ท จากประเทศใดประเทศหนึ่งเท่านั้น

การอนุญาตเป็นรายพอร์ทนี้จะไม่กระทบการให้บริการบนพอร์ทอื่นๆ โดยจะเลือกอนุญาตให้บางประเทศ เชื่อมต่อกับบางพอร์ทได้เท่านั้น เช่น หากเราต้องการให้เชื่อมต่อ FTP (พอร์ท 21) ได้จากประเทศไทยประเทศเดียว สามารถทำได้โดย

# แก้ไข TCP_IN และ UDP_IN โดยลบพอร์ท 21 ออก
TCP_IN = "20,22,25,53,80,110,143,443,465,587,993,995"
UDP_IN = "20,53,80,443"

# รหัสประเทศที่อนุญาตให้เชื่อมต่อกับที่กำหนดได้
CC_ALLOW_PORTS = "TH"

# พอร์ทที่จะอนุญาตให้เชื่อมต่อได้จากรหัสประเทศใน CC_ALLOW_PORTS เท่านั้น
CC_ALLOW_PORTS_TCP = "21"
CC_ALLOW_PORTS_UDP = "21"

Option 2: บล๊อคการเชื่อมต่อจากบางประเทศ ในบางพอร์ทเท่านั้น

การบล๊อคบางประเทศเป็นรายพอร์ทนี้จะลดการทำงานของไฟร์วอลล์ไม่ให้ทำงานหนักมาก เนื่องจากจะไม่กระทบการกับเชื่อมต่อเข้าไปยังพอร์ทอื่นที่ไม่ได้ตั้งไว้ ซึ่งเราอาจจะเลือกบล๊อคเฉพาะพอร์ทที่มีการเชื่อมต่อเข้ามาไม่มาก แต่มีความเสี่ยงต่อความปลอดภัยสูง เช่น บล๊อคพอร์ท FTP และ SSH ดังนี้

# ใส่รหัส 2 ตัวของประเทศที่ต้องการบล๊อค หากมีมากกว่า 1 ประเทศ ให้คั่นด้วยเครื่องหมายลูกน้ำ (,)
CC_DENY_PORTS = "RU,UA"

# พอร์ทที่จะบล๊อคไม่ให้เชื่อมต่อจากประเทศที่อยู่ใน CC_DENY_PORTS
CC_DENY_PORTS_TCP = "21,22"
CC_DENY_PORTS_UDP = "21,22"

เมื่อแก้ไขเรียบร้อยแล้วให้ทำการบันทึกไฟล์ และรัน sudo csf -ra เพื่อรีสตาร์ท CSF และ LFD