ตั้งค่า CSF เพื่อป้องกัน DDOS Attack เบื้องต้น

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

DDOS attack หรือ Distributed Denial of Service (DDoS) คือการโจมตีที่พบเห็นได้บ่อยครั้ง ซึ่งการโจมตีในลักษณะนี้มันจะมีวัตถุประสงค์เพื่อให้เซิฟเวอร์ไม่สามารถเชื่อมต่อกับผู้ใช้งานตามปกติได้ โดยในบทความนี้จะแนะนำวิธีตั้งค่าไฟร์วอลล์ CSF เพื่อใช้ในการลดความเสี่ยงการถูก DDOS ด้วย Connection tracking และลดผลกระทบเมื่ออยู่ระหว่างการถูกโจมตีด้วย SYN flood protection

หมายเหตุ

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

ป้องกัน DDOS Attack ด้วยการตรวจจับการเชื่อมต่อ หรือ Connection Tracking

Connection Tracking เป็นการกำหนดจำนวนการเชื่อมต่อที่ไอพีภายนอกใดๆจะทำการเชื่อมต่อกับเซิฟเวอร์ของเราได้ ภายในระยะเวลาที่กำหนด ซึ่งเป็นอีกฟังก์ชั่นที่จะสามารถช่วยป้องกันการโจมตีด้วยวิธี DDOS ได้ สามารถตั้งค่าได้ในไฟล์ csf.conf ชื่อขึ้นด้วย CT_

# จำนวนการเชื่อมต่อสูงสุดที่อนุญาตจากไอพีหนึ่งๆ ภายในระยะเวลาที่ตั้งใน CT_INTERVAL
# ตั้งเป็น 0 เพื่อปิดฟังก์ชั่นนี้
CT_LIMIT = "300"
CT_INTERVAL = "30"

# ต้องการบล๊อคไอพีดังกล่าวเป็นการถาวรหรือไม่ หากเป็น 0 จะเป็นการบล๊อคชั่วคราวตาม CT_BLOCK_TIME
CT_PERMANENT = "0
CT_BLOCK_TIME = "3600"

จำนวน CT_LIMIT ที่ตั้งนั้นไม่ควรจะสูงหรือต่ำจนเกินไป โดยอาจจะปรับลดลงได้เมื่ออยู่ระหว่างการถูกโจมตี และปรับเพิ่มขึ้นตามลำดับเมื่อใช้งานทั่วไป (ไม่ควรสูงกว่า 1000 และไม่ควรต่ำกว่า 100)

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

ลดผลกระทบเมื่ออยู่ระหว่างการถูก DDOS Attack ด้วย SYN Flood Protection

ปกติในการติดต่อกันระหว่างเครื่องด้วย TCP นั้นจะมีการทำ three-way handshake กล่าวคือ ผู้เชื่อมต่อจะส่ง Synchronization packet (SYN) มายังเซิฟเวอร์ แล้วเซิฟเวอร์ก็จะส่ง Synchronization acknowledgment กลับไป เพื่อให้ผู้เชื่อมต่อส่งแพคเกจ acknowledgment​ (ACK) กลับมา จึงจะจบขั้นตอนการ handshake

แต่การโจมตี DDOS ด้วยเทคนิค SYN Flood ผู้จู่โจมจะส่งแพคเกจ TCP จำนวนมากเข้ามาทำการเริ่มต้นการเชื่อมต่อกับเซิฟเวอร์ แต่เมื่อเซิฟเวอร์ตอบกลับแล้วก็ไม่สอบสนองใดๆ ทำให้เซิฟเวอร์ต้องเปิดรอการตอบกลับ ซึ่งหากมีจำนวนมากก็จะทำให้เซิฟเวอร์ไม่ว่างที่จะตอบกลับการติดต่ออื่นๆ จึงเหมือนกับเซิฟเวอร์ดาวน์ หรือไม่ตอบสนองต่อการเชื่อมต่อไป

หมายเหตุการเปิด SYN Flood Protection

การเปิด SYN Flood Protection นี้ทำให้การจะทำให้ความเร็วในเชื่อมต่อมายังเซิฟเวอร์ลดลง ดังนั้นจึงควรเปิดฟังก์ชั่นนี้เฉพาะขณะกำลังตกอยู่ภายใต้การโจมตีด้วย DDOS เท่านั้น

สามารถเปิด SYN Flood Protection ได้โดยตั้งค่าได้ในไฟล์ csf.conf ชื่อขึ้นด้วย SYNFLOOD

# เปิดการใช้งาน SYN Flood Protection
SYNFLOOD = "1"

# เรทลิมิตจำนวนแพคเกจจาก 1 ไอพี ต่อวินาที
SYNFLOOD_RATE = "100/s"

# จำนวนครั้งที่ไอพีดังกล่าวเชื่อมต่อเข้ามาเกินเรทลิมิต หากมากกว่านี้จะถูกบล๊อค
SYNFLOOD_BURST = "25"

ค่า SYNFLOOD_RATE คือจำนวนแพคเกจจาก 1 ไอพีต่อวินาที โดยหากตั้งสูงเกินไป (มากกว่า 100/s) อาจจะไม่สามารถป้องกันการโจมตีได้ แต่หากตั้งต่ำเกิดไป (ต่ำกว่า 50/s) อาจจะทำให้การเชื่อมต่อทั่วไปมีปัญหาได้

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