1. 需求分析
DDoS攻擊通過海量請求耗盡服務器資源。本文使用 Python + Scapy 實時監控流量,自動觸發IP封禁。
2. 核心代碼實現
2.1 依賴安裝
pip install scapy psutil
2.2 流量監控腳本(ddos_detector.py)
import time
from scapy.all import sniff, IP
import psutil
import subprocess# 閾值配置
SYN_THRESHOLD = 100 # 每秒SYN包數量閾值
BAN_TIME = 600 # 封禁時長(秒)syn_counter = {}
last_cleanup = time.time()def analyze_packet(packet):global syn_counter, last_cleanupif IP in packet:src_ip = packet[IP].srcif packet.haslayer('TCP') and packet['TCP'].flags == 'S':syn_counter[src_ip] = syn_counter.get(src_ip, 0) + 1# 每10秒清理舊記錄if time.time() - last_cleanup > 10:for ip in list(syn_counter.keys()):if syn_counter[ip] > SYN_THRESHOLD:print(f"[!] DDoS detected from {ip}. Blocking...")subprocess.call(f"iptables -A INPUT -s {ip} -j DROP", shell=True)del syn_counter[ip]syn_counter.clear()last_cleanup = time.time()if __name__ == "__main__":print("[*] Starting DDoS detector...")sniff(prn=analyze_packet, filter="tcp", store=0)
2.3 腳本后臺運行
nohup sudo python3 ddos_detector.py > /var/log/ddos.log 2>&1 &
3. 攻擊模擬與防御測試
# 使用 hping3 模擬SYN洪水攻擊(測試機執行)
sudo hping3 -S --flood -p 80 your_server_ip# 查看iptables規則(服務器執行)
sudo iptables -L INPUT -n
4. 優化方向
- 集成SNMP實現網絡設備聯動
- 添加HTTP/HTTPS層特征分析(如User-Agent異常)
- 結合機器學習模型識別新型攻擊