CC 攻擊(Challenge Collapsar)透過大量代理 IP 模擬正常請求耗盡伺服器資源。應變核心:**快速識別攻擊源 → 精準封鎖 → 恢復服務**。
<?php
$real_ip = getenv('HTTP_X_FORWARDED_FOR');
if (isset($real_ip)) {
shell_exec("echo $real_ip >> real_ip.txt");
shell_exec("echo {$_SERVER['REMOTE_ADDR']} >> proxy.txt");
} else {
shell_exec("echo {$_SERVER['REMOTE_ADDR']} >> ips.txt");
}
echo '伺服器受攻擊中,正在收集攻擊源,請 5 分鐘後再訪問...';
?>
rewrite (.*) /ip.php;
url.rewrite = ( "^/(.+)/?$" => "/ip.php" )
real_ip.txt:真實客戶端 IP(穿透代理),出現頻率最高者為攻擊平台proxy.txt:代理伺服器 IP,需全數封鎖ips.txt:直連 IP,依訪問頻率判斷若未啟用存取日誌,在 ip.php 加入:
shell_exec("echo {$_SERVER['HTTP_HOST']} >> domain.txt");
domain.txt 出現頻率最高的域名即為受攻擊目標。
<?php
$threshold = 10; // 閾值:超過 10 次視為攻擊
$ips = array_count_values(file('ips.txt'));
$ban_num = 0;
foreach ($ips as $ip => $num) {
if ($num > $threshold) {
$ip = trim($ip);
$cmd = "iptables -I INPUT -p tcp --dport 80 -s $ip -j DROP";
shell_exec($cmd);
echo "$ip banned!\n";
$ban_num++;
}
}
$proxy_arr = array_unique(file('proxy.txt'));
foreach ($proxy_arr as $proxy) {
$proxy = trim($proxy);
$cmd = "iptables -I INPUT -p tcp --dport 80 -s $proxy -j DROP";
shell_exec($cmd);
echo "$proxy banned!\n";
$ban_num++;
}
echo "total: $ban_num ips\n";
?>
php ban.php
| 痛點 | 優化方案 |
|---|---|
| shell_exec 權限不足 | PHP-FPM 以 root 執行(不建議)或 sudoers 免密授權 iptables |
| iptables 規則重啟失效 | 使用 iptables-save/恢復、或安裝 iptables-persistent |
| 單機封鎖上限 | 接入雲端 WAF(Cloudflare、阿里雲盾)、或部署 IPset 大量管理 |
| 誤封正常用戶 | 白名單機制、人工複核、封鎖前二次驗證(驗證碼/行為分析) |
| 日誌分析延遲 | 即時串流分析(Filebeat + Logstash + Elasticsearch + Kibana) |
limit_req_zone、PHP 中間件 Token Bucket