Un ami a mis son site Web d'entreprise sur son hébergeur cloud, et le trafic n'était pas important. Cependant, comme il était utilisé et souvent attaqué par CC, la principale manifestation était une forte augmentation des E/S et du processeur. Finalement, la base de données a raccroché et. le site Web est devenu inaccessible. Cloudflare a été activé au début, mais l'attaquant a scanné frénétiquement et l'effet de défense était moyen.

Afin d'identifier avec précision les adresses IP malveillantes, après avoir activé Cloudflare CDN, vous devez activer le module Real IP dans Nginx et Apache, puis utiliser des scripts pour analyser les journaux de sites Web, collecter les adresses IP anormales à partir des journaux, puis utiliser l'API Cloudflare pour ajouter des adresses IP malveillantes. IP vers Cloudflare par lots dans le pare-feu.

Bien sûr, lorsque le site Web est confronté à des attaques CC et DDoS très puissantes, nous pouvons activer le bouclier classique de 5 secondes de Cloudflare pour empêcher les attaques. Si nous ne pouvons pas comprendre la fréquence des attaques, nous pouvons configurer une tâche planifiée lorsque la charge du système dépasse une certaine fréquence. certaine valeur (généralement l'attaque fera exploser la charge du système), appelez l'API Cloudflare pour activer le bouclier de 5 secondes.

Cloudflare bloque automatiquement les adresses IP malveillantes sur le pare-feu et passe automatiquement à un script de bouclier de 5 secondes pour empêcher les attaques CC

Pour en savoir plus sur la sécurité et l’optimisation des sites Web, voici :

  1. Cinq conseils de sécurité pour utiliser un panneau de contrôle VPS gratuit – ne laissez pas les pirates en profiter
  2. Le processus d'optimisation Linux php-fpm experience-php-fpm occupe une grande mémoire et ne libère pas de problèmes de mémoire
  3. Activez HSTS et rejoignez la liste de préchargement HSTS pour rendre l'accès HTTPS au site Web plus sécurisé - avec une méthode pour supprimer HSTS

PS : mis à jour le 25 mars 2019 Concernant les problèmes de sécurité du VPS, de nombreux amis peuvent ignorer la configuration SSH du VPS lui-même. Voici les stratégies de renforcement : Protection de la sécurité de l'hôte et du serveur VPS : port de modification SSH. , ajoutez la liste blanche, connexion par clé uniquement.

PS : mis à jour le 4 janvier 2020, Cloudflare Railgun est la solution d'accélération ultime fournie par Cloudflare spécifiquement pour les clients Business et Enterprise. Cependant, il peut être activé gratuitement via le partenaire Cloudflare : Activez gratuitement l'accélération Cloudflare Railgun - réduisez les délais de connexion et obtenez une mise en cache et une accélération dynamiques des pages.

1. Cloudflare bloque automatiquement les IP malveillantes

1.1  Trouver l'adresse IP malveillante

Utilisez un script pour analyser la fréquence d'accès à une seule adresse IP en une minute. Si la fréquence dépasse une certaine fréquence (généralement, l'accès normal ne doit pas dépasser 60 fois en une minute, vous pouvez la définir sur une valeur plus petite), c'est le cas. considéré comme une adresse IP malveillante. Le scénario est le suivant :

#/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  Ajouter des IP au pare-feu par lots

Utilisez le code suivant pour ajouter des adresses IP malveillantes au pare-feu de Cloudflare par lots. N'oubliez pas de le remplacer par votre API 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  Rechercher automatiquement les adresses IP malveillantes et les ajouter au pare-feu

Fusionnez simplement les deux scripts ci-dessus en un seul 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

J'ai mis le script ci-dessus dans mon centre de téléchargement et je peux le fournir à tout le monde pour qu'il puisse le télécharger et l'utiliser. Le code est le suivant :

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

Enfin, configurez une tâche planifiée et laissez le script la détecter toutes les minutes (veuillez ajuster en fonction de vos besoins. Pour l'utilisation des tâches planifiées, veuillez vous référer à : Syntaxe de base de la tâche planifiée de la commande Linux Crontab)

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

L'effet de l'ajout automatique d'adresses IP malveillantes au pare-feu CloudFlare est le suivant :

2. Cloudflare change automatiquement le script de bouclier de 5 secondes

site web:

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

Lorsque votre serveur est attaqué, la charge du système explose. Utilisez un script pour détecter automatiquement la charge du système. Lorsque la pression dépasse une certaine valeur, vous pouvez passer en mode « Je suis attaqué ! » Les étapes sont les suivantes:

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

Par défaut, le script détecte la charge du système à 10 et active le mode « Je suis attaqué ! » Vous pouvez ajuster cela si nécessaire. Comme indiqué ci-dessous:

Le code complet du script est le suivant :

#!/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. Résumé

Cloudflare est un outil très simple à utiliser pour se défendre contre les attaques DDos et CC. La version gratuite de Cloudflare combinée à l'API permet d'obtenir des fonctions plus flexibles et est suffisante pour une défense ordinaire.

La protection Cloudflare présente également certains problèmes, c'est-à-dire qu'après avoir activé Cloudflare, l'adresse IP de l'utilisateur obtenue est l'adresse IP du nœud Cloudflare CDN. Nous devons également procéder à une optimisation supplémentaire dans la configuration du serveur.

Laisser une réponse