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.
Per ulteriori informazioni sulla sicurezza e l'ottimizzazione del sito Web, ecco:
- Cinque suggerimenti per la sicurezza per l'utilizzo di un pannello di controllo VPS gratuito: non lasciare che gli hacker ne traggano vantaggio
- Il processo di ottimizzazione Linux php-fpm experience-php-fpm occupa molta memoria e non rilascia problemi di memoria
- 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:
- 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.