Một người bạn đưa trang web của công ty mình lên cloud hosting và lưu lượng truy cập không lớn. Tuy nhiên, do nó được sử dụng và thường xuyên bị CC tấn công nên biểu hiện chính là IO và CPU tăng mạnh. trang web trở nên không thể truy cập được. Cloudflare ban đầu được kích hoạt nhưng kẻ tấn công quét điên cuồng và hiệu quả phòng thủ chỉ ở mức trung bình.

Để xác định chính xác các IP độc hại, bạn cần kích hoạt mô-đun Real IP trong Nginx và Apache sau khi kích hoạt Cloudflare CDN, sau đó sử dụng tập lệnh để phân tích nhật ký trang web, thu thập IP bất thường từ nhật ký và sau đó sử dụng API Cloudflare để thêm IP độc hại tới Cloudflare theo đợt trong tường lửa.

Tất nhiên, khi trang web gặp phải các cuộc tấn công CC và DDoS rất mạnh, chúng ta có thể kích hoạt lá chắn 5 giây cổ điển của Cloudflare để ngăn chặn các cuộc tấn công. Nếu không nắm bắt được tần suất các cuộc tấn công, chúng ta có thể thiết lập tác vụ theo lịch trình khi tải hệ thống vượt quá một mức. giá trị nhất định (nói chung Cuộc tấn công sẽ khiến tải hệ thống phát nổ), hãy gọi API Cloudflare để kích hoạt lá chắn 5 giây.

Cloudflare tự động chặn IP độc hại vào tường lửa và tự động chuyển sang tập lệnh khiên 5 giây để ngăn chặn các cuộc tấn công CC

Để biết thêm về bảo mật và tối ưu hóa trang web, đây là:

  1. Năm mẹo bảo mật khi sử dụng bảng điều khiển VPS miễn phí – đừng để tin tặc lợi dụng
  2. Quá trình trải nghiệm tối ưu hóa php-fpm của Linux-php-fpm chiếm bộ nhớ lớn và không giải phóng các vấn đề về bộ nhớ
  3. Kích hoạt HSTS và tham gia Danh sách tải trước HSTS để giúp truy cập HTTPS vào website an toàn hơn - với phương pháp xóa HSTS

PS: Cập nhật ngày 25/03/2019, Về vấn đề bảo mật của VPS, nhiều bạn có thể bỏ qua cấu hình SSH của chính VPS Dưới đây là các chiến lược tăng cường: Bảo vệ an ninh máy chủ và máy chủ VPS: Cổng sửa đổi SSH. , thêm Danh sách trắng, chỉ đăng nhập bằng khóa.

PS: Được cập nhật vào ngày 4 tháng 1 năm 2020, Cloudflare Railgun là giải pháp tăng tốc tối ưu do Cloudflare cung cấp dành riêng cho khách hàng Doanh nghiệp và Doanh nghiệp. Tuy nhiên, nó có thể được bật miễn phí thông qua Cloudflare Partner: Bật tính năng tăng tốc Cloudflare Railgun miễn phí - giảm độ trễ kết nối và đạt được khả năng tăng tốc và bộ nhớ đệm trang động.

1. Cloudflare tự động chặn IP độc hại

1.1  Tìm IP độc hại

Sử dụng tập lệnh để phân tích tần suất truy cập vào một IP trong một phút. Nếu tần số vượt quá một tần số nhất định (thông thường, truy cập bình thường không được vượt quá 60 lần trong một phút, bạn có thể đặt tần số đó thành giá trị nhỏ hơn). được coi là một IP độc hại. Kịch bản như sau:

#/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  Thêm IP vào tường lửa theo đợt

Sử dụng mã sau đây để thêm hàng loạt IP độc hại vào tường lửa của Cloudflare. Hãy nhớ thay thế mã này bằng API Cloudflare của bạn.

#!/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  Tự động tìm IP độc hại và thêm chúng vào tường lửa

Chỉ cần hợp nhất hai tập lệnh trên thành một tập lệnh.

#/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

Tôi đã đặt đoạn script trên vào trung tâm tải xuống của mình và có thể cung cấp cho mọi người tải xuống và sử dụng.

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

Cuối cùng, thiết lập tác vụ theo lịch trình và để tập lệnh phát hiện nó mỗi phút (vui lòng điều chỉnh theo nhu cầu của bạn. Để sử dụng tác vụ theo lịch trình, vui lòng tham khảo: Cú pháp cơ bản về tác vụ theo lịch trình của lệnh Linux Crontab)

* * * * * /bin/bash /root/cf-block-attack-ip.sh > /tmp/ou1t.log 2>&1

Tác dụng của việc tự động thêm IP độc hại vào tường lửa CloudFlare như sau:

2. Cloudflare tự động chuyển tập lệnh khiên 5 giây

trang mạng:

  1. HTTPS://GitHub.com/MAPUMP/cloud bùng phát

Khi máy chủ của bạn bị tấn công, tải hệ thống sẽ phát nổ. Sử dụng tập lệnh để tự động phát hiện tải hệ thống. Khi áp suất vượt quá một giá trị nhất định, bạn có thể chuyển sang chế độ "Tôi đang bị tấn công!" Các bước thực hiện như sau:

#下载
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

Theo mặc định, tập lệnh phát hiện tải hệ thống ở mức 10 và kích hoạt chế độ “Tôi đang bị tấn công!” Như được hiển thị bên dưới:

Mã script hoàn chỉnh như sau:

#!/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. Tóm tắt

Cloudflare là một công cụ rất dễ sử dụng để bảo vệ khỏi các cuộc tấn công DDos và CC. Phiên bản miễn phí của Cloudflare kết hợp với API có thể đạt được các chức năng linh hoạt hơn và đủ để phòng thủ thông thường.

Việc bảo vệ Cloudflare cũng có một số vấn đề nhất định, đó là sau khi kích hoạt Cloudflare, IP người dùng thu được chính là IP của node Cloudflare CDN. Chúng ta cũng cần thực hiện tối ưu hóa thêm trong cấu hình máy chủ.

Để lại một câu trả lời