มาแชร์ประสบการณ์ป้องกันแก้ไขโดน BOTNET โจมตี

พอดีว่าเมื่อคืนมีคนจ้างให้แก้ 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:

+1 Thank

จากที่เคยโดนกระหน่ำจาก botnet โดยมากโดยจากสามประเทศคือ จีน,ยูเครน,us

วิธีผมคือดู ip ใน csf แล้วดูความสัมพันธ์ ของ class C/B แล้ว block ยกคลาส

แต่ยังไม่เคยเข้าไปเช็คเรื่อง log โตเลย คงต้องลองหน่อยแล้ว

จริงๆ มันมีสาเหตุอยู่ที่ผมไม่เอาวิธีมาโพส เพราะถ้าเค้ารู้วิธีที่ใช้ตรวจสอบ+ป้องกัน เค้าอาจแก้ให้มันสุ่มได้ ทีนี้ละตายเลยฮะ

กระซิบมาได้ครับ

ขอบคุณมากครับพี่แมนที่เอามา share แบบนี้ต้อง bookmark แล้ว :beautifu2:

ปล. แอบอยากรู้วิธีของคุณ icez เหมือนกันนะเนี่ย

เอา nginx ดักอีกทีฮะ ที่ผมโดนมันประมาณ 2000 กว่า ip

มีประเด็นที่อยากเสริมคือ “กระบวนการคิดและแก้ไข” ของคุณแมน ที่น่าจะเป็นประโยชน์กับรุ่นน้องๆ ต่อไป ลองสังเกตแนวทางนะครับ

ผมเคยโดนครับ ผมใช้ nginx ดักอีกที แล้วเขียนสคริบเช็คไอพีจาก netstats แล้ว ​deny ใน nginx ครับ

น่าจะย้ายไป [B][/B]Articles/How-To

กด LIKE

เรียบร้อยครับ :slight_smile:

เคยเจอแบบ 4,000 IP up IP ล่ะ [COLOR=#ff0000]80-100 Request ต่อวินาที[/COLOR] << แก้ไขครับ น่าจะ 8-10 Request ต่อวินาที

ตั้ง firewall กัน ก็กิน b/w เกือบหมด เสนอสาย Lan แยก ลูกค้าก็สู้ราคาไม่ไหว เลยต้องให้ลูกค้าย้ายออก -_-’

ลง mod เพิ่มให้ apache จำกัดการรับ connection ไว้แค่ IP ละ 35 process พร้อมๆกัน จะได้กัน IP ที่ยิงมาเป็นพันออกไป

อยากได้อันนี้มั่งจัง ลดภาระการกันไปได้เยอะเลยนะผมว่า :d5f02ecd:

กำหนดใน firewall เลยง่ายกว่า และมันจำกัด connection นะครับ ไม่ใช่จำกัด process

จำกัด process ทำได้บน base on user (ใครใช้ php cgi หรือ mod_ruid2 จะทำได้)

    • โดนจากคนแถวๆนี้ฮะ นอนไม่ได้อยู่เกือบเดือน วิธีแก้ง่ายๆเอาเครื่องที่โดนยิงออก เพราะรู้กันอยู่แล้วว่าทำไมโดนยิง

ถ้าตามวิธีที่คุณ icez แนะนำทำไม nginx ถึงช่วยป้องกันได้เหรอครับ
มีเครื่องนึงผมติดตั้ง nginx ไว้ กระทู้ห้อง how to เลยครับใช้วิธีให้ firewall forword การเชื่อมต่อมาที่ nginx
แต่ไม่มีการตั้งค่าอะไรเพิ่มเติมเลยครับ ลักษณะนี้ก็ป้องกันการ flood server ได้มั้ยครับ

ต้องเขียน rule เพิ่มเติมครับ

กรณีที่ติดตั้ง nginx ขวางหน้า apache ไว้
เวลาโดนยิง เราสามารถเพิ่ม rule ตามที่ต้องการเข้าไปใน nginx ได้ ว่าถ้า request มาแบบนี้ ให้ error กลับไป ก็จะช่วยลดโหลดในการเข้าถึง apache ไปได้
ในขณะที่ apache ก็สามารถทำได้ผ่าน mod_rewrite โดยกำหนดใน .htaccess แต่จากที่ทดสอบดูแล้ว mod_rewrite ใช้ cpu ค่อนข้างสูง ทำให้โหลดขึ้นสูงกว่าเดิมขึ้นไปอีก

การจำกัดจำนวน conncetion สามารถทำได้หลายวิธี การจำกัดด้วย firewall ก็เป็นวิธีหนึ่ง
ซึ่งในการแก้ไขปัญหา เราสามารถเลือกใช้วิธีใดวิธีหนึ่ง หรือใช้หลายๆวิธีผสมกัน ได้ตามความเหมาะสมครับ