Un amico ha messo il suo sito web aziendale sul suo host cloud e il traffico non era elevato. Tuttavia, poiché veniva utilizzato ed era spesso attaccato da CC, la manifestazione principale era che l'IO e la CPU aumentavano notevolmente il sito web è diventato inaccessibile. Inizialmente era abilitato Cloudflare, ma l'aggressore ha scansionato freneticamente e l'effetto di difesa era nella media.

Per identificare con precisione gli IP dannosi, è necessario abilitare il modulo Real IP in Nginx e Apache dopo aver abilitato Cloudflare CDN, quindi utilizzare gli script per analizzare i registri del sito Web, raccogliere IP anomali dai registri e quindi utilizzare l'API Cloudflare per aggiungere IP dannosi a Cloudflare in batch nel firewall.

Naturalmente, quando il sito Web incontra attacchi CC e DDoS molto potenti, possiamo abilitare il classico scudo di 5 secondi di Cloudflare per prevenire gli attacchi. Se non riusciamo a comprendere la frequenza degli attacchi, possiamo impostare un'attività pianificata Quando il carico del sistema supera a determinato valore (generalmente l'attacco farà esplodere il carico del sistema), chiamare l'API Cloudflare per abilitare lo scudo di 5 secondi.

Cloudflare blocca automaticamente gli IP dannosi sul firewall e passa automaticamente a uno script di protezione di 5 secondi per prevenire attacchi CC

Per ulteriori informazioni sulla sicurezza e l'ottimizzazione del sito Web, ecco:

  1. Cinque suggerimenti per la sicurezza per l'utilizzo di un pannello di controllo VPS gratuito: non lasciare che gli hacker ne traggano vantaggio
  2. Il processo di ottimizzazione Linux php-fpm experience-php-fpm occupa molta memoria e non rilascia problemi di memoria
  3. Abilita HSTS e iscriviti all'elenco di precaricamento HSTS per rendere più sicuro l'accesso HTTPS al sito Web, con metodi per eliminare HSTS

PS: aggiornato il 25 marzo 2019, Per quanto riguarda i problemi di sicurezza del VPS, molti amici potrebbero ignorare la configurazione SSH del VPS stesso. Ecco le strategie di rafforzamento: Protezione della sicurezza dell'host e del server VPS: porta di modifica SSH , aggiungi Whitelist, solo accesso tramite chiave.

PS: aggiornato il 4 gennaio 2020, Cloudflare Railgun è la soluzione di accelerazione definitiva fornita da Cloudflare appositamente per i clienti Business ed Enterprise. Tuttavia, può essere attivato gratuitamente tramite Cloudflare Partner: attiva gratuitamente l'accelerazione Cloudflare Railgun: riduci i ritardi di connessione e ottieni caching e accelerazione dinamici della pagina.

1. Cloudflare blocca automaticamente gli IP dannosi

1.1  Trova l'IP dannoso

Utilizza uno script per analizzare la frequenza di accesso a un singolo IP in un minuto. Se la frequenza supera una certa frequenza (generalmente, l'accesso normale non deve superare le 60 volte in un minuto, è possibile impostarla su un valore inferiore), lo è. considerato un IP dannoso. La sceneggiatura è la seguente:

#/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  Aggiungi IP al firewall in batch

Utilizza il seguente codice per aggiungere IP dannosi al firewall di Cloudflare in batch. Ricorda di sostituirlo con la tua 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  Trova automaticamente IP dannosi e aggiungili al firewall

Basta unire i due script precedenti in un unico 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

Ho inserito lo script sopra nel mio centro download e posso fornirlo a chiunque per scaricarlo e utilizzarlo. Il codice è il seguente:

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

Infine, imposta un'attività pianificata e lascia che lo script la rilevi ogni minuto (modificala secondo necessità. Per l'uso delle attività pianificate, fai riferimento a: Sintassi di base dell'attività pianificata del comando Linux Crontab)

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

L'effetto dell'aggiunta automatica di IP dannosi al firewall CloudFlare è il seguente:

2. Cloudflare cambia automaticamente lo script di scudo di 5 secondi

sito web:

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

Quando il tuo server è sotto attacco, il carico del sistema esplode. Utilizza uno script per rilevare automaticamente il carico del sistema. Quando la pressione supera un certo valore, puoi passare alla modalità "Sono sotto attacco!". I passi sono come segue:

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

Per impostazione predefinita, lo script rileva il carico del sistema a 10 e attiva la modalità "Sono sotto attacco!". Puoi regolarlo secondo necessità. Come mostrato di seguito:

Il codice completo dello script è il seguente:

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

Cloudflare è uno strumento molto facile da usare per difendersi dagli attacchi DDos e CC. La versione gratuita di Cloudflare combinata con l'API può ottenere funzioni più flessibili ed è sufficiente per la difesa ordinaria.

Anche la protezione Cloudflare presenta alcuni problemi, ovvero, dopo aver abilitato Cloudflare, l'IP dell'utente ottenuto è l'IP del nodo CDN Cloudflare. Dobbiamo anche fare un'ulteriore ottimizzazione nella configurazione del server.

lascia un commento