كيف يمكنني تنفيذ تحديد المعدل مع Apache؟(الطلبات في الثانية)

StackOverflow https://stackoverflow.com/questions/131681

  •  02-07-2019
  •  | 
  •  

سؤال

ما هي التقنيات و/أو الوحدات المتاحة لتنفيذ تحديد قوي للمعدل (الطلبات | البايتات/IP/وقت الوحدة) في Apache؟

هل كانت مفيدة؟

المحلول

الأفضل

  • mod_evasive (ركز أكثر على تقليل التعرض لحجب الخدمة)
  • mod_cband (أفضل ميزة للتحكم في عرض النطاق الترددي "العادي")

و البقية

نصائح أخرى

كما جاء في هذه المدونة آخر يبدو من الممكن استخدامها mod_security لتنفيذ حد معدل في الثانية.

التكوين هو شيء من هذا القبيل:

SecRuleEngine On

<LocationMatch "^/somepath">
  SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
  SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
  SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
  SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
  Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>

ErrorDocument 509 "Rate Limit Exceeded"

هناك العديد من الطرق بما في ذلك جدران الحماية لتطبيقات الويب ولكن أسهل شيء يمكن تنفيذه في حالة استخدام تعديل Apache.

أحد هذه التعديلات التي أود أن أوصي بها هو mod_qos.إنها وحدة مجانية فعالة جدًا ضد هجمات معينة من نوع DOS وBruteforce وSlowloris.سيؤدي هذا إلى تخفيف تحميل الخادم الخاص بك قليلاً.

انها قوية جدا.

الإصدار الحالي من mod_qos تطبق الوحدة آليات التحكم لإدارة:

  • الحد الأقصى لعدد الطلبات المتزامنة إلى موقع/مورد (url) أو المضيف الظاهري.

  • الحد من عرض النطاق الترددي مثل الحد الأقصى المسموح به عدد الطلبات في الثانية على عنوان URL أو الحد الأقصى/الحد الأدنى من kbytes التي تم تنزيلها في الثانية.

  • يحد من عدد أحداث الطلب في الثانية (شروط طلب خاصة).

  • يحد من عدد أحداث الطلب خلال فترة زمنية محددة.
  • يمكنه أيضًا اكتشاف الأشخاص المهمين جدًا (VIP) والذي قد يصل إلى خادم الويب بدون أو مع قيود أقل.
  • خط الطلب العام وفلتر الرأس لإنكار العمليات غير المصرح بها.

  • طلب تحديد بيانات الجسم وتصفيتها (يتطلب mod_parp).

  • يحد من عدد أحداث الطلب للعملاء الفرديين (IP).

  • القيود المفروضة على مستوى اتصال TCP ، على سبيل المثال ، الحد الأقصى لعدد الاتصالات المسموح بها من عنوان مصدر IP واحد أو التحكم الديناميكي للحماية.

  • يفضل عناوين IP المعروفة عندما ينفد الخادم من اتصالات TCP المجانية.

هذا نموذج لتكوين ما يمكنك استخدامه من أجله.هناك المئات من التكوينات الممكنة لتناسب احتياجاتك.تفضل بزيارة الموقع لمزيد من المعلومات حول عناصر التحكم.

Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate                                 120

# limits the connections for this virtual host:
QS_SrvMaxConn                                     800

# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose                                600

# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP                                 50

# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP                    172.18.3.32
QS_SrvMaxConnExcludeIP                    192.168.10.

http://opensource.adnovum.ch/mod_qos/

في Apache 2.4، هناك وحدة مخزون جديدة تسمى mod_ratelimit.لمحاكاة سرعات المودم، يمكنك استخدام mod_dialup.على الرغم من أنني لا أفهم سبب عدم قدرتك على استخدام mod_ratelimit في كل شيء.

للأسف، mod_evasive لن تعمل كما هو متوقع عند استخدامها في تكوينات غير مسبقة (إعدادات Apache الأخيرة هي MPM بشكل أساسي)

خيار آخر - mod_qos

ليس من السهل تكوينه - ولكنه قوي.

http://opensource.adnovum.ch/mod_qos/

يعتمد على سبب رغبتك في تحديد الحد الأقصى للسعر.

إذا كان الهدف هو الحماية من التحميل الزائد على الخادم، فمن المنطقي في الواقع وضع NGINX أمامه وتكوينه الحد من المعدل هناك.وهذا أمر منطقي لأن NGINX يستخدم موارد أقل بكثير، مثل بضع ميغابايت لكل عشرة آلاف اتصال.لذلك، إذا كان الخادم ممتلئًا، فسيقوم NGINX بتحديد المعدل (باستخدام كمية ضئيلة من الموارد) وتمرير حركة المرور المسموح بها فقط إلى Apache.

إذا كان كل ما تبحث عنه هو البساطة، فاستخدم شيئًا مثل mod_evasive.

كالعادة، إذا كان الأمر يتعلق بالحماية من هجمات DDoS أو DoS، فاستخدم خدمة مثل Cloudflare والتي لديها أيضًا حدود للمعدل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top