DDoS防御与流量优化

实训背景

某在线游戏平台遭受频繁DDoS攻击,需部署Linux网关实现以下防护与优化功能:

  1. 防御SYN洪水攻击:自动识别并拦截高频SYN请求。
  2. 连接数限制:限制单个IP的最大并发连接数为100,防止资源耗尽。
  3. 流量优先级保障:优先处理游戏流量(UDP 5000-6000端口),确保低延迟。
  4. 攻击流量审计:记录所有异常连接尝试,便于后续分析。

环境准备

硬件/软件要求
  • 四台虚拟机
    1. 网关服务器:双网卡(eth0: NAT模式模拟公网,eth1: 内部网络 10.1.1.1)
    2. 游戏服务器:单网卡(内部网络 10.1.1.100,监听UDP 5000-6000)
    3. 正常用户客户端:单网卡(内部网络 10.1.1.50)
    4. 攻击模拟机:单网卡(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包速率。

  1. 启用SYN Cookie

    bash 复制代码
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies  
    # 永久生效  
    sysctl -w net.ipv4.tcp_syncookies=1  
  2. 限制SYN包速率(每秒最多50个)

    bash 复制代码
    iptables -A INPUT -p tcp --syn -m limit --limit 50/s --limit-burst 100 -j ACCEPT  
    iptables -A INPUT -p tcp --syn -j DROP  

验证

  • 在攻击模拟机执行:

    bash 复制代码
    hping3 -S -p 80 --flood 网关公网IP  
  • 在网关用 netstat -ant | grep SYN_RECV | wc -l 观察半连接数是否稳定。


任务2:限制单IP并发连接数

目标:防止单个IP占用过多资源。

  1. 限制TCP连接数

    bash 复制代码
    iptables -A INPUT -p tcp -m connlimit --connlimit-above 100 --connlimit-mask 32 -j REJECT  
  2. 限制UDP"连接"(模拟会话)

    bash 复制代码
    iptables -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流量优先级。

  1. 创建流量分类标记

    bash 复制代码
    iptables -t mangle -A PREROUTING -p udp --dport 5000:6000 -j MARK --set-mark 1  
  2. 配置HTB队列优先级

    bash 复制代码
    tc 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流:

    bash 复制代码
    iperf3 -s -p 5000  # 服务端  
    iperf3 -c 10.1.1.100 -u -p 5000 -b 1000M  # 客户端  
  • 同时用 tc -s class show dev eth0 观察带宽分配。


任务4:记录异常连接日志

目标:捕获所有被拒绝的流量用于审计。

  1. 创建日志链

    bash 复制代码
    iptables -N LOG_DROP  
    iptables -A LOG_DROP -j LOG --log-prefix "[IPTABLES DROP] " --log-level 4  
    iptables -A LOG_DROP -j DROP  
  2. 将默认策略指向日志链

    bash 复制代码
    iptables -A INPUT -j LOG_DROP  
    iptables -A FORWARD -j LOG_DROP  

验证

  • 触发任意拒绝规则(如SSH暴力破解),检查日志:

    bash 复制代码
    tail -f /var/log/kern.log | grep "IPTABLES DROP"  

实训总结

通过本案例,您已掌握以下企业级防护技能:

  1. 通过SYN Cookie和速率限制抵御洪水攻击。
  2. 使用connlimit模块防止单IP资源耗尽。
  3. 结合TC和iptables标记实现流量QoS保障。
  4. 利用LOG动作实现安全事件审计。

知识要点

要点 说明
SYN Cookie 内核参数动态防御SYN洪水
connlimit模块 限制单IP并发连接数
TC流量分类 基于fwmark标记实现优先级队列
LOG动作 记录丢弃数据包的详细信息
状态模拟(UDP) 用recent模块追踪无连接协议

扩展挑战

  1. 集成Fail2ban自动封禁恶意IP。
  2. 使用ebtables防御ARP欺骗攻击。
  3. 部署Elasticsearch+Logstash+Kibana(ELK)实现日志可视化分析。
相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush44 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5204 天前
Linux 11 动态监控指令top
linux
网络研究院4 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展