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.

Cloudflare blockiert automatisch bösartige IPs an der Firewall und schaltet automatisch auf ein 5-Sekunden-Schutzskript um, um CC-Angriffe zu verhindern

Weitere Informationen zur Website-Sicherheit und -Optimierung finden Sie hier:

  1. Fünf Sicherheitstipps für die Verwendung eines kostenlosen VPS-Kontrollfelds – lassen Sie sich nicht von Hackern ausnutzen
  2. Der Linux-PHP-FPM-Optimierungsprozess benötigt viel Speicher und verursacht keine Speicherprobleme
  3. 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:

  1. 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.

Hinterlasse eine Antwort