ปัญหา DOS และ Brute Force Attack เป็นปัญหาที่หลายๆ คนอาจได้พบบ้าง แต่ถ้า DDOS ก็ตัวใครตัวมันครับ :P ปัญหาเหล่านี้เป็นปัญหายอดนิยม โดยเฉพาะเครื่องที่โดน Attack มักจะมีของสำคัญๆ อยู่ในนั้น เช่น รูปภาพ, ไฟล์ข้อมูล หรือ ตกเป็นเป้าเพื่อใช้ยืมเครื่องไปยิงเครื่องอื่นๆ ต่อ ซึ่งวิธีการที่ยอดฮิดมากคือการยิงผ่านช่องโหว่ของ Web Application ที่เราใช้ๆ กันอยู่อย่างเช่น CMS, โปรแกรมจัดการฐานข้อมูล เป็นต้น หากวัตถุประสงค์เพื่อก่อกวนให้ Apache ทำงานไม่ได้ หรือเครื่องเซิร์ฟเวอร์ทำงานไม่ได้ มักจะโดน DOS หรือ DDOS แต่เราสามารถป้องกันเหตุการณ์เหล่านี้ได้ โดยใช้ fail2ban ครับ

มาวิเคราะห์สถานการณ์กันก่อน คำถามที่ต้องถามตัวเองคือ เราจะทราบได้อย่างไรว่าเครื่องไหน IP อะไรเข้าข่าย attack เราบ่อยครั้ง ? คำตอบง่ายๆ ก็ดู log หน้าเว็บที่ถูกเรียก และปริมาณของ package ที่ส่งเข้ามา ยกตัวอย่างเช่น เว็บ ABC โดน DOS โดยมีเครื่องคอมพิวเตอร์ไม่ซ้ำ IP เปิดเว็บหน้าหนึ่งซึ่งพยายามจะดาวน์โหลดไฟล์ xxx.exe ที่ไม่มีอยู่ในเครื่องเซิร์ฟเวอร์ของ ABC เลย ถ้าอย่างนี้เรียกโดน 2 เด้ง แสดงว่าเซิร์ฟเวอร์(เคย)มี trojan ฝังอยู่ และเครื่องที่ติด trojan หรือ virus ก็พยายามขยายตัวเองออกไปยังเครื่องอื่นๆ อย่างนี้เว็บ ABC ก็จะมี traffic จำนวนมหาศาลดาวน์โหลดไฟล์ xxx.exe นี้ หากเรามาพิจารณา log ไฟล์ จะพบ Error 404 ที่เรียกไฟล์ xxx.exe ดังนี้

...
220.191.231.206 - - [05/Mar/2007:11:50:20 +0100] "GET http://www.abc.com/xxx.exe HTTP/1.0" 404 534 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
...

หาดูที่ log จะพบว่า เครื่องที่เรียกไฟล์ xxx.exe นี้มาจาก IP Address 220.191.231.206 หากมีการ attack นิดเดียว เราสามารถใช้ iptables มา band IP Address นี้ได้ แต่ถ้ามีมากจนนับไม่ได้นี่ก็ต้องใช้เครื่องมือช่วยครับ นั่นคือ fail2ban นั่นเอง ในส่วน config ไฟล์ชื่อ jail.conf เราสามารถใช้ regular expression ในการจัดการ filter ข้อมูลใน log ไฟล์ที่เราต้องการได้ ในที่นี้คือ IP ของเครื่องปลายทางที่เรียกไฟล์ xxx.exe นั่นเอง เราก็จะสามารถเพิ่ม config ให้ fail2ban ได้ดังนี้

[apache-trojan-xxx]

enabled = true
filter = ^<HOST> - .*GET.*/xxx.exe
logpath = /var/log/apache/access.log
maxretry = 6

แค่นี้เราก็ได้วิธีการ band เครื่องที่เป็นปัญหาแล้ว :) ลองเอาไปประยุกต์ใช้กันดูนะครับ

Comments are closed.