华岁呀Huasui

华岁呀Huasui

Cloudflare自動スイッチ5秒盾

介紹#

通常、私のサイトは国内ルート+海外ルートで解析されます。デフォルトのルートは国内 CDN で、海外は Cloudflare ルートに CNAME 解析されます。
Cloudflare に CNAME 解析することで、海外からの攻撃を防ぐことができます(前提として、元のサーバーの IP が公開されていない場合)。ただし、最近、華歳(かとし)が「穿盾(せんじゅん)」というものを知ったようで、Cloudflare の盾を突破して攻撃するらしいです。本当に嫌ですね。

Cloudflare で最も効果的な DDoS 防御モードは「Under Attack モード」です。今日はその「5 秒盾」について説明します。
Under Attack
これを有効にすると、ウェブサイトにアクセスする際に最初に Cloudflare の検出ページにリダイレクトされ、5 秒間の間に本当のユーザーかどうかを検証します。これにより、攻撃による負荷を軽減することができます。
常に有効にしておくとアクセスに影響が出るため、今日は自動オン / オフスクリプトを共有します。

オープンソースの sh スクリプト#

オープンソースの sh スクリプト Cloudflare-Block は、Linux サーバー上でシステムの負荷状況に応じて自動的に Cloudflare の 5 秒盾を有効にすることができます。

API の準備#

Cloudflare に登録 / ログインして、以下を確認してください。
API
1
APIkey
zoneid ゾーン ID
CLOUDFLARE のドメインにアクセスし、右側にスクロールすると表示されます。
zoneid
上記の 2 つの API を保存しておいて、スクリプトで使用します。

スクリプトの使用方法#

以下のコードをコピーして、Cloudflare.sh という名前のファイルで保存し、crontab に定期的に実行するように追加するだけです。(もちろん、宝塔のタスクスケジューラーを使用することもできます)

#!/bin/bash

# $1 = 1min, $2 = 5min, $3 = 15min,ここでどの負荷値を閾値として使用するかを選択します。
loadavg=$(awk '{printf "%f", $1}' < /proc/loadavg)

# Linuxシステムの負荷(load average)が10に達した場合、5秒盾を有効にします。必要に応じてこの値を変更してください。
maxload=10

# CloudflareのAPIを設定します
# CloudFlareのグローバルAPIキー(https://dash.cloudflare.com/profile)
api_key=
# CloudFlareアカウントのメールアドレス
email=
# CloudFlareアカウントの**ゾーンID**(https://dash.cloudflare.com/_zone-id_/domain.com)
zone_id=
# 攻撃がない場合のCloudFlareのデフォルトセキュリティレベル
default_security_level=high
# デバッグメッセージをスクリプトのディレクトリにあるdebug.logファイルに書き込むかどうか
debug=0

basedir=$(dirname "$0")

attacked_file=$basedir/attacked

[ "$debug" -eq 1 ] && exec > "${logfile:-$basedir/debug.log}"


# ファイル「attacked」が存在しない場合は作成します
if [ ! -e "$attacked_file" ]; then
    echo 0 > "$attacked_file"
fi

was_under_attack=$(cat "$attacked_file")
under_attack=$(echo "$loadavg > $maxload" | bc)

if [[ "$1" != [01] ]]; then
    echo "Incorrect usage! Please pass either 0 or 1 as an argument"
    exit 1
fi

if [ $debug -eq 1 ]; then
    echo "Mode: $1; was under attack: $was_under_attack; now under attack: $under_attack"
    echo "Load average: $loadavg"
fi

if [ "$1" -eq 0 ] && [ "$was_under_attack" -eq 0 ] && [ "$under_attack" -eq 1 ]; then
    # 攻撃が始まったばかりで、5秒盾を有効にしたい場合

    # 保護を有効にする
    [ "$debug" -eq 1 ] && echo "Activating under-attack mode!"
    echo 1 > "$attacked_file"
    api_set_mode under_attack

elif [ "$1" -eq 1 ] && [ "$was_under_attack" -eq 1 ] && [ "$under_attack" -eq 0 ]; then
    # 攻撃が終了した(20分経過した)場合、5秒盾を無効にしたい場合

    # 保護を無効にする
    [ "$debug" -eq 1 ] && echo "Leaving under-attack mode!"
    echo 0 > "$attacked_file"
    api_set_mode "$default_security_level"

fi

exit 0

タスクの追加#

#タスクの追加
crontab -e
# 5秒盾の保護が有効でない場合、1分ごとにチェックします
*/1 * * * * /root/DDoS/Cloudflare.sh 0
 # 20分ごとに5秒盾の保護が有効かどうかをチェックします
*/20 * * * * /root/DDoS/Cloudflare.sh 1 
# crontabのリロード
service crond reload

結論#

自動的に 5 秒盾を有効にすると、攻撃を受けたときに自動的に有効になるため、手動で有効にする必要がありません。とても便利です。怠け者には必須ですね!

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