วันนี้ผมโดน Bot Net ยิงครับมาดูวิธีแก้ไข ที่ได้ผล เลยเอามาเล่าสู่กันฟัง

ที่เขียนขึ้นมานี้ สำหรับเจ้าของ Host ทุกท่านที่เจอปัญหาโดนยิงนะครับ

เรื่องมีอยู่ว่ามีเว็บไซด์หนึ่งชื่อ icafe.in.th (ขอเอยชื่อเว็บเลยนะครับ เนื่องจากค้นใน Google แล้วพบวีรกรรมเยอะครับ) ได้มาใช้บริการ Hosting ของเรา ซึ่งเราก็คงไม่ทราบว่าเขาไปสร้างวีรกรรมอะไรมาใช่มั้ยครับ ตอนแรกก็ไม่มีเว็บนี้อยู่หรอก ก็มาด้วยชื่ออื่นนั้นแหละครับ

แล้วอยู่ๆ ก็มีเว็บนี้ขึ้นมา ปรากฎว่า ถูก Botnet ยิงเข้ามา จน Server เกือบร่วง คือยิงเข้ามา 30Mbps แต่ Server เราต้องตอบออกไป 100 Mbps กระทบต่อ Network ทั้งวง คือทำให้ Network ช้าๆ ไปเลย

วิธีการหาที่มาของ เว็บที่ถูกยิง คือดูจาก server-status มันขึ้นชื่อโดเมนมาเพียบเลย

ขั้นแรกผมไป Block ที่ nginx โดยเพิ่ม deny all; ลงไป แต่ก่อนมันกันได้นะครับ แต่ครั้งนี้ จำนวน IP ที่ยิงเข้ามามาก nginx ไม่ตายครับ แต่มันส่ง ข้อมูลตอบกลับไปครับ ที่นี้ยิงเข้ามา 30 Mbps มันตอบออกไปเป็น 100 Mbps เลยครับ วิธีนี้จึงไม่ได้ผล Server ช้ามากอยู่ดี

ต่อมาผมใช้วิธีที่ 2 คือ หลังจาก deny all; แล้วมันจะมี error log ซึ่งเราอ่านมันได้ แล้วเขียน script อ่าน error log มา Block IP วิธีนี้ได้ผลครับ แต่มัน Block ไปกว่า 2,000 IP และ IP ยังเข้ามาเรื่อยๆ โห มันมีกองทับใหญ่ขนาดนี้เชียวครับ วิธีนี้ Block ได้ดี แต่ว่า IP ที่ติด Botnet อาจเข้าเว็บอื่นๆ ใน Host ไม่ได้เลย

มาดูวิธีที่ 3 ครับ วิธีนี้จบเลยครับ ง่ายมากๆ ด้วยแนวคิดง่ายๆ ก็ดูไปเลยถ้ามันมีชื่อโดเมนบางส่วนก็ Block เลย ผมใช้ iptables ครับ มาดูกัน

เนื่องจาก IP ผมเป็น VPS เลยใช้คำสั่งนี้ที่ เครื่องหลักเลยครับ

iptables -A FORWARD -p tcp -d 122.155.7.192 --dport 80 -m string --string ‘icafe’ --algo bm -j DROP
---------------------------------------------------------------------------------------^
---------------------------------------------------------------------------------------^ ตรงส่วนนี้คือ string ที่เรากรองครับ

ทันที่ใช้คำสั่งนี้ ทุกอย่างกลับมาปกติครับ ไม่มีอะไรเข้าไปถึงยัง webserver ได้เลยครับ

วิธีดังกล่าวนอกจากจะ Block ด้วย string ของ tcp แล้วยังสามารถ block การยิง DNS ได้ด้วยครับ แค่เปลี่ยนแปลง ค่า protocol และ string นิดหน่อยครับ

หวังว่าคงจะเป็นประโยชน์กับทุกๆ ท่านไม่มากก็น้อยนะครับ

มาเก็บความรู้ ขอบคุณครับ :d5f02ecd:

โอ้วความรู้ ขอบคุณก๊าบบบบบบบบบบบบบบบบ

[COLOR=#333333][I]iptables -A FORWARD -p tcp -d 122.155.7.192 --dport 80 -m string --string ‘icafe’ --algo bm -j DROP

มีข้อสงสัย ขอถามหน่อยครับ

  1. 122.155.7.192 คือไอพีของเครื่องตัวเองใช่ไหมครับ

  2. [/I][/COLOR][I]–string ‘icafe’[/I][COLOR=#333333][I] นี่ต้องเพิ่มอะไรยังไงบ้างหรอครับ พอดีไม่ค่อยเข้าใจตรงนี้

ขอบคุณครับ
[/I][/COLOR]

122.155.7.192 คือ IP ที่ของ VPS ครับ คือ ข้อมูลจะต้องวิงผ่านเครื่องหลักก่อน (Openvz) ไปยัง IP 122.155.7.192

ส่วน –string ‘icafe’ คือ ผมกรอง เว็บไวด์ชื่อ icafe.in.th แต่ผมกรองเฉพาะ คำว่า icafe คือถ้ามีคำว่า [I]icafe ใน url ให้ Block ไปได้เลย

กรณีไม่ได้ใช้ VPS ให้แก้ไขเป็น

[/I]iptables -A INPUT -p tcp --dport 80 -m string --string ‘icafe’ --algo bm -j DROP[I]

ไม่ต้องระบุ IP ปลายทางก็ได้[/I]

ขอบคุณครับ ได้ความรู้มากเลยครับพี่ ems

****** แต่ผมกรองเฉพาะ คำว่า icafe คือถ้ามีคำว่า icafe ใน url ให้ Block ไปได้เลย

สงสัยอีกนิด ใส่คำว่า icafe แบบนี้ แล้วไม่โดนบล๊อกตอน user เข้า เว็บหรอครับ เพราะเว็บก็ชื่อ icafe.in.th

พอดีเรียนมาแต่ใช้ apf ครับ
คำสั้งนี้เขียนใน apf ได้มั้ยครับ

หรือเอาไปใส่ใน pre route rule ได้เลยมั้ยครับ

ก็เข้าเว็บ icafe.in.th ไม่ได้เลยครับ คือเรื่องของเรื่องคือเราถูกยิงเราเป็น share host ย่อมไม่อยากให้ host ล่ม ประเด็นนี้คือ เรา Suspend แล้วแต่ก็ยังล่ม หรือแม้แต่ลบโดเมนที่ถูกยิงไปแล้วมันก็ยังล่ม

เพราะ Webserver เรายังรับข้อมูลได้อยู่ เราก็เลยตัดไม่ให้มันเข้าถึงเว็บนี้ได้เลยครับ

อย่าง icafe.in.th มันไม่ได้ชี้ NS1 NS2 มา Host นี้ แต่มันเล่นยิง A Record เข้ามาเลย

เสี่ยโดนจัดเต็มเลยเว็บนี้โหดมาก ทำ A ใส่เป็น ID2 ยิงตรงเลย

ใช่ครับ งานนี้ผมจะทำหมันเว็บ icafe.in.th มันที่ Firewall หลักขาเข้า เลยครับ อย่าหวังเข้ามาใช้ IP อื่นๆ ในเครือ

โหดมาก แล้วถ้ามันเปลี่ยนเว็บอะจะทำไง

ก็คงต้องเขียน script คอยตรวจสอบละครับ แต่เรารู้วิธีแล้วนี่ครับ Block ก็ไม่ยาก เพราะแค่บรรทัดเดียว

แบบนี้ traffic ก็ยังคงเข้าเครื่องเหมือนเดิมอยู่ดีปะครับ. ไม่เท่ากับปิดเว็บนั้นไปรึ คือ มันจะต่างกับการปิดเว็บนั้นไปยังไง (ในกรณีเป็นเครื่องธรรมดาที่ไม่ใช่ VPS)

traffic เข้ามาถึง network แต่เข้าไม่ถึง web server ไงครับ :slight_smile:

ใช่ครับ วิธีนี้เป็นการตัด connection ที่ Network เลย ทำให้ Traffic ไม่ถึงเว็บ web server เมื่อไม่ถึง web server ก้ไม่ต้องตอบ อะไรไป ต่างจากการปิดเว็บไซด์ Traffic ยังวิ่งเข้าถึง Web Server ทำให้ Web server ตั้งต้องคอยตอบ อย่างน้อยก็ต้องตอบว่าไม่มีเว็บที่คุณเรียกนะ

ความจริงวิธีนี้มีจุดอ่อนนิดนึง คือถ้าคำที่เรากรองไม่เจาะจงพอมันอาจไป block user ธรรมดาได้ แล้วก็ icafe != iCafe (rule เป็น case sensitive) ทำให้หากเข้า iCafe.in.th อาจหลุดได้ (แต่เคสนี้ไม่ค่อยเจอ)

ที่ว่า nginx ส่ง traffic กลับไป 100M นี่ return ค่าเป็นอะไรครับ
ที่ผมใช้อยู่จะ return 444; มันจะไม่ส่งอะไรกลับไปเลยนะ ที่ browser จะขึ้่น connection reset ไปเลย
ทำให้กรองเฉพาะบาง url ได้

ส่วนกรองด้วย firewall -m string ก็ใช้ได้ผลดี แต่ว่าจะกรองได้ที่ชื่อโดเมนเท่านั้น กรอง path ใน url ไม่ได้ คือต้องกรองทิ้งไปทั้งโดเมนเลย
ซึ่งถ้าทำแบบนี้ก็คือทำเพื่อ block ระหว่างที่ dns ยังไม่ update เพราะยังไงก็เข้าไม่ได้ทั้งเว็บ แก้ dns ลบ A record ทิ้งไปเลยดีกว่า (เว้นแต่ว่าลูกค้าไม่ได้ใช้ dns ในเครื่องเรา)

ไม่มีเว็บที่คุณเรียกนะ << ชอบจัง คำนี้ :th_059_:

ตอนนี้เริ่มเบื่อยิงออกแทน - -"

ใช่ครับ เข้ามาฝังตามเว็บและเว็บบอร์ดลูกค้า แล้วยิงออกเยอะกว่าอีกครับตอนนี้ อิอิ