ใช้ CSF&LFD ป้องกันการ Brute force ไปยังแอพพลิเคชั่นบนเซิฟเวอร์

  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 ไปยังแอพพลิเคชั่นบนเซิฟเวอร์

จากบทความอื่นในซีรีส์ CSF&LFD จะเน้นการตั้งค่าความปลอดภัยพื้นฐานให้กับการทำงานตามปกติของเซิฟเวอร์ หรือเซอร์วิสยอดนิยมต่างๆที่ CSF รู้จักอยู่แล้ว แต่ในบทความนี้จะพูดถึงการตั้งค่าให้ CSF เพื่อป้องกันการ Brute force หรือการกระทำอื่นๆของผู้บุกรุกที่มีต่อแอพพลิเคชั่น หรือโปรแกรม หรือเว็บไซต์ของเราซึ่งในกรณีนี้ CSF ไม่รู้จักแอพพลิเคชั่นของเรา ดังนั้นจึงต้องทำการตั้งค่าให้ CSF รู้ถึงความเป็นไปในแอพพลิเคชั่นของเรา และตรวจสอบความผิดปกติที่เราต้องการบล๊อคได้

โดยปกติการทำงานของ CSF&LFD ในการป้องกันการ Brute force นั้น มีขั้นตอนการทำงานคร่าวๆดังนี้

  • CSF&LFD จะอ่านค่าในไฟล์ log ต่างๆที่อยู่บนเซิฟเวอร์เพื่อหาแบบแผนของการพยายามเข้าระบบโดยไม่ได้รับอนุญาต เช่น อ่านค่าจากไฟล์ log ของ FTP
  • เมื่อพบ log ที่แจ้งว่ามีลอคอินด้วยรหัสผ่านที่ไม่ถูกต้อง ก็จะจดจำ IP ของผู้บุกรุกไว้ และหากตรวจพบถึงจำนวนครั้งที่กำหนด ภายในเวลาที่กำหนด (เช่น ป้อนรหัสผ่านผิด 10 ครั้ง ภายใน 1 ชั่วโมง) ก็จะเพิ่ม IP ของผู้บุกไปยังไฟล์ blocklist เพื่อให้ไฟร์วอลล์ทำการบล๊อคไอพีดังกล่าวต่อไป

ซึ่ง CSF&LFD นั้น จะสามารถตั้งค่าให้ไปอ่านไฟล์ log ตามที่เรากำหนด และสามารถใช้ Regex ตรวจหาแบบแผนของข้อความในไฟล์ log ดังกล่าว เพื่อให้ไฟร์วอลล์ทำการบล๊อคผู้บุกรุกที่มีการพยายามเข้าใช้งานระบบของเราได้ โดยจะต้องมีการทำงานร่วมกันสองส่วน คือ

  1. เมื่อมีการพยายามเข้าระบบด้วยข้อมูลที่ผิด แอพพลิเคชั่นจะต้องเขียนข้อมูลลงในไฟล์ log เช่น ตอบกลับเป็น Error 401 ซึ่งจะทำให้เว็บเซิฟเวอร์เขียนไฟล์ log นั้นๆ
  2. ตั้งค่าให้ CSF&LFD อ่านไฟล์ log และหากพบ pattern การ Error 401 เกินจำนวนครั้งที่กำหนด ให้บล๊อคไอพีดังกล่าวไม่ให้เข้าถึงเซิฟเวอร์

การเขียนไฟล์ Log โดยแอพพลิเคชั่น

การเขียนไฟล์ Log สามารถทำได้หลายวิธี ขึ้นอยู่กับภาษาหรือเฟรมเวิคที่ใช้ โดยอาจจะเป็นเขียนไฟล์ log ตรงๆ หรือใช้คำสั่ง response status code ซึ่งก็จะทำให้ Web server ทำการเขียนข้อมูลดังกล่าวลงไปใน log โดยอัตโนมัติ

การอ่านไฟล์ Log และบล๊อคไอพีเมื่อเข้าเงื่อนไข

สร้างไฟล์ csf regex.custom.pm โดยใช้คำสั่ง

sudo vi /etc/csf/regex.custom.pm

แล้วเขียน Pattern เพื่อ เช่น

if (($globlogs{HTACCESS_LOG}{$lgfile}) and ($line =~ /(\S+).] "POST ." 401/)) {
   return ("Application 401 error from",$1,"app401","20","80,443","3600");
}

อธิบายโค้ท

  1. if (($globlogs{HTACCESS_LOG}{$lgfile}) คือให้อ่านไฟล์ HTACCESS_LOG
  2. and ($line =~ /(\S+).] "POST ." 401/))คือ หาก HTTP method เป็น POST แล้วเซิฟเวอร์ Response เป็น 401
  3. return ("Application 401 error from",$1,"app401","20","80,443","3600");
    • ตอบกลับว่า Error
    • เลข 20 คือ หากมีตรงเงื่อนไขในข้อ 2 เกิน 20 ครั้งขึ้นไป
    • 80,443 คือ บล๊อคพอร์ท HTTP, HTTPS
    • 3600 คือจำนวนวินาทีที่ต้องการบล๊อค

เมื่อเรียบร้อยแล้ว ทำการรีสตาร์ท โดยใช้คำสั่ง

sudo service lfd restart
sudo service csf restart