友人は自分の会社の Web サイトをクラウド ホスト上に置きましたが、トラフィックはそれほど大きくありませんでしたが、頻繁に CC によって攻撃されたため、IO と CPU が急激に増加し、最終的にはデータベースがハングアップしました。ウェブサイトにアクセスできなくなりました。最初は Cloudflare が有効になっていましたが、攻撃者は必死にスキャンしており、防御効果は平均的でした。

悪意のある IP を正確に特定するには、Cloudflare CDN を有効にした後、Nginx と Apache で Real IP モジュールを有効にし、スクリプトを使用して Web サイトのログを分析し、ログから異常な IP を収集し、Cloudflare API を使用して悪意のある IP を追加する必要があります。ファイアウォール内のCloudflareにバッチで送信します。

もちろん、Web サイトが非常に強力な CC および DDoS 攻撃に遭遇した場合は、攻撃の頻度を把握できない場合は、Cloudflare の従来の 5 秒シールドを有効にして、システム負荷が一定値を超えたときにスケジュールされたタスクを設定できます。特定の値 (通常、攻撃によりシステム負荷が爆発的に増加します) を指定した場合は、Cloudflare API を呼び出して 5 秒シールドを有効にします。

Cloudflareは、ファイアウォールへの悪意のあるIPを自動的にブロックし、CC攻撃を防ぐために5秒間のシールドスクリプトに自動的に切り替えます。

Web サイトのセキュリティと最適化の詳細については、次を参照してください。

  1. 無料の VPS コントロール パネルを使用するための 5 つのセキュリティに関するヒント – ハッカーに利用させないでください
  2. Linux php-fpm 最適化体験 - php-fpm プロセスは大量のメモリを消費し、メモリの問題を解決しない
  3. HSTS を有効にして HSTS プリロード リストに参加し、Web サイトへの HTTPS アクセスをより安全にします - HSTS を削除する方法を使用します。

追記: 2019 年 3 月 25 日更新、 VPS のセキュリティ問題に関しては、多くの友人が VPS 自体の SSH 設定を無視している可能性があります。強化戦略は次のとおりです。VPS ホストとサーバーのセキュリティ保護: SSH 変更ポート。 、ホワイトリストを追加、キーログインのみ。

追記: 2020 年 1 月 4 日に更新されました。Cloudflare Railgun は、Cloudflare が特にビジネスおよびエンタープライズの顧客向けに提供する究極の高速化ソリューションです。ただし、Cloudflare パートナーを通じて無料で有効にすることができます。Cloudflare Railgun アクセラレーションを無料でオンにします。接続遅延を削減し、動的なページ キャッシュとアクセラレーションを実現します。

1. Cloudflareは悪意のあるIPを自動的にブロックします

1.1  悪意のある IP を見つける

スクリプトを使用して、1 つの IP への 1 分間のアクセス頻度を分析し、その頻度が一定の頻度を超えた場合 (通常、1 分間に 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 API に置き換えてください。

#!/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 を自動的に検出し、ファイアウォールに追加します。

上記の 2 つのスクリプトを 1 つのスクリプトにマージするだけです。

#/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秒間のシールドスクリプトを自動的に切り替えます

Webサイト:

  1. HTTPS://GitHub.com/MAPUMP/クラウドフレアブロック

サーバーが攻撃を受けると、システム負荷が爆発的に増加します。圧力が一定の値を超えると、スクリプトを使用して「攻撃を受けています」モードに切り替えることができます。手順は次のとおりです。

#下载
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 が Cloudflare CDN ノードの IP になるということです。また、サーバー構成をさらに最適化する必要があります。

返信を残す