Apache: จำกัด จำนวนคำขอ / ปริมาณการใช้ต่อ IP หรือไม่


12

ฉันต้องการอนุญาตให้ IP เดียวใช้การรับส่งข้อมูลสูงสุด 1GB ต่อวันและหากเกินขีด จำกัด นั้นคำขอทั้งหมดจาก IP นั้นจะถูกส่งไปจนถึงวันถัดไป อย่างไรก็ตามวิธีแก้ไขปัญหาที่ง่ายกว่าที่การเชื่อมต่อถูกตัดหลังจากคำขอจำนวนหนึ่งพอเพียง

มีโมดูลบางประเภทที่สามารถทำสิ่งนี้ได้หรือไม่? หรือบางทีฉันสามารถบรรลุสิ่งนี้ผ่านบางสิ่งบางอย่างเช่น iptables?

ขอบคุณ


รุ่น Apache
pehrs

2.2 - การ จำกัด จำนวนอักขระ

คำตอบ:


5

ถ้าคุณต้องการโซลูชัน Apache ที่แท้จริง bw_mod สำหรับ Apache 2.0 และ mod_bandwidth สำหรับ Apache 1.3 พวกเขาสามารถ จำกัด แบนด์วิดท์ของเซิร์ฟเวอร์ของคุณเพื่อ จำกัด การใช้แบนด์วิดท์

นอกจากนี้ยังมี mod_limitipconn ซึ่งป้องกันผู้ใช้รายหนึ่งจากการเชื่อมต่อกับเซิร์ฟเวอร์ของคุณ mod_cband เป็นอีกตัวเลือกหนึ่ง แต่ฉันไม่เคยใช้มัน

หากคุณไม่ต้องการยุ่งกับการติดตั้ง Apache ของคุณคุณสามารถใส่ squid proxy ไว้หน้า Apache มันช่วยให้คุณควบคุมได้มากขึ้นในการควบคุมปริมาณ

อย่างไรก็ตามในกรณีส่วนใหญ่ปัญหาคือวัตถุขนาดใหญ่ไม่กี่เมื่อคุณต้องการ จำกัด แบนด์วิดท์ต่อ IP และคุณต้องการให้ข้อความแสดงข้อผิดพลาดที่มีเหตุผลเมื่อผู้ใช้ดึงข้อมูลมากเกินไปและคุณบล็อกเขา ในกรณีนี้อาจเป็นการง่ายกว่าที่จะเขียนสคริปต์ PHP และจัดเก็บข้อมูลการเข้าถึงในตารางชั่วคราวในฐานข้อมูล


2
ขอบคุณสำหรับคำแนะนำ ฉันดู bw_mod และ mod_limitipconn แล้ว แต่ไม่ (เท่าที่ฉันจะบอกได้) ทำในสิ่งที่ฉันต้องการ mod_limitipconn เพียง จำกัด การเชื่อมต่อครั้งเดียวและ bw_mod อนุญาตให้ฉัน จำกัด อัตราการดาวน์โหลดต่อ IP เท่านั้น ฉันต้องการบล็อกพวกเขาหลังจากการถ่ายโอนข้อมูล / คำขอจำนวนหนึ่ง ฉันพยายามปกป้องผู้ใช้บางคนที่รู้สึกต้องการรวบรวมข้อมูลเว็บไซต์ของฉันและดาวน์โหลดทุกอย่าง ฉันจะดูเป็นพร็อกซีปลาหมึกฟังดูน่าสนใจ หากไม่ได้ผลฉันคิดว่าฉันจะใช้วิธีการแก้ไขแหล่งที่มาของ bw_mod

คุณตั้งค่า robots.txt เป็นไม่อนุญาตสไปเดอร์หรือไม่
pehrs

1
ปัญหาเกี่ยวกับ robots.txt คือ (เหมือน RFC 3514) เฉพาะหุ่นยนต์ที่ดีเท่านั้นที่เคารพมัน
Scott Pack

จริง แต่คุณจะพบว่าคนส่วนใหญ่ที่สร้างไซต์ของคุณใช้เครื่องมือมาตรฐาน และหลายคนเช่น wget เคารพ robots.txt Robots.txt เป็นวิธีที่ถูกต้องในการแจ้งผู้ใช้ของคุณว่าคุณไม่ต้องการให้แมงมุม
pehrs

1
ฉันลองแล้ว ในตอนแรก robots.txt ก็เพียงพอแล้วพวกเขาบอก Wget ให้เพิกเฉย robots.txt ดังนั้นฉันจึงหันไปบล็อกผู้ใช้ตัวแทน "ที่ไม่รู้จัก" แต่พวกเขาก็หลอกตัวแทนผู้ใช้ พวกเขามักจะทำการร้องขอหัวจำนวนมากในขณะที่เบราว์เซอร์ที่ถูกกฎหมายไม่ได้ดังนั้นฉันจึงอาจ จำกัด การร้องขอหัวหรือปิดการใช้งานพร้อมกัน (ต้องการน้อยกว่า)

5

นี่คือโซลูชัน iptables ของฉันสำหรับปัญหาประเภทนี้ ปรับ--seconds --hitcountตามที่คุณต้องการและยังมีตาราง iptables

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT

อธิบาย:

  1. iptablesตรวจสอบว่า IP ต้นทางแสดงอยู่ในไฟล์ / proc / net / ipt_recent / ATACK เป็นเวลา 5 หรือมากกว่านั้นในช่วงเวลา 600 วินาทีหรือไม่และเป็นคำขอใหม่ หากเป็นเช่นนั้นให้ทำการปฏิเสธ อื่น

  2. iptables ตรวจสอบว่าคำขอถูกส่งไปยังพอร์ต 80 หรือไม่ถ้าใช่ให้พิมพ์ IP และการประทับเวลาไปที่ / proc / net / ipt_recent / ATACK และส่งต่อแพ็กเก็ต

มันทำงานได้ดีสำหรับความต้องการของฉัน


3

คุณดูเครื่องมืออย่าง fail2ban แล้วหรือยัง? หากคุณอาจจะหนักไปหน่อยสำหรับคุณ แต่มันจะช่วยให้คุณ จำกัด จำนวนการร้องขอใด ๆ ที่ได้รับอนุญาต IP มันทำงานได้โดยดูที่บันทึกและคุณตั้งกฎสำหรับจำนวนการละเมิดต่อเวลาที่อนุญาตดังนั้นสำหรับคุณที่อาจร้องขอต่อวัน เมื่อพวกเขาข้ามไปมันสามารถทำสิ่งต่าง ๆ เช่นบล็อกพวกเขาโดยใช้ ipchains

ฉันใช้มันเพื่อป้องกันการจู่โจม DDoS กับเมลเซิร์ฟเวอร์สำเร็จมาก มันสามารถใช้พลังงานโปรเซสเซอร์จำนวนมากแม้ว่า


ปัจจุบัน; y กำลังจะใช้สิ่งนี้ด้วยตนเอง หวังว่ามันจะใช้งานได้
Dark Star1

1

ลองmod_dosevasiveหรือmod_security

mod_dosevasive สามารถกำหนดค่าให้แบนไอพีได้หลังจากมีการระบุหมายเลขหรือการร้องขอเพจไปยังไซต์ในช่วงเวลาที่กำหนด

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