Um amigo colocou seu site corporativo em seu host na nuvem e o tráfego não era grande. No entanto, como era usado e frequentemente atacado por CC, a principal manifestação foi que o IO e a CPU aumentaram drasticamente. o site ficou inacessível. O Cloudflare foi ativado inicialmente, mas o invasor escaneou freneticamente e o efeito de defesa foi médio.

Para identificar IPs maliciosos com precisão, você precisa habilitar o módulo Real IP no Nginx e Apache após habilitar o Cloudflare CDN, usar scripts para analisar logs de sites, coletar IPs anormais dos logs e, em seguida, usar a API Cloudflare para adicionar IPs maliciosos para Cloudflare em lotes no firewall.

Claro, quando o site encontra ataques CC e DDoS muito poderosos, podemos ativar o escudo clássico de 5 segundos do Cloudflare para evitar ataques. Se não conseguirmos compreender a frequência dos ataques, podemos configurar uma tarefa agendada quando a carga do sistema exceder um limite. determinado valor (geralmente O ataque fará com que a carga do sistema exploda), chame a API Cloudflare para ativar o escudo de 5 segundos.

A Cloudflare bloqueia automaticamente IPs maliciosos no firewall e alterna automaticamente para um script de proteção de 5 segundos para evitar ataques CC

Para obter mais informações sobre segurança e otimização de sites, aqui estão:

  1. Cinco dicas de segurança para usar um painel de controle VPS gratuito – não deixe que hackers aproveitem
  2. O processo de experiência de otimização php-fpm do Linux ocupa muita memória e não libera problemas de memória
  3. Habilite o HSTS e junte-se à lista de pré-carregamento do HSTS para tornar o acesso HTTPS ao site mais seguro - com métodos para excluir o HSTS

PS: Atualizado em 25 de março de 2019, Em relação às questões de segurança do VPS, muitos amigos podem ignorar a configuração SSH do próprio VPS. Aqui estão as estratégias de fortalecimento: Host VPS e proteção de segurança do servidor: porta de modificação SSH. , adicione Lista de permissões, somente login com chave.

PS: Atualizado em 4 de janeiro de 2020, Cloudflare Railgun é a solução de aceleração definitiva fornecida pela Cloudflare especificamente para clientes Business e Enterprise. No entanto, ele pode ser ativado gratuitamente por meio do Cloudflare Partner: Ative a aceleração Cloudflare Railgun gratuitamente - reduza atrasos de conexão e obtenha cache e aceleração de páginas dinâmicas.

1. Cloudflare bloqueia automaticamente IPs maliciosos

1.1  Encontre o IP malicioso

Use um script para analisar a frequência de acesso a um único IP em um minuto. Se a frequência exceder uma determinada frequência (geralmente, o acesso normal não deve exceder 60 vezes em um minuto, você pode configurá-lo para um valor menor), é. considerado um IP malicioso. O roteiro é o seguinte:

#/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  Adicionar IPs ao firewall em lotes

Use o código a seguir para adicionar IPs maliciosos ao firewall da Cloudflare em lotes. Lembre-se de substituí-lo pela API da Cloudflare.

#!/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  Encontre IPs maliciosos automaticamente e adicione-os ao firewall

Basta mesclar os dois scripts acima em um script.

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

Coloquei o script acima em meu centro de download e posso fornecê-lo para que todos possam baixar e usar. O código é o seguinte:

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

Por fim, defina uma tarefa agendada e deixe o script detectá-la a cada minuto (ajuste-a conforme necessário. Para usar tarefas agendadas, consulte: Sintaxe básica da tarefa agendada do comando Linux Crontab)

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

O efeito da adição automática de IPs maliciosos ao firewall CloudFlare é o seguinte:

2. Cloudflare alterna automaticamente script de escudo de 5 segundos

local na rede Internet:

  1. HTTPS://GitHub.com/MAPUMP/cloud flare-block

Quando o seu servidor estiver sob ataque, a carga do sistema explodirá. Use um script para detectar automaticamente a carga do sistema. Quando a pressão exceder um determinado valor, você pode mudar para o modo “Estou sob ataque!” As etapas são as seguintes:

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

Por padrão, o script detecta a carga do sistema em 10 e ativa o modo “Estou sob ataque!” Como mostrado abaixo:

O código do script completo é o seguinte:

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

Cloudflare é uma ferramenta muito fácil de usar para defesa contra ataques DDos e CC. A versão gratuita do Cloudflare combinada com a API pode alcançar funções mais flexíveis e é suficiente para defesa comum.

A proteção Cloudflare também apresenta alguns problemas, ou seja, após habilitar o Cloudflare, o IP do usuário obtido é o IP do nó Cloudflare CDN. Também precisamos fazer mais otimizações na configuração do servidor.

Deixe uma resposta