当前位置:首页 > 技术文章 > 正文内容

Cloudflare自动检测恶意IP拉黑到防火墙和自动切换5秒盾防CC

arlanguage3个月前 (01-31)技术文章35

Cloudflare很多朋友都在使用,如果你的网站服务器架设在国外,那Cloudflare是一个非常好的加速工具,一可以为你的网站进行加速,二可以给你的网站提供防护

网站遭遇非常强大的CC和DDoS攻击时,启用Cloudflare经典的5秒盾防攻击,设置一个定时任务,当系统负载超过某一个值,调用Cloudflare API启用5秒盾。

一、Cloudflare自动拉黑恶意IP

利用脚本分析在一分钟单个IP访问的频率,超过一定的频率(一般来正常的访问,一分钟内应该不超过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

批量添加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

自动找出恶意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.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防火墙的效果如下:

Cloudflare自动切换5秒盾脚本

网站:

https://github.com/Machou/Cloudflare-Block

当你的服务器受到攻击时,系统负载就会爆增,利用脚本自动检测系统负载,当压力超过一定的值时就可以切换为” I’m Under Attack! “模式了。操作步骤如下:

#下载

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,启动” I’m Under Attack! “模式,你以根据需要来调整。

完整的脚本代码如下:

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

总结

Cloudflare是一个非常好用的防御DDos和CC攻击的工具,免费版本的Cloudflare结合API可以实现更加灵活的功能,对于普通的防御足够自己使用了。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1406.html

分享给朋友:

“Cloudflare自动检测恶意IP拉黑到防火墙和自动切换5秒盾防CC” 的相关文章

基于Docker一键LNMP(Nginx+MySQL+PHP7/5+Redis)安装程序

一键部署LNMP环境的目的,该环境特点:完全开源支持多版本PHP切换(PHP5.4、PHP5.6、PHP7.2...)支持绑定任意多个域名支持HTTPS和HTTP/2PHP源代码位于host中MySQL data位于host中所有配置文件可在host中直接修改所有日志文件可在host中直接查看内置完...

Nginx安装、启动、停止、重载、查看

Nginx介绍Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在开源BSD-like 协议下发行。特点是占有内存少,并发能力强。1、安装 Nginx程序yum install nginx -y 或 dnf install nginx -y2、n...

Linux日志处理神器-Logrotate

Logrotate简介Logrotate是Linux中日志分割、压缩、清理的工具,一般CentOS默认都会安装该工具。logrotate运行原理logrotate依赖于anacron执行每小时、每天、每周或每月的定时任务,corn每个小时会扫描当前机器中定时任务执行状态。 logrotate运行依...

01《Nginx 入门教程》Nginx 是什么?

关于 Nginx,百度百科的介绍如下:**Nginx (engine x)是一个开源、高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务”。**首先,对 Web 服务器做一个简要说明:Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序...

nginx入门——nginx访问日志(六)

日志功能在ngx_http_log_module模块中定义,实现了以指定格式写入请求日志。我们先来看一个nginx配置文件:http { include mime.types; default_type application/octet-stream;...

nginx四层转发:nginx配置ftp反向代理

#nginx转发控制线路server {#nginx代理端口 listen 21212; proxy_timeout 120s; proxy_connect_timeout 120s; proxy_pass fx_ftp; } upstream fx_ftp{ hash $remote_addr c...