# 基于连接速率自动封禁(保存为syn_protect.py) from scapy.allimport sniff, TCP, IP
import os
syn_counts ={}
MAX_SYN =50# 每秒50个SYN包触发封禁 defhandle_packet(pkt):if TCP in pkt and pkt[TCP].flags =='S':
src_ip = pkt[IP].src
syn_counts[src_ip]= syn_counts.get(src_ip,0)+1if syn_counts[src_ip]> MAX_SYN:
os.system(f"iptables -A INPUT -s {src_ip} -j DROP")print(f"封禁SYN Flood IP: {src_ip}")
sniff(filter="tcp", prn=handle_packet, store=0)
3. TCP选项过滤(防协议栈指纹探测)
# 使用iptables过滤异常TCP选项
iptables -A INPUT -p tcp -m tcp --tcp-option !2-j DROP # 仅允许MSS选项
iptables -A INPUT -p tcp --tcp-flags ALL URG -j DROP # 丢弃URG标志包
三、UDP层定制防御方案
1. 反射攻击源端口封禁
# 封禁常见反射协议端口
iptables -A INPUT -p udp --dport123-j DROP # NTP
iptables -A INPUT -p udp --dport53-j DROP # DNS
iptables -A INPUT -p udp --dport1900-j DROP # SSDP
2. 速率限制与包大小过滤
# 限制UDP包速率(每秒1000个包)
iptables -A INPUT -p udp -m limit --limit1000/sec -j ACCEPT
iptables -A INPUT -p udp -j DROP
# 过滤大尺寸UDP包(>512字节视为可疑)
iptables -A INPUT -p udp -m length --length512:65535 -j DROP