จะบล็อกที่อยู่ IP โดยอัตโนมัติและชั่วคราวซึ่งสร้างการเข้าชมมากเกินไปบนเซิร์ฟเวอร์ในช่วงเวลาสั้น ๆ ได้อย่างไร


21

หนึ่งในเซิร์ฟเวอร์ LAMP ของฉันเพิ่งถูกนำมาใช้โดยสคริปต์บอทบางประเภทที่กำลังมองหาช่องโหว่ จากรูปลักษณ์ของมันมันทำให้การร้องขอจำนวนมากในวินาทีที่มันโอเวอร์โหลดแรมบนเซิร์ฟเวอร์และทำให้ทั้งเว็บไซต์ของฉันลงเป็นเวลาหนึ่งชั่วโมง "attacK" นั้นมาจากที่อยู่ IP เดียว

ดังนั้นฉันจะปิดกั้นที่อยู่ IP โดยอัตโนมัติและชั่วคราวทำให้มีจำนวนการเข้าชมมากเกินไปบน LAMP Server ของฉันในช่วงเวลาสั้น ๆ ได้อย่างไร อะไรคือเครื่องมือที่ดีที่สุดสำหรับงานและฉันควรแก้ไขปัญหานี้ในระดับระบบปฏิบัติการหรือผ่าน PHP

คำตอบ:


25

fail2ban โซลูชันมาตรฐาน / ค่าเริ่มต้นที่เป็นทองสำหรับปัญหานี้บนแพลตฟอร์ม Linux


น่าสนใจขอบคุณ สิ่งนี้จัดการกับหรือส่งผลกระทบต่อโปรแกรมรวบรวมข้อมูลเว็บเช่น Google ได้อย่างไร
ProgrammerGirl

1
@Programmer ขึ้นอยู่กับว่าคุณกำหนดค่าสิ่งต่าง ๆ อย่างไร แต่คุณไม่คาดหวังว่าตัวรวบรวมข้อมูลเว็บจะป้อนรหัสผ่านที่ไม่ถูกต้องค้นหาการหาประโยชน์หรือเพิ่มจำนวนครั้งที่มากพอที่จะเรียกใช้เกณฑ์ที่กำหนดได้ สิ่งที่จะกำหนดเกณฑ์ของคุณที่
HopelessN00b

5

คุณควรหลีกเลี่ยงการพยายามทำสิ่งนี้กับ PHP เมื่อถึงเวลาที่ PHP เข้ามาเกี่ยวข้องมันก็สายเกินไปแล้ว - จัดสรรหน่วยความจำแล้ว

คุณสามารถแบนที่อยู่ IP ได้ทุกเลเยอร์ แต่ระดับต่ำสุดที่ใช้จำนวนทรัพยากรน้อยที่สุดคือเส้นทางที่คุณต้องการ โดยปกติจะเป็นไฟร์วอลล์ อย่างน้อยที่สุด iptables (ไฟร์วอลล์ linux) คือสิ่งที่คุณต้องการใช้ มีเครื่องมือที่คนอื่นพูดถึงเช่น Fail2Ban ซึ่งสามารถทำสิ่งนี้ให้คุณได้โดยอัตโนมัติ ไฟร์วอลล์ภายนอกจะดีกว่า

นอกเหนือจากการพยายามแบนการละเมิดที่อยู่ IP คุณควรพยายามใช้ทรัพยากรของคุณให้ดีขึ้น หากการร้องขอใช้ทรัพยากรน้อยกว่าจะใช้เวลานานกว่าการโจมตีจะมีประสิทธิภาพ

Apache ยังใช้หน่วยความจำจำนวนมาก หากคุณใช้ mod_php มันยิ่งแย่กว่าเดิมเพราะ PHP โหลดอยู่ในกระบวนการลูกอาปาเช่ทุกขั้นตอน ซึ่งหมายความว่าแม้คำขอไปยังเนื้อหาแบบคงที่ (css / js / images) กำลังโหลด PHP แม้ว่าจะไม่ได้ใช้งาน คุณสามารถแก้ปัญหานี้ได้โดยใช้ FastCGI แทน mod_fcgid เป็นตัวเลือกที่ดี

นอกจากนี้ยังมีเว็บเซิร์ฟเวอร์อื่น ๆ ที่ใช้ทรัพยากรอย่างมีประสิทธิภาพ Nginx เป็นรายการโปรดของฉัน นอกจากนี้ยังมี Lighttpd ผู้คนจำนวนมากเช่น Litespeed (เปลี่ยนแทน Apache)

หากคุณต้องการใช้ Apache ให้ลองปรับให้ดีที่สุดเท่าที่จะทำได้ พิจารณาปิดการใช้งาน. htaccess นี่คือคำอธิบายที่ดีว่าทำไม


2

ในการควบคุมหรือปิดกั้นการรับส่งข้อมูล http คุณสามารถใช้:

  • โมดูล Apache
  • iptable
  • fail2ban ตามที่ระบุไว้ที่นี่โดย HopelessN0ob

อย่างไรก็ตามโปรดทราบว่าเครื่องมือเหล่านี้อาจบล็อก / ช้าเว็บสไปเดอร์และอาจส่งผลกระทบต่อ SEO


2
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

ossecสามารถทำสิ่งนี้โดยอัตโนมัติและโปร่งใสตาม syslogs


1
คุณกรุณาอธิบายว่าบรรทัดแรกของโค้ดทำอะไรได้บ้าง? นอกจากนี้ ossec เปรียบเทียบกับ fail2ban อย่างไร ขอบคุณ
ProgrammerGirl

2
มันเป็นกฎ iptables ฉันเชื่อว่ามันนับว่ามีความพยายามเชื่อมต่อใหม่เกิดขึ้นและลดลงหลังจากพยายามเกิน 4 ครั้งภายใน 60 วินาที ฉันขอแนะนำให้คุณดูman iptablesและดูความหมายของแต่ละธงและวิธีการทำงานร่วมกัน
ลุค

-3

NoooBS,

--- น้ำท่วม ---

iptables -N logdrop iptables -A logdrop -m ล่าสุด - ชุด - บัญชีดำบัญชีดำ

iptables -A logdrop -m limit - จำกัด 1 / s - เปิดระเบิด 1 -j เข้าสู่ระบบ --log-prefix "Flood:"

iptables -A logdrop -j DROP

iptables -N ddos ​​iptables -A ddos ​​-m ล่าสุด --rcheck - ชื่อบัญชีดำ - วินาที 300 - เลข 1 - j logdrop -j iptables - ddos ​​-m ล่าสุด - ชุด - ชื่ออีกครั้ง iptables -A ddos ​​-m ล่าสุด - ปรับปรุง - ชื่ออีกครั้ง - วินาที 60 - จำนวน 2 -j logdrop iptables -A ddos ​​-j กลับมา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.