الهجمات البطيئة مثل Slowloris أو Slow POST تستهدف استهلاك موارد السيرفر عن طريق إرسال طلبات HTTP جزئية ببطء شديد. إذا لم يتم التعامل معها، يمكن أن تؤدي لتعطل موقعك أو زيادة زمن الاستجابة. في هذا الدليل سنتعلم طرق عملية لحماية موقعك وتحسين الأداء مع أمثلة كود جاهزة.
1️⃣ الحد من زمن الاتصال وقراءة الجسم في Apache
يمكنك استخدام mod_reqtimeout للحد من الوقت المسموح لكل طلب:
<IfModule reqtimeout_module>
RequestReadTimeout header=10-20,minrate=500 body=10,minrate=500
</IfModule>
شرح:
header=10-20,minrate=500→ يسمح 10 ثوانٍ للجزء الأول من الهيدر، وإذا استمر الطلب، يسمح 20 ثانية على الأقل بسرعة 500 بايت/ثانية.body=10,minrate=500→ نفس الشيء للجسم (POST data).
2️⃣ حماية Nginx من هجمات Slow POST و Slowloris
http {
...
# الحد من الاتصال البطيء
client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 15s;
send_timeout 10s;
}
هذا يمنع أي عميل من فتح الاتصال لفترة طويلة دون إرسال بيانات، وهو فعال ضد هجمات البطء.
3️⃣ استخدام Fail2Ban لمنع الهجمات المتكررة
Fail2Ban يمكنه مراقبة سجلات السيرفر وحظر أي IP يقوم بمحاولات بطئية أو مشبوهة.
ملف تكوين مثال لـ Apache:
[slowhttp]
enabled = true
filter = apache-slow
logpath = /var/log/apache2/access.log
maxretry = 5
bantime = 3600
filter/apache-slow.conf:
[Definition]
failregex = .*POST.*HTTP/1\.1".* 200
ignoreregex =
عند اكتشاف طلبات POST مكررة وبطيئة، يقوم Fail2Ban بحظر الـ IP تلقائيًا.
4️⃣ حماية التطبيقات باستخدام PHP
في حالة المواقع المبنية على PHP، يمكنك التحقق من وقت إرسال البيانات لمنع الهجمات البطيئة:
<?php
$start_time = microtime(true);// تحقق من وقت تنفيذ كل POST
register_shutdown_function(function() use ($start_time) {
$duration = microtime(true) - $start_time;
if($duration > 10){ // أكثر من 10 ثوانٍ
header('HTTP/1.1 408 Request Timeout');
exit();
}
});// قراءة POST data
$data = file_get_contents('php://input');
هذا يمنع أي طلب POST يستغرق وقت طويل ويعطي رد Timeout.
5️⃣ استخدام Cloudflare أو WAF
- Cloudflare أو أي Web Application Firewall يمكنه منع الهجمات البطيئة على مستوى الشبكة قبل الوصول للسيرفر.
- يمكن إعداد Rate Limiting على
/login,/checkoutأو أي نقطة حساسة.
# مثال Rate Limit عبر Cloudflare API
curl -X POST "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/rate_limits" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
--data '{
"match": {"request":{"url":"*","methods":["POST"]}},
"threshold": 10,
"period": 60,
"action":{"mode":"simulate"}
}'
يمكنك تغيير
"mode":"simulate"إلى"mode":"ban"لتطبيق الحظر الفعلي.
6️⃣ تحسين أداء السيرفر لتقليل تأثير الهجمات
- استخدام Nginx كـ Reverse Proxy أمام Apache لتقليل استهلاك الموارد.
- تمكين Keep-Alive بذكاء لتقليل زمن فتح/إغلاق الاتصالات.
- تحديد عدد الاتصالات لكل IP:
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 10;
هذا يسمح لكل IP بحد أقصى 10 اتصالات متزامنة فقط.
بهذه الطرق، ستتمكن من حماية موقعك من هجمات HTTP البطيئة وتحسين أداء السيرفر بشكل كبير، مع تطبيق أكواد عملية على Apache، Nginx، PHP، وCloudflare.