พอดีว่าเมื่อคืนมีคนจ้างให้แก้ botnet เลยขอมาแชร์ให้ฟังละกัน
เครื่องนี้เป็น centos + da มาตรฐาน มี csf firewall ลงไว้แล้ว
เริ่มจากดู apache status ว่าโดน request เข้ามาที่ url อะไร path อะไร
แล้วก็ไปดู apache log ของโดเมนนั้นๆว่า request นั้นมีรูปแบบซ้ำกันหรือไม่อย่างไร (เท่าที่ได้ก็คือ file.php อันเดิม และ user agent เหมือนกันหมด)
ทำการปิด keepalive เพื่อให้รับ connection เข้ามาได้เต็มที่
เนื่องจาก request เข้ามาตลอดจนโหลดขึ้นไปหลายร้อย พิมพ์อะไรก็สะดุดๆตลอด เลยปิด apache ไว้ก่อนจะได้ทำอะไรสะดวกหน่อย
จากที่ลอง process log แบบ manual พบว่าหลายๆ IP มาแบบเรื่อยๆวินาทีละไม่กี่ request แต่ก็มีบาง IP มาแบบยิงกระจายคือใน 1 วินาที มาทีเดียวเป็นพัน request กันเลย
ก็เลยลง mod เพิ่มให้ apache จำกัดการรับ connection ไว้แค่ IP ละ 35 process พร้อมๆกัน จะได้กัน IP ที่ยิงมาเป็นพันออกไป
แล้วก็ block IP ที่พบออกไปก่อนชุดหนึ่ง เดี๋ยวเปิด apache แล้วจะได้ไม่เข้ามาเยอะมาก
จากนั้นก็ทำการติดตั้ง script เพื่อเช็ค log ของ apache และ block ใน firewall อัตโนมัติ
เนื่องจากโดนยิงมาทั้งวันจน log มีขนาดหลาย GB ไปแล้ว เลยยังไม่สั่ง run script ทันที เพราะมันจะทำงานหนักและนานเกินไป ก็แก้ค่าให้มันเริ่มทำงานที่ส่วนท้ายสุดของ log ซะก่อน
จากนั้นก็เปิด apache ให้ทำงานแล้วก็ปล่อยให้ script ทำงานไปเรื่อยๆ โดยตั้งแบบพิเศษให้ทำงานทุกๆ 5 วินาที เพราะ bot เข้ามาเร็วมาก
ปล่อยไปสักพักก็ยังมี request เข้ามาอยู่เรื่อยๆ เช็คไปเช็คมา csf มันตั้งให้เก็บ deny ip ไว้แค่ 100 IP อันเก่าที่เกินมันลบทิ้ง งั้นปรับใหม่เป็น 0 ไว้ก่อน จะได้ดูว่ามีซักกี่ IP
ผ่านไปซัก 40 นาที โหลดลดลงจนมานิ่งๆอยู่ที่ 1-2 เช็คดูไม่มี IP ถูก block เพิ่ม และดูจาก apache log ไม่มี request ที่เป็น botnet เข้ามาเลย น่าจะสำเร็จละ
แต่ใจก็เริ่มสงสัยว่าเรา block หมดเกลี้ยง หรือว่ามันหยุดถล่มไปแล้วหว่า งั้นลองปิด firewall ดูซิ ปิดปุ๊บมี botnet เข้ามาใน apache log ทันที แปลว่าสำเร็จ ทำการเปิด firewall กลับอย่างเดิม
เมื่อนิ่งๆดีแล้วก็ไปปรับให้ script กลับมาทำงานแบบปกติตาม cron โดยตั้งไว้ทุก 1 นาที จะได้ไม่ต้อง process log หลายบรรทัด
ทีนี้ก็มาดูว่า block ไปกี่ IP ดูแล้วก็ไม่ได้เยอะมาก แค่ร้อยกว่าๆ ก็เลยกลับไปปรับ csf ให้เก็บ deny ip ไว้ที่ 500 พอ
ดูจาก IP แค่ร้อยกว่าๆ ก็น่าจะปล่อยไปกับ client เกมส์ ที่ตั้ง server เอง ส่วน IP จะมีกี่มากน้อยก็ขึ้นกับสาวกที่กำลังเปิด client เล่นเกมส์ของ server นั้นๆอยู่
script เช็คก็ต้องปล่อยให้ทำงานต่อไปเรื่อยๆ เพราะถ้า client ต่อเนตใหม่ หรือสาวกบางคนเพิ่งเปิดเครื่องเข้ามาเล่นเกมส์ ก็จะมี IP ใหม่เข้ามา
:015: