Un amigo puso su sitio web corporativo en su host en la nube y el tráfico no fue grande. Sin embargo, debido a que CC lo usaba y lo atacaba con frecuencia, la manifestación principal fue que el IO y la CPU aumentaron drásticamente. Finalmente, la base de datos se colgó y. el sitio web se volvió inaccesible. Cloudflare se activó al principio, pero el atacante escaneó frenéticamente y el efecto de defensa fue normal.

Para identificar con precisión las IP maliciosas, después de habilitar Cloudflare CDN, debe habilitar el módulo Real IP en Nginx y Apache, luego usar scripts para analizar los registros del sitio web, recopilar IP anormales de los registros y luego usar la API de Cloudflare para agregar IP maliciosas. IP a Cloudflare en lotes en el firewall.

Por supuesto, cuando el sitio web se enfrenta a ataques CC y DDoS muy potentes, podemos habilitar el clásico escudo de 5 segundos de Cloudflare para evitar ataques. Si no podemos comprender la frecuencia de los ataques, podemos configurar una tarea programada cuando la carga del sistema supera un límite. cierto valor (generalmente El ataque hará que la carga del sistema explote), llame a la API de Cloudflare para habilitar el escudo de 5 segundos.

Cloudflare bloquea automáticamente las IP maliciosas en el firewall y cambia automáticamente a un script de protección de 5 segundos para evitar ataques CC.

Para obtener más información sobre la seguridad y optimización de sitios web, aquí está:

  1. Cinco consejos de seguridad para usar un panel de control VPS gratuito: no dejes que los piratas informáticos se aprovechen
  2. Experiencia de optimización de php-fpm de Linux: el proceso php-fpm ocupa mucha memoria y no libera problemas de memoria
  3. Habilite HSTS y únase a la lista de precarga de HSTS para hacer que el acceso HTTPS al sitio web sea más seguro, con un método para eliminar HSTS

PD: Actualizado el 25 de marzo de 2019, Con respecto a los problemas de seguridad del VPS, muchos amigos pueden ignorar la configuración SSH del propio VPS. Estas son las estrategias de fortalecimiento: Protección de seguridad del servidor y del host VPS: puerto de modificación SSH. , agregue Lista blanca, solo inicio de sesión con clave.

PD: actualizado el 4 de enero de 2020, Cloudflare Railgun es la solución de aceleración definitiva proporcionada por Cloudflare específicamente para clientes empresariales y empresariales. Sin embargo, se puede activar de forma gratuita a través de Cloudflare Partner: active la aceleración Railgun de Cloudflare de forma gratuita: reduzca los retrasos en la conexión y logre un almacenamiento en caché y una aceleración de páginas dinámicas.

1. Cloudflare bloquea automáticamente las IP maliciosas

1.1  Encuentra la IP maliciosa

Utilice un script para analizar la frecuencia de acceso a una única IP en un minuto. Si la frecuencia excede una cierta frecuencia (generalmente, el acceso normal no debe exceder 60 veces en un minuto, puede configurarlo en un valor menor), es. considerada una IP maliciosa. El guión es el siguiente:

#/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  Agregar IP al firewall en lotes

Utilice el siguiente código para agregar IP maliciosas al firewall de Cloudflare en lotes. Recuerde reemplazarlo con su API de 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  Encuentra automáticamente IP maliciosas y agrégalas al firewall

Simplemente combine los dos scripts anteriores en uno solo.

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

He puesto el script anterior en mi centro de descargas y puedo proporcionárselo a todos para que lo descarguen y lo utilicen. El código es el siguiente:

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

Finalmente, configure una tarea programada y deje que el script la detecte cada minuto (ajústela según sus necesidades. Para el uso de tareas programadas, consulte: Sintaxis básica de tareas programadas del comando Linux Crontab)

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

El efecto de agregar automáticamente IP maliciosas al firewall de CloudFlare es el siguiente:

2. Cloudflare cambia automáticamente el script de escudo de 5 segundos

sitio web:

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

Cuando su servidor esté bajo ataque, la carga del sistema explotará. Utilice un script para detectar automáticamente la carga del sistema. Cuando la presión exceda un cierto valor, puede cambiar al modo "¡Estoy bajo ataque!". Los pasos son los siguientes:

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

De forma predeterminada, el script detecta la carga del sistema en 10 y activa el modo "¡Estoy bajo ataque!". Puede ajustar esto según sea necesario. Como se muestra abajo:

El código completo del script es el siguiente:

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

Cloudflare es una herramienta muy fácil de usar para defenderse contra ataques DDos y CC. La versión gratuita de Cloudflare combinada con la API puede lograr funciones más flexibles y es suficiente para la defensa ordinaria.

La protección de Cloudflare también tiene ciertos problemas, es decir, después de habilitar Cloudflare, la IP del usuario obtenida es la IP del nodo CDN de Cloudflare. También necesitamos realizar una mayor optimización en la configuración del servidor.

Deja una respuesta