面对 UDP 反射攻击,本地防火墙主要用于关闭非必要端口和基础限速,若流量超过带宽上限,必须联系上游服务商进行清洗。
先说结论:本地防火墙能减少攻击面,但无法单独抵御大流量带宽耗尽型攻击。
- 先判断:确认攻击流量是否已 saturate 带宽,还是仅消耗服务器性能。
- 优先做:在防火墙层面丢弃非业务必需的 UDP 端口和高危反射端口。
- 再验证:测试游戏业务连通性,确认正常玩家不受影响。
核心命令修正版
以下命令基于 Linux iptables,已修正语法错误并区分了“防止被利用”与“防御攻击”两种场景:
1. 防止服务器被用作反射源(关闭高危端口)
丢弃常见的高危 UDP 反射端口(请确保游戏业务不使用这些端口):
iptables -A INPUT -p udp `--dport` 53 -j DROP
iptables -A INPUT -p udp `--dport` 123 -j DROP
iptables -A INPUT -p udp `--dport` 11211 -j DROP
iptables -A INPUT -p udp `--dport` 1900 -j DROP
2. 防御游戏业务端口被攻击(针对性限速)
对必须开放的游戏业务端口设置连接速率限制,避免全局限速误伤:
# 将 8080 替换为实际游戏端口
iptables -A INPUT -p udp `--dport` 8080 -m limit `--limit` 100/s `--limit-burst` 200 -j ACCEPT
iptables -A INPUT -p udp `--dport` 8080 -j DROP
防御原理与区别
UDP 协议本身没有握手过程,攻击者可以伪造受害者的 IP 地址向开放了 UDP 服务的服务器发送请求。这些服务器(如 DNS、NTP)会向受害者返回比请求大得多的响应数据,形成反射放大。
关键区别:
- 防止被利用:关闭 53、123 等公共服务端口,避免你的服务器成为攻击别人的“肉鸡”。
- 防御被攻击:限制游戏业务端口的入站速率,避免洪水流量耗尽服务器 CPU 或连接表。
游戏服务器通常必须开放 UDP 端口供玩家连接,因此容易成为目标或被误伤。
分步实操
1. 梳理业务端口
列出游戏服务实际监听的 UDP 端口。使用 netstat -ulnp 或 ss -ulnp 查看。除这些端口外,其他 UDP 端口原则上都应关闭。
2. 检查是否被用作反射源
若怀疑服务器正在向外反射流量,检查 outbound UDP 连接:netstat -anu | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
若发现大量发往非常见 IP 的 UDP 包,可能存在被利用风险,需立即排查异常进程。
3. 配置防火墙规则
采用白名单策略,只放行游戏业务端口,丢弃其他所有 UDP 流量。如果使用云服务商,优先在控制台的安全组配置,因为安全组在流量进入服务器前就被拦截,不消耗服务器资源。
4. 云厂商安全组配置示例
登录云控制台,找到实例安全组:
- 入方向:仅放行游戏 UDP 端口(如 8080/udp),源地址设为 0.0.0.0/0 或特定 IP 段。
- 出方向:默认放行,但若发现异常外联,可限制非必要端口。
- 开启云盾/DDoS 基础防护,设置阈值告警。
5. 联系上游清洗
如果入口带宽被打满,本地防火墙规则将不再生效。此时需联系 IDC 或云厂商开启 DDoS 防护,将流量牵引到清洗中心。
怎么验证是否生效
使用 tcpdump 抓包观察 UDP 流量特征。例如:tcpdump -i any -n udp。观察是否仍有大量来自非常见端口的 UDP 包进入。同时监控服务器带宽使用率,确认是否回落至正常范围。在游戏客户端进行连接测试,确保延迟和丢包率在可接受范围内。
常见坑
1. 误封业务端口:游戏更新或特定功能可能使用额外 UDP 端口,封禁前务必确认。
2. 防火墙性能瓶颈:高并发下 iptables 规则过多会消耗 CPU,导致合法请求处理变慢,建议优先使用云安全组。
3. 忽略 ICMP:部分攻击伴随 ICMP 洪水,必要时也需限制 ICMP 速率。
4. 带宽饱和无解:本地规则无法解决带宽被打满的情况,不要指望单靠服务器配置抵御 GB 级流量。
5. 限速过严:全局 UDP 限速未指定目的端口,可能限制游戏业务正常流量,务必针对业务端口配置。