分布式拒絕服務(DDoS)攻擊通過大量惡意流量淹沒服務器資源,導致服務癱瘓。本文將提供一套結合代碼實現的主動防御方案,涵蓋流量監控、自動化攔截和基礎設施優化。
1. 實時流量監控與告警
目標:檢測異常流量并觸發告警
工具:Python
+ tshark
(Wireshark命令行工具)
代碼示例:
import subprocess
import timedef monitor_traffic(interface='eth0', threshold=1000):while True:# 統計每秒接收的SYN包數量(SYN Flood常見特征)cmd = f"tshark -i {interface} -a duration:1 -Y 'tcp.flags.syn==1' -q -z stats"result = subprocess.getoutput(cmd)packet_count = int(result.split()[-2]) # 提取SYN包數量if packet_count > threshold:print(f"[!] 異常流量告警: 檢測到 {packet_count} 個SYN包/秒")# 觸發防火墻規則(見下文)block_ip_script()time.sleep(1)if __name__ == "__main__":monitor_traffic(threshold=500) # 根據業務調整閾值
2. 自動封禁惡意IP
工具:iptables
+ Python
代碼示例(自動封禁高頻訪問IP):
# 手動操作命令:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 100 -j DROP
# 自動化腳本擴展:基于日志分析封禁IP
import os
from collections import defaultdictdef analyze_log(log_path='/var/log/nginx/access.log'):ip_count = defaultdict(int)with open(log_path) as f:for line in f:ip = line.split()[0]ip_count[ip] += 1for ip, count in ip_count.items():if count > 300: # 1分鐘內超過300次請求os.system(f"iptables -A INPUT -s {ip} -j DROP")print(f"已封禁IP: {ip}")analyze_log()
3. 基礎設施優化
方案1:啟用CDN隱藏真實IP
# Nginx配置示例:限制單個IP連接數
http {limit_conn_zone $binary_remote_addr zone=addr:10m;server {location / {limit_conn addr 20; # 每個IP最大20連接proxy_pass http://backend_server;}}
}
方案2:云服務商API自動擴容
# AWS自動擴容示例(使用boto3)
import boto3def auto_scaling():cloudwatch = boto3.client('cloudwatch')# 監控CPU使用率metrics = cloudwatch.get_metric_statistics(Namespace='AWS/EC2',MetricName='CPUUtilization',Dimensions=[{'Name':'InstanceId', 'Value':'i-1234567890abcdef0'}],StartTime=datetime.utcnow() - timedelta(minutes=5),EndTime=datetime.utcnow(),Period=300,Statistics=['Average'])if metrics['Datapoints'][0]['Average'] > 90:autoscale = boto3.client('autoscaling')autoscale.set_desired_capacity(AutoScalingGroupName='my-asg',DesiredCapacity=10 # 擴容到10個實例)
總結
- 通過實時監控識別攻擊特征
- 使用iptables和自動化腳本快速響應
- 結合CDN和云服務彈性擴容分散流量壓力
- 定期測試防御方案有效性(推薦使用
slowloris
等工具模擬攻擊)