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)实现日志可视化分析。
相关推荐
mzhan0171 小时前
RHEL9: iptables 兼容rule
iptables·升级·rhel9
无奈笑天下7 小时前
银河麒麟高级服务器操作系统【双网卡绑定之bond0】操作方法
linux·运维·服务器·网络·经验分享
飞Link7 小时前
【网络与 AI 工程的交叉】多模态模型的数据传输特点:视频、音频、文本混合通道
网络·人工智能·音视频
一执念7 小时前
网络和互联网通信的本质
网络
老蒋新思维7 小时前
创客匠人峰会实录:知识变现的场景化革命 —— 创始人 IP 如何在垂直领域建立变现壁垒
网络·人工智能·tcp/ip·重构·知识付费·创始人ip·创客匠人
M158227690558 小时前
六通道 CAN 集线器在消防报警主机系统中的应用方案
网络
盈创力和20078 小时前
当抱杆箱也上云:如何用 LoRa/NB-IoT 打造一个会“告警”的智能户外电气箱?
网络·物联网
MonkeyKing_sunyuhua8 小时前
国内Dockerfile的配置,提高打包速度
linux·运维·网络
盛世宏博智慧档案8 小时前
数据追溯 + 异常预警:机柜温湿度以太网变送器应用实践方案
linux·服务器·网络
leandzgc8 小时前
Linux动态存储管理的逻辑卷使用示例
linux·运维·服务器·逻辑卷·linux动态存储管理