萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 利用 Shell 腳本分析 Nginx 日誌抵禦小規模 DDoS 攻擊

Linux 系統的 Shell 腳本功能強大,可用於自動化執行各類命令。當網站遭受小規模 DDoS 攻擊時,我們可以透過撰寫 Shell 腳本分析 Nginx 存取日誌,識別並封鎖異常 IP,從而達到防禦目的。本文將詳細介紹如何實作這套防禦機制。

攻擊特徵分析

典型的小規模 DDoS 攻擊特徵為:大量不同 IP 不斷對網站首頁發送 POST 請求,導致伺服器資源過度消耗,服務變慢甚至癱瘓。

防禦實作邏輯

  1. 分析 Nginx 存取日誌:過濾 POST 請求,提取客戶端 IP。
  2. 統計連線數:統計各 IP 的請求次數,設定閾值(如 50 次)。
  3. 封鎖異常 IP:對超過閾值的 IP,透過 iptables 丟棄其封包。
  4. 記錄與比對:將封鎖的 IP 寫入名單,下次執行時比對避免重複封鎖。
  5. 日誌輪轉:定期備份並清空存取日誌,防止日誌檔案過大。

核心腳本碼

#!/bin/bash
WEBSITES=(example.com)
minute_now=`date +%M`
max_connections=50
banips="/wwwdata/jobs/banips.txt"

for site in ${WEBSITES[@]}; do
    access_log_file="/wwwdata/logs/${site}.access.log"
    if [ -f "${access_log_file}" ]; then
        cat ${access_log_file} | grep POST | awk '{print $1}' | sort | uniq -c | sort -nr > /wwwdata/jobs/ip_records.txt
        lines=`wc -l /wwwdata/jobs/ip_records.txt | awk '{print $1}'`
        echo "Lines: $lines"
        i=1
        while [ ${i} -le ${lines} ]; do
            ip_record=`head -${i} /wwwdata/jobs/ip_records.txt | tail -1 | sed 's/^[ \t]*//g'`
            ip_count=`echo ${ip_record} | awk '{print $1}'`
            ip_address=`echo ${ip_record} | awk '{print $2}'`
            echo "${ip_count} ${ip_address}"
            if [ ${ip_count} -gt ${max_connections} ]; then
                banned=`cat ${banips} | grep ${ip_address} | wc -l`
                if [ ${banned} -lt 1 ]; then
                    iptables -A INPUT -s ${ip_address} -p tcp -m state --state NEW -m tcp --dport 80 -j DROP
                    echo ${ip_address} >> ${banips}
                fi
            fi
            i=`expr ${i} + 1`
        done
        service iptables save
        service iptables restart
        if [ ${minute_now} -eq 30 ]; then
            cat ${access_log_file} >> /wwwdata/logs/olds/${site}.access.log
            cat /dev/null > ${access_log_file}
        fi
    fi
done

if [ ${minute_now} -eq 30 ]; then
    service nginx restart
fi

部署建議

將此腳本加入 crontab 定時執行(如每分鐘一次),即可自動偵測並封鎖異常流量。需注意:此方案僅適用於小規模攻擊,大規模 DDoS 仍需專業防護設備或雲端清洗服務。

copyright © 萬盛學電腦網 all rights reserved