Ein Freund stellte seine Unternehmenswebsite auf seinen Cloud-Host, und der Datenverkehr war nicht groß. Da er jedoch häufig von CC angegriffen wurde, war das Hauptmerkmal, dass die E/A und die CPU stark anstiegen Die Website wurde nicht mehr zugänglich. Cloudflare war zunächst aktiviert, aber der Angreifer scannte hektisch und die Verteidigungswirkung war durchschnittlich.
Um bösartige IPs genau zu identifizieren, müssen Sie nach der Aktivierung von Cloudflare CDN das Real IP-Modul in Nginx und Apache aktivieren, dann Skripte verwenden, um Website-Protokolle zu analysieren, abnormale IPs aus den Protokollen zu sammeln und dann die Cloudflare-API zu verwenden, um bösartige IPs hinzuzufügen stapelweise in der Firewall an Cloudflare übertragen.
Wenn die Website auf sehr starke CC- und DDoS-Angriffe stößt, können wir den klassischen 5-Sekunden-Schutz von Cloudflare aktivieren, um Angriffe zu verhindern. Wenn wir die Häufigkeit von Angriffen nicht erfassen können, können wir eine geplante Aufgabe einrichten Bestimmter Wert (im Allgemeinen Der Angriff führt zu einer Explosion der Systemlast). Rufen Sie die Cloudflare-API auf, um den 5-Sekunden-Schutz zu aktivieren.
Weitere Informationen zur Website-Sicherheit und -Optimierung finden Sie hier:
- Fünf Sicherheitstipps für die Verwendung eines kostenlosen VPS-Kontrollfelds – lassen Sie sich nicht von Hackern ausnutzen
- Der Linux-PHP-FPM-Optimierungsprozess benötigt viel Speicher und verursacht keine Speicherprobleme
- Aktivieren Sie HSTS und treten Sie der HSTS-Preload-Liste bei, um den HTTPS-Zugriff auf die Website sicherer zu machen – mit Methoden zum Löschen von HSTS
PS: Aktualisiert am 25. März 2019, In Bezug auf die Sicherheitsprobleme von VPS ignorieren viele Freunde möglicherweise die SSH-Konfiguration des VPS selbst. Hier sind die stärkenden Strategien: VPS-Host- und Server-Sicherheitsschutz: SSH-Modifikationsport , Whitelist hinzufügen, nur Schlüsselanmeldung.
PS: Aktualisiert am 4. Januar 2020, Cloudflare Railgun ist die ultimative Beschleunigungslösung von Cloudflare speziell für Geschäfts- und Unternehmenskunden. Es kann jedoch kostenlos über den Cloudflare-Partner aktiviert werden: Aktivieren Sie die Cloudflare Railgun-Beschleunigung kostenlos – reduzieren Sie Verbindungsverzögerungen und erreichen Sie dynamisches Seiten-Caching und Beschleunigung.
1. Cloudflare blockiert automatisch schädliche IPs
1.1 Finden Sie die schädliche IP
Verwenden Sie ein Skript, um die Häufigkeit des Zugriffs auf eine einzelne IP in einer Minute zu analysieren (im Allgemeinen sollte der normale Zugriff 60 Mal in einer Minute nicht überschreiten, Sie können ihn auf einen kleineren Wert einstellen). gilt als bösartige IP. Das Skript lautet wie folgt:
#/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 IPs stapelweise zur Firewall hinzufügen
Verwenden Sie den folgenden Code, um stapelweise schädliche IPs zur Cloudflare-Firewall hinzuzufügen. Denken Sie daran, ihn durch Ihre Cloudflare-API zu ersetzen.
#!/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 Schädliche IPs automatisch finden und zur Firewall hinzufügen
Führen Sie einfach die beiden oben genannten Skripte zu einem Skript zusammen.
#/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
Ich habe das obige Skript in mein Download-Center gestellt und kann es jedem zum Herunterladen und Verwenden zur Verfügung stellen. Der Code lautet wie folgt:
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
Legen Sie abschließend eine geplante Aufgabe fest und lassen Sie sie vom Skript jede Minute erkennen (bitte passen Sie sie nach Bedarf an. Informationen zur Verwendung geplanter Aufgaben finden Sie unter: Grundlegende Syntax des Linux-Crontab-Befehls für geplante Aufgaben.)
* * * * * /bin/bash /root/cf-block-attack-ip.sh > /tmp/ou1t.log 2>&1
Die Auswirkung des automatischen Hinzufügens bösartiger IPs zur CloudFlare-Firewall ist wie folgt:
2. Cloudflare schaltet das 5-Sekunden-Schutzskript automatisch um
Webseite:
- HTTPS://GitHub.com/MAPUMP/cloud Flare-block
Wenn Ihr Server angegriffen wird, wird die Systemlast explodieren. Verwenden Sie ein Skript, um die Systemlast automatisch zu erkennen. Wenn der Druck einen bestimmten Wert überschreitet, können Sie in den „Ich werde angegriffen“-Modus wechseln. Die Schritte sind wie folgt:
#下载 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
Standardmäßig erkennt das Skript die Systemlast bei 10 und aktiviert den „I’m Under Attack!“-Modus. Sie können dies nach Bedarf anpassen. Wie nachfolgend dargestellt:
Der vollständige Skriptcode lautet wie folgt:
#!/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. Zusammenfassung
Cloudflare ist ein sehr einfach zu verwendendes Tool zur Abwehr von DDos- und CC-Angriffen. Die kostenlose Version von Cloudflare kann in Kombination mit der API flexiblere Funktionen erreichen und ist für die normale Verteidigung ausreichend.
Der Cloudflare-Schutz weist auch bestimmte Probleme auf, d. h. nach der Aktivierung von Cloudflare ist die IP des Benutzers die IP des Cloudflare-CDN-Knotens. Wir müssen auch die Serverkonfiguration weiter optimieren.