游戏服务器防攻击怎么设置?四层配置清单
这个问题搜的人很多,但答案往往很笼统。这篇给一套可以照着做的配置清单。
先明确防护的目标
不是"防住所有攻击"(做不到),而是:
- 让攻击者找不到你(隐藏 IP)
- 让攻击流量到不了业务层(清洗/限流)
- 就算被打穿也能快速恢复(备份/预案)
第一层:网络层配置
1. 关闭不必要的端口
# 查看监听端口
netstat -tlnp
ss -tlnp
# 只保留必要端口:
# 80/443(Web)
# 游戏端口(按需)
# 22(SSH,建议改端口 + 限制 IP)
每多开一个端口,就多一个攻击面。数据库端口(3306/6379/27017)绝对不能对公网开放。
2. 配置防火墙白名单
# 只允许特定 IP 访问 SSH
iptables -A INPUT -p tcp --dport 22 -s 你的办公IP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
# 数据库只允许内网
iptables -A INPUT -p tcp --dport 3306 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
3. 接入防护后收敛源站
如果用高防或 CDN,源站防火墙应该只允许防护节点的回源 IP:
# 示例:只允许清洗中心回源
iptables -A INPUT -s 清洗中心IP段 -j ACCEPT
iptables -A INPUT -j DROP
这一步不做,源站 IP 一旦泄露,防护就白上了。
第二层:系统层配置
1. 调整内核参数(抗 SYN Flood)
# /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
# 生效
sysctl -p
这些参数能提高系统抗 SYN Flood 的能力,但不能替代专业防护。
2. 限制单 IP 连接数
# iptables 限制单 IP 并发连接
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j DROP
# 限制新建连接速率
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
第三层:应用层配置
1. Nginx 限速(最重要)
# nginx.conf 的 http 块
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
# server 块
server {
limit_req zone=req burst=20 nodelay;
limit_conn conn 20;
limit_req_status 429;
}
2. 登录接口单独加固
location = /api/login {
limit_req zone=req burst=3 nodelay;
limit_except POST { deny all; }
proxy_pass http://127.0.0.1:8080;
}
3. 关键接口加验证码
登录、注册、找回密码这些接口,被 CC 打的概率最高。加个验证码能挡掉大部分自动化攻击。
第四层:业务层配置
1. 会话校验
要求请求携带服务端签发的 token,无效的直接拒绝。这一层能过滤掉大部分伪造请求。
2. 频率限制(按业务)
| 接口 | 建议限制 |
|---|---|
| 登录 | 单 IP 每分钟 5 次 |
| 注册 | 单 IP 每小时 3 次 |
| 查询类 | 单 IP 每分钟 60 次 |
| 支付 | 单账号每分钟 3 次 |
3. 降级预案
被打的时候,非核心功能要能主动关掉:
- 关闭排行榜、公告
- 登录加验证码
- 限流阈值临时调低
游戏服务器的特殊配置
1. UDP 防护
游戏主要用 UDP,要特别注意:
# 限制单 IP 的 UDP 包速率
iptables -A INPUT -p udp --dport 游戏端口 -m limit --limit 50/second --limit-burst 100 -j ACCEPT
iptables -A INPUT -p udp --dport 游戏端口 -j DROP
但要注意:网吧、学校这类共享出口,多个玩家共用一个 IP,限速会误伤。
2. 协议校验
只允许符合游戏协议格式的包通过,能挡掉大部分垃圾包。
3. 隐藏源站
游戏最大的风险是源站 IP 暴露(客户端里能抓出来)。所以:
- 客户端配置里不能有源站 IP
- 走节点接入,节点再回源
一份可执行的检查清单
- ☑ 关闭所有非必要端口
- ☑ 数据库只允许内网访问
- ☑ SSH 改端口 + IP 白名单
- ☑ 接入防护后收敛源站防火墙
- ☑ 调整内核参数(syncookies 等)
- ☑ Nginx 全站限速
- ☑ 登录接口单独限速 + 验证码
- ☑ 业务层会话校验
- ☑ 每日备份 + 每月验证恢复
- ☑ 监控告警(流量、CPU、连接数)
这些配置能挡住什么
| 攻击类型 | 能挡住吗 |
|---|---|
| 端口扫描 | ✅ 能(端口收敛) |
| 暴力破解 | ✅ 能(频率限制 + 白名单) |
| 小规模 CC | ✅ 能(Nginx 限速) |
| 分布式 CC | ❌ 不能 |
| DDoS 流量攻击 | ❌ 不能(需要带宽层防护) |
服务器本地的配置只能解决"应用层"和"系统层"的问题。真正的 DDoS 防护必须在带宽层做,本地做不了。
如果已经被持续攻击,建议看 游戏盾和高防 IP 到底选哪个。