
实训背景
某在线游戏平台遭受频繁DDoS攻击,需部署Linux网关实现以下防护与优化功能:
- 防御SYN洪水攻击:自动识别并拦截高频SYN请求。
- 连接数限制:限制单个IP的最大并发连接数为100,防止资源耗尽。
- 流量优先级保障:优先处理游戏流量(UDP 5000-6000端口),确保低延迟。
- 攻击流量审计:记录所有异常连接尝试,便于后续分析。
环境准备
硬件/软件要求
- 四台虚拟机 :
- 网关服务器:双网卡(eth0: NAT模式模拟公网,eth1: 内部网络 10.1.1.1)
- 游戏服务器:单网卡(内部网络 10.1.1.100,监听UDP 5000-6000)
- 正常用户客户端:单网卡(内部网络 10.1.1.50)
- 攻击模拟机:单网卡(NAT模式模拟公网,安装hping3)
- 操作系统:CentOS 8/Ubuntu 22.04
- 工具 :
iptables
,tc
,hping3
,tshark
,conntrack-tools
网络拓扑
公网攻击流量 (eth0:NAT)
↓
网关服务器 (eth1:10.1.1.1)
↓
内部网络 (10.1.1.0/24)
└── 游戏服务器 (10.1.1.100:5000-6000)
实训步骤
任务1:防御SYN洪水攻击
目标:启用SYN Cookie并限制SYN包速率。
-
启用SYN Cookie
bashecho 1 > /proc/sys/net/ipv4/tcp_syncookies # 永久生效 sysctl -w net.ipv4.tcp_syncookies=1
-
限制SYN包速率(每秒最多50个)
bashiptables -A INPUT -p tcp --syn -m limit --limit 50/s --limit-burst 100 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP
验证:
-
在攻击模拟机执行:
bashhping3 -S -p 80 --flood 网关公网IP
-
在网关用
netstat -ant | grep SYN_RECV | wc -l
观察半连接数是否稳定。
任务2:限制单IP并发连接数
目标:防止单个IP占用过多资源。
-
限制TCP连接数
bashiptables -A INPUT -p tcp -m connlimit --connlimit-above 100 --connlimit-mask 32 -j REJECT
-
限制UDP"连接"(模拟会话)
bashiptables -A INPUT -p udp -m state --state NEW -m recent --set --name UDPFLOOD iptables -A INPUT -p udp -m state --state NEW -m recent --update --seconds 60 --hitcount 200 --name UDPFLOOD -j DROP
验证:
- 在正常客户端使用
ab -n 1000 -c 150 http://网关公网IP
,超过100连接的部分应被拒绝。
任务3:标记并优先处理游戏流量
目标:使用TC保障游戏UDP流量优先级。
-
创建流量分类标记
bashiptables -t mangle -A PREROUTING -p udp --dport 5000:6000 -j MARK --set-mark 1
-
配置HTB队列优先级
bashtc qdisc add dev eth0 root handle 1: htb tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit # 高优先级通道(游戏流量) tc class add dev eth0 parent 1:1 classid 1:10 htb rate 800mbit prio 0 # 默认通道(其他流量) tc class add dev eth0 parent 1:1 classid 1:20 htb rate 200mbit prio 1 # 过滤器绑定标记 tc filter add dev eth0 protocol ip parent 1:0 prio 0 handle 1 fw flowid 1:10
验证:
-
在游戏服务器和客户端之间发起UDP流:
bashiperf3 -s -p 5000 # 服务端 iperf3 -c 10.1.1.100 -u -p 5000 -b 1000M # 客户端
-
同时用
tc -s class show dev eth0
观察带宽分配。
任务4:记录异常连接日志
目标:捕获所有被拒绝的流量用于审计。
-
创建日志链
bashiptables -N LOG_DROP iptables -A LOG_DROP -j LOG --log-prefix "[IPTABLES DROP] " --log-level 4 iptables -A LOG_DROP -j DROP
-
将默认策略指向日志链
bashiptables -A INPUT -j LOG_DROP iptables -A FORWARD -j LOG_DROP
验证:
-
触发任意拒绝规则(如SSH暴力破解),检查日志:
bashtail -f /var/log/kern.log | grep "IPTABLES DROP"
实训总结
通过本案例,您已掌握以下企业级防护技能:
- 通过SYN Cookie和速率限制抵御洪水攻击。
- 使用connlimit模块防止单IP资源耗尽。
- 结合TC和iptables标记实现流量QoS保障。
- 利用LOG动作实现安全事件审计。
知识要点
要点 | 说明 |
---|---|
SYN Cookie | 内核参数动态防御SYN洪水 |
connlimit模块 | 限制单IP并发连接数 |
TC流量分类 | 基于fwmark标记实现优先级队列 |
LOG动作 | 记录丢弃数据包的详细信息 |
状态模拟(UDP) | 用recent模块追踪无连接协议 |
扩展挑战:
- 集成Fail2ban自动封禁恶意IP。
- 使用ebtables防御ARP欺骗攻击。
- 部署Elasticsearch+Logstash+Kibana(ELK)实现日志可视化分析。