قام أحد الأصدقاء بوضع موقع الويب الخاص بشركته على مضيفه السحابي، ولم تكن حركة المرور كبيرة، نظرًا لأنه تم استخدامه وتعرضه للهجوم في كثير من الأحيان من قبل CC، وكان المظهر الرئيسي هو زيادة IO ووحدة المعالجة المركزية بشكل حاد، وأخيرًا، تم تعليق قاعدة البيانات أصبح الموقع غير قابل للوصول. تم تمكين Cloudflare في البداية، لكن المهاجم قام بالمسح بشكل محموم وكان تأثير الدفاع متوسطًا.
من أجل تحديد عناوين IP الضارة بدقة، تحتاج إلى تمكين وحدة Real IP في Nginx وApache بعد تمكين Cloudflare CDN، ثم استخدام البرامج النصية لتحليل سجلات موقع الويب، وجمع عناوين IP غير الطبيعية من السجلات، ثم استخدام Cloudflare API لإضافة عناوين IP الضارة إلى Cloudflare على دفعات في جدار الحماية.
بالطبع، عندما يواجه موقع الويب هجمات CC وDDoS قوية جدًا، يمكننا تمكين درع Cloudflare الكلاسيكي لمدة 5 ثوانٍ لمنع الهجمات. إذا لم نتمكن من فهم تكرار الهجمات، فيمكننا إعداد مهمة مجدولة عندما يتجاوز تحميل النظام قيمة معينة (بشكل عام، سيؤدي الهجوم إلى انفجار تحميل النظام)، اتصل بـ Cloudflare API لتمكين الدرع لمدة 5 ثوانٍ.
لمزيد من المعلومات حول أمان موقع الويب وتحسينه، إليك ما يلي:
- خمس نصائح أمنية لاستخدام لوحة تحكم VPS مجانية - لا تدع المتسللين يستغلون ذلك
- تجربة تحسين Linux php-fpm-تستهلك عملية php-fpm ذاكرة كبيرة ولا تسبب مشاكل في الذاكرة
- قم بتمكين HSTS والانضمام إلى قائمة التحميل المسبق لـ HSTS لجعل وصول HTTPS إلى موقع الويب أكثر أمانًا - مع طرق حذف HSTS
ملاحظة: تم التحديث في 25 مارس 2019، فيما يتعلق بمشكلات أمان VPS، قد يتجاهل العديد من الأصدقاء تكوين SSH لـ VPS نفسه، فيما يلي إستراتيجيات التعزيز: حماية أمان مضيف VPS والخادم: منفذ تعديل SSH ، أضف القائمة البيضاء، تسجيل الدخول بالمفتاح فقط.
ملاحظة: تم التحديث في 4 يناير 2020، Cloudflare Railgun هو حل التسريع النهائي الذي توفره Cloudflare خصيصًا لعملاء الأعمال والمؤسسات. ومع ذلك، يمكن تشغيله مجانًا من خلال شريك Cloudflare: قم بتشغيل تسريع Cloudflare Railgun مجانًا - قلل تأخيرات الاتصال وحقق تخزينًا مؤقتًا وتسريعًا ديناميكيًا للصفحة.
1. يقوم Cloudflare تلقائيًا بحظر عناوين IP الضارة
1.1 ابحث عن عنوان IP الضار
استخدم برنامجًا نصيًا لتحليل تكرار الوصول إلى عنوان IP واحد في دقيقة واحدة. إذا تجاوز التردد ترددًا معينًا (بشكل عام، يجب ألا يتجاوز الوصول العادي 60 مرة في دقيقة واحدة، يمكنك ضبطه على قيمة أصغر)، فهو كذلك. يعتبر عنوان IP ضارًا. البرنامج النصي هو كما يلي:
#/bin/bash #日志文件,你需要改成你自己的路径 logfile=/data/wwwlogs/ last_minutes=1 #开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义) start_time= date +"%Y-%m-%d %H:%M:%S" -d '-1 minutes' echo $start_time #结束时间现在 stop_time=`date +"%Y-%m-%d %H:%M:%S"` echo $stop_time cur_date="`date +%Y-%m-%d`" echo $cur_date #过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径 tac $logfile/sky.ucblog.net_nginx.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($2,RSTART+14,21);if(t>=st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr > $logfile/log_ip_top10 ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'` ip=`cat $logfile/log_ip_top10 | awk '{if($1>2)print $2}'` # 单位时间[1分钟]内单ip访问次数超过2次的ip记录入black.txt,这里wzfou.com为了测试设置了2,你需要改成其它的数字 for line in $ip do echo $line >> $logfile/black.txt echo $line # 这里还可以执行CF的API来提交数据到CF防火墙 done
1.2 أضف عناوين IP إلى جدار الحماية على دفعات
استخدم الكود التالي لإضافة عناوين IP ضارة إلى جدار الحماية الخاص بـ Cloudflare على دفعات، وتذكر استبدالها بواجهة برمجة تطبيقات Cloudflare الخاصة بك.
#!/bin/bash # Author: Zhys # Date : 2018 # 填Cloudflare Email邮箱 CFEMAIL="freehao123@gmail.com" # 填Cloudflare API key CFAPIKEY="xxxxxxxxxxxxxxxx" # 填Cloudflare Zones ID 域名对应的ID ZONESID="xxxxxxxxxxxxxxxxxxxx" # /data/wwwlogs/black.txt存放恶意攻击的IP列表 # IP一行一个。 IPADDR=$(</data/wwwlogs/black.txt) # 循环提交 IPs 到 Cloudflare 防火墙黑名单 # 模式(mode)有 block, challenge, whitelist, js_challenge for IPADDR in ${IPADDR[@]}; do echo $IPADDR curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONESID/firewall/access_rules/rules" -H "X-Auth-Email: $CFEMAIL" -H "X-Auth-Key: $CFAPIKEY" -H "Content-Type: application/json" --data '{"mode":"block","configuration":{"target":"ip","value":"'$IPADDR'"},"notes":"CC Attatch"}' done # 删除 IPs 文件收拾干净 rm -rf /data/wwwlogs/black.txt
1.3 يمكنك العثور تلقائيًا على عناوين IP الضارة وإضافتها إلى جدار الحماية
ما عليك سوى دمج النصين أعلاه في برنامج نصي واحد.
#/bin/bash #日志文件,你需要改成你自己的路径 logfile=/data/wwwlogs/ last_minutes=1 #开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义) start_time= date +"%Y-%m-%d %H:%M:%S" -d '-1 minutes' echo $start_time #结束时间现在 stop_time=`date +"%Y-%m-%d %H:%M:%S"` echo $stop_time cur_date="`date +%Y-%m-%d`" echo $cur_date #过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径 tac $logfile/sky.ucblog.net_nginx.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($2,RSTART+14,21);if(t>=st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr > $logfile/log_ip_top10 ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'` ip=`cat $logfile/log_ip_top10 | awk '{if($1>2)print $2}'` # 单位时间[1分钟]内单ip访问次数超过2次的ip记录入black.log,这里为了测试设置2,你需要改成其它的数字 for line in $ip do echo $line >> $logfile/black.txt echo $line # 这里还可以执行CF的API来提交数据到CF防火墙 done # 填Cloudflare Email邮箱 CFEMAIL="freehao123@gmail.com" # 填Cloudflare API key CFAPIKEY="xxxxxxxxxxxxxxxxxxxxxxxx" # 填Cloudflare Zones ID 域名对应的ID ZONESID="xxxxxxxxxxxxxxxxxxxxxxxxxxx" # /data/wwwlogs/black.txt存放恶意攻击的IP列表 # IP一行一个。 IPADDR=$(</data/wwwlogs/black.txt) # 循环提交 IPs 到 Cloudflare 防火墙黑名单 # 模式(mode)有 block, challenge, whitelist, js_challenge for IPADDR in ${IPADDR[@]}; do echo $IPADDR curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONESID/firewall/access_rules/rules" -H "X-Auth-Email: $CFEMAIL" -H "X-Auth-Key: $CFAPIKEY" -H "Content-Type: application/json" --data '{"mode":"block","configuration":{"target":"ip","value":"'$IPADDR'"},"notes":"CC Attatch"}' done # 删除 IPs 文件收拾干净 rm -rf /data/wwwlogs/black.txt
لقد قمت بوضع البرنامج النصي أعلاه في مركز التنزيل الخاص بي ويمكنني توفيره للجميع لتنزيله واستخدامه.
wget https://do.wzfou.net/shell/attack-ip.sh chmod +x /qicmd/cfblockip.sh ./cfblockip.sh wget https://do.wzfou.net/shell/attack-ip.sh chmod +x /qicmd/attack-ip.sh ./attack-ip.sh wget https://do.wzfou.net/shell/cf-block-attack-ip.sh chmod +x /qicmd/cf-block-attack-ip.sh ./cf-block-attack-ip.sh
أخيرًا، قم بتعيين مهمة مجدولة ودع البرنامج النصي يكتشفها كل دقيقة (يرجى تعديلها حسب الحاجة. لاستخدام المهام المجدولة، راجع: بناء الجملة الأساسي للمهمة المجدولة لأمر Linux Crontab)
* * * * * /bin/bash /root/cf-block-attack-ip.sh > /tmp/ou1t.log 2>&1
تأثير إضافة عناوين IP الضارة تلقائيًا إلى جدار الحماية CloudFlare هو كما يلي:
2. يقوم Cloudflare تلقائيًا بتبديل نص الدرع لمدة 5 ثوانٍ
موقع إلكتروني:
- HTTPS://GitHub.com/MAPUMP/cloud Flare-block
عندما يتعرض الخادم الخاص بك للهجوم، سينفجر تحميل النظام. استخدم برنامجًا نصيًا لاكتشاف حمل النظام تلقائيًا عندما يتجاوز الضغط قيمة معينة، يمكنك التبديل إلى وضع "أنا تحت الهجوم!". والخطوات هي كما يلي:
#下载 cd /root && git clone https://github.com/Machou/Cloudflare-Block.git DDoS #打开Cloudflare.sh,修改配置 API_KEY You're Global API Key (https://dash.cloudflare.com/profile) MAIL_ACCOUNT Email of your Cloudflare account DOMAIN Zone ID (https://dash.cloudflare.com/_zone-id_/domain.com) #设置定时任务 crontab -e */1 * * * * /root/DDoS/Cloudflare.sh 0 # check every 1 minute if protection is not enabled */20 * * * * /root/DDoS/Cloudflare.sh 1 # check every 20 minutes if protection is enabled
افتراضيًا، يكتشف البرنامج النصي تحميل النظام عند 10 ويقوم بتنشيط وضع "أنا تحت الهجوم!"، ويمكنك ضبط هذا حسب الحاجة. كما هو مبين أدناه:
رمز البرنامج النصي الكامل هو كما يلي:
#!/bin/bash # $1 = 1min, $2 = 5min, $3 = 15min loadavg=$(cat /proc/loadavg|awk '{printf "%f", $1}') # load is 10, you can modify this if you want load more than 10 maxload=10 # Configuration API Cloudflare # You're Global API Key (https://dash.cloudflare.com/profile) api_key= # Email of your account Cloudflare email= # Zone ID (https://dash.cloudflare.com/_zone-id_/domain.com) zone_id= # create file attacking if doesn't exist if [ ! -e $attacking ]; then echo 0 > $attacking fi attacking=./attacking hasattack=$(cat $attacking) if [ $(echo "$loadavg > $maxload"|bc) -eq 1 ]; then if [[ $hasattack = 0 && $1 = 0 ]]; then # Active protection echo 1 > $attacking curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$zone_id/settings/security_level" -H "X-Auth-Email: $email" -H "X-Auth-Key: $api_key" -H "Content-Type: application/json" --data '{"value":"under_attack"}' fi else if [[ $hasattack = 1 && $1 = 1 ]]; then # Disable Protection echo 0 > $attacking curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$zone_id/settings/security_level" -H "X-Auth-Email: $email" -H "X-Auth-Key: $api_key" -H "Content-Type: application/json" --data '{"value":"high"}' fi fi exit 0
3. ملخص
Cloudflare هي أداة سهلة الاستخدام للغاية للدفاع ضد هجمات DDos وCC. يمكن للإصدار المجاني من Cloudflare مع واجهة برمجة التطبيقات (API) تحقيق وظائف أكثر مرونة وكافية للدفاع العادي.
تواجه حماية Cloudflare أيضًا مشكلات معينة، أي أنه بعد تمكين Cloudflare، فإن عنوان IP الخاص بالمستخدم الذي تم الحصول عليه هو عنوان IP لعقدة Cloudflare CDN، ونحتاج أيضًا إلى إجراء مزيد من التحسين في تكوين الخادم.