banner
moeyy

moeyy

一条有远大理想的咸鱼。
github
mastodon
email

cloudflareは自動的にCAPTCHAを有効にします。

【原著記事】いくつかの友人のフィードバックによると、現在、多くの攻撃プラットフォームやソフトウェアが、CloudFlare の 5 秒間のシールドを簡単に突破できるようになっていると言われています。そのため、以前に使用していた CloudFlare の 5 秒間のシールドスクリプトはあまり役に立たなくなりました。この問題について、夜遅くに少し時間をかけて、笨牛が公開したスクリプトを修正し、キャプチャを開始するように変更しました。ただし、API は公式のものに変更され、設定が少し複雑になりました。以下にスクリプトを示します:

image

元の著者の口頭での同意を得ました

#github https://github.com/CangShui/clouflarea-auto-firewall
email="[email protected]"
globalapi="7777777777777777777777777"
rulesid1="666666666666666666666666666"
rulesid2="8888888888888888888888888"
zoneid="333333333333333333333333333"
mode="cpu"  #サーバーの負荷判定方法 load負荷法  cpu  CPUパーセンテージ法  どちらか一つを選択できます
keeptime=240   #シールドの負荷が下がった後、シールドを解除するまでの秒数

if [ "$mode" = "cpu" ];
then
check=85   #5秒間のCPU連続使用率が85を超える場合、シールドを開始します【サーバーの負荷状況に合わせて調整してください】
#システムのアイドル時間
TIME_INTERVAL=5
time=$(date "+%Y-%m-%d %H:%M:%S")
LAST_CPU_INFO=$(cat /proc/stat  grep -w cpu  awk '{print $2,$3,$4,$5,$6,$7,$8}')
LAST_SYS_IDLE=$(echo $LAST_CPU_INFO  awk '{print $4}')
LAST_TOTAL_CPU_T=$(echo $LAST_CPU_INFO  awk '{print $1+$2+$3+$4+$5+$6+$7}')
sleep ${TIME_INTERVAL}
NEXT_CPU_INFO=$(cat /proc/stat  grep -w cpu  awk '{print $2,$3,$4,$5,$6,$7,$8}')
NEXT_SYS_IDLE=$(echo $NEXT_CPU_INFO  awk '{print $4}')
NEXT_TOTAL_CPU_T=$(echo $NEXT_CPU_INFO  awk '{print $1+$2+$3+$4+$5+$6+$7}')

#システムのアイドル時間
SYSTEM_IDLE=`echo ${NEXT_SYS_IDLE} ${LAST_SYS_IDLE}  awk '{print $1-$2}'`
#CPUの合計時間
TOTAL_TIME=`echo ${NEXT_TOTAL_CPU_T} ${LAST_TOTAL_CPU_T}  awk '{print $1-$2}'`
load=`echo ${SYSTEM_IDLE} ${TOTAL_TIME}  awk '{printf "%.2f", 100-$1/$2*100}'`
else
load=$(cat /proc/loadavg  colrm 5)
check=$(cat /proc/cpuinfo  grep "processor"  wc -l)

fi

if [ ! -f "/home/status.txt" ];then
echo "" > /home/status.txt
else
status=$(cat /home/status.txt)
echo $status
fi
now=$(date +%s)
time=$(date +%s -r /home/status.txt)



echo "現在の$modeの負荷:$load"
if [[ $status -eq 1 ]]
then
echo "現在シールド中"
else
echo "現在シールド解除中"
fi

newtime=`expr $now - $time`
closetime=`expr $keeptime - $newtime`

if [[ $load <$check ]]&&[[ $status -eq 1 ]]&&[[ $newtime -gt $keeptime ]]   
then
echo -e "\n$modeの負荷が$check未満で、現在シールドが半時間以上開始されています($newtime秒)。シールドを解除します"
cResult=$(
curl -X PUT \
     -H "X-Auth-Email: $email" \
     -H "X-Auth-Key: $globalapi" \
     -H "Content-Type: application/json" \
     -d '{
  "id": "$rulesid1",
      "paused": true,
      "description": "全部都验证码",
      "action": "challenge",
      "priority": 1000,
  "filter": {
        "id": "'$rulesid2'"
      }
     }' "https://api.cloudflare.com/client/v4/zones/$zoneid/firewall/rules/$rulesid1"
)
echo $cResult
size=${#cResult}
if [[ $size -gt 10 ]]
then
  echo 0 > /home/status.txt
  echo -e "\nシールド解除成功"
fi  
  
elif [[ $load <$check ]]
then
echo -e "\n$modeの負荷が$check未満で、何も変更しません、$newtime秒"
if [[ $status -eq 1 ]]
then
  echo -e "${closetime}秒後にシールドを解除します"
fi                        
exit
                      
elif [[ $load >$check ]] && [[ $status -eq 1 ]] && [[ $newtime -gt $keeptime ]]  
then
echo -e "\n$modeの負荷が$checkを超え、現在シールドが$newtime秒以上開始されています。シールドは無効です。管理者に連絡して他の対策を依頼してください"
exit
  
elif [[ $load >$check ]] && [[ $status -eq 1 ]]
then
echo -e "\n$modeの負荷が$checkを超え、現在シールドが開始されています($newtime秒)。引き続き観察してください"
exit  
                      
elif [[ $load >$check ]]
then
echo -e "\n$modeの負荷が$checkを超え、防御ルールを開始します"  
cResult=$(
  curl -X PUT \
     -H "X-Auth-Email: $email" \
     -H "X-Auth-Key: $globalapi" \
     -H "Content-Type: application/json" \
     -d '{
  "id": "$rulesid1",
      "paused": false,
      "description": "全部都验证码",
      "action": "challenge",
      "priority": 1000,
  "filter": {
        "id": "'$rulesid2'"
      }
         }' "https://api.cloudflare.com/client/v4/zones/$zoneid/firewall/rules/$rulesid1"
    )
echo $cResult
size=${#cResult}
if [[ $size -gt 10 ]]
then
  echo 1 > /home/status.txt
  echo -e "\nシールド開始成功"
fi    
else
echo 0 > /home/status.txt  
fi

スクリプトを使用する前に、次のような Cloudflare ファイアウォールルールを作成する必要があります:

image

そして、スクリプト内の変数を一つずつ入力していきます:

1. 最初の行の email 変数には、Cloudflare アカウントのログインメールアドレスを入力します。

2.2 番目の行の globalapi 変数には、以下の画像のキーを入力します。このページには、右上のアイコンをクリックして、my profile メニューの api tokens をクリックする必要があります。

image

3.rulesid1 と rulesid2 は、Cloudflare ファイアウォールルールページを開き、以下のように操作します:

image

まず、ブラウザのコンソールを開き、追加したルールをオンまたはオフにし、ネットワークの機能で以下のようなリクエストを見つけます。最初のキーを rulesid1 変数に入力し、2 番目のキーを rulesid2 変数に入力します。

4.zoneid 変数は、ドメインの概要ページを開き、右下に表示されるものです。

image

ここまでで、ほぼ設定が完了しました。デフォルトでは、CPU 使用率が 85 を超えると 5 秒間のキャプチャが開始され、240 秒後に使用率が下がった場合に自動的にキャプチャが解除されます。

設定が完了したら、スクリプトを実行するために定期的なタスクを設定する必要があります。宝塔を使用している場合は、設定する方法を知っているはずです。1 分間隔で設定するだけです。

image

image

効果のイメージ

image

転載元: 沧水のブログ » cloudflare 自動開始キャプチャ

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。