1.
概述与准备工作
1) 确认服务器类型与运行环境(裸机/云主机/容器)。
2) 明确自走棋所需端口与协议(示例:游戏主端口 GAME_PORT=12345,通常为 TCP/UDP),记录控制台与内网监听端口。
3) 准备远程控制工具(SSH)、管理员权限、并备份当前防火墙配置:sudo iptables-save > ~/iptables.bak 或 sudo ufw status numbered >/tmp/ufw.bak。
2.
在新加坡云控制台(Security Group / Firewall)开放端口
1) 登录云厂商控制台(如 AWS/GCP/DigitalOcean/阿里云)-> 网络或安全组设置。
2) 新建/编辑安全组规则:添加入站规则,协议选择 TCP/UDP(按游戏需要),端口填写 GAME_PORT(示例 12345),源地址建议限定为 0.0.0.0/0(全互联)或按需要限定玩家网段;添加出站规则通常允许所有。
3) 提交并等待生效,记录规则ID以便后续回滚。
3.
确认应用程序监听地址与端口
1) 登录服务器,运行 ss -tunlp | grep GAME_PORT 或 netstat -tunlp | grep GAME_PORT,确认程序绑定在 0.0.0.0 而不是 127.0.0.1。
2) 如果绑定本地回环:修改程序配置把监听地址改为 0.0.0.0 或服务器真实内网IP,重启服务(示例:sudo systemctl restart mygame.service)。
3) 检查日志(/var/log/)确认无权限或绑定失败错误。
4.
操作系统层面:使用 UFW 快速开放端口(Ubuntu 示例)
1) 启用 UFW(若已启用跳到下一步):sudo ufw enable。
2) 允许端口:sudo ufw allow 12345/tcp && sudo ufw allow 12345/udp(替换为实际端口与协议)。
3) 限制来源(可选):sudo ufw allow from 203.0.113.0/24 to any port 12345 proto tcp。
4) 查看状态:sudo ufw status verbose。
5.
操作系统层面:使用 iptables/nftables 做端口转发(Linux NAT 主机)
1) 若需要将公网端口 40000 转发到内网服务 12345:启用内核转发:sudo sysctl -w net.ipv4.ip_forward=1(并写入 /etc/sysctl.conf)。
2) iptables 示例(IPv4、假设公网接口 eth0,内网服务 IP 10.0.0.5):sudo iptables -t nat -A PREROUTING -i eth0 -p udp --dport 40000 -j DNAT --to-destination 10.0.0.5:12345 && sudo iptables -t nat -A POSTROUTING -j MASQUERADE。
3) 保存规则(Debian/Ubuntu):sudo apt-get install iptables-persistent && sudo netfilter-persistent save,或手动写入启动脚本。
6.
容器化部署(Docker / Docker Compose)端口映射
1) Docker 运行:docker run -d --name chess -p 12345:12345/udp -p 12345:12345/tcp your-image。
2) Docker Compose 示例:在 docker-compose.yml 服务下写 ports: - "12345:12345/udp" - "12345:12345/tcp"。
3) 确认容器内部进程绑定 0.0.0.0,否则需要在容器内调整配置。
7.
DDoS 与流量突增防护策略
1) 使用云厂商提供的 DDoS 防护(如 AWS Shield、GCP Cloud Armor、阿里云 Anti-DDoS)。开启基础防护并评估计费策略。
2) 对外暴露端口尽量少,使用反向代理或负载均衡器(ELB/SLB)做流量吸收与健康检查。
3) 开启速率限制与连接限制:iptables 示例限制新连接速率:sudo iptables -A INPUT -p udp --dport 12345 -m connlimit --connlimit-above 200 -j REJECT。
8.
安全加固:登录限制、Fail2ban 与端口敲门
1) 安装 fail2ban,创建自定义 jail 对应游戏端口,禁止暴力或频繁异常连接:/etc/fail2ban/jail.local。
2) 对 SSH 等管理端口使用非标准端口并限制来源;使用密钥登录并禁用密码。
3) 可选:部署端口敲门(port knocking)或使用 VPN(WireGuard/OpenVPN)把管理接口隐藏在内网,仅通过 VPN 访问控制台。
9.
日志、监控与自动告警
1) 收集连接日志(游戏日志、iptables LOGRULES)并集中到 ELK/Prometheus + Grafana。
2) 编写简单脚本定期检查端口可达性(curl/udp echo/自定义探针),若失败发送 Slack/邮件告警。
3) 留存审计日志并设置容量轮替(logrotate)防止磁盘填满。
10.
测试与排错流程
1) 本地端到外网测试:从外部机器运行 nc -u 公网IP 12345 或 nmap -sU -p 12345 公网IP。
2) 若不可达,按顺序排查:云安全组 -> 服务器防火墙(ufw/iptables)-> 应用监听 -> NAT/端口转发规则 -> 运营商/宿主网络策略。
3) 查看内核转发、iptables nat 表:sudo sysctl net.ipv4.ip_forward && sudo iptables -t nat -L -n -v。
11.
常见配置示例汇总
1) 示例:云端安全组允许 12345/udp,服务器 ufw allow 12345/udp,应用监听 0.0.0.0:12345,若使用 NAT 转发则 iptables PREROUTING 指向内网。
2) 若用 Docker,最简单是直接主机映射端口并关闭不必要的容器网络桥接。
3) 任何规则修改后立即测试并保留回滚点(iptables-save / ufw status)。
12.
Q&A 1 — 我该如何确认端口在云端真正对外开放?
答:先在云控制台检查安全组/防火墙规则是否允许对应协议与端口;然后在服务器上用 ss -tunlp 确认程序监听在 0.0.0.0;最后从外网一台独立机器运行 nmap -sU/-sT 或 nc -vz 公网IP 端口 验证连通性,若失败按安全组->服务器防火墙->应用绑定顺序排查。
13.
Q&A 2 — 服务器在新加坡后,如何最小化被 DDoS 的风险?
答:开启云厂商的 DDoS 防护服务或使用托管型负载均衡/反向代理(如 Cloudflare Spectrum 或云厂商自带的流量清洗);减少暴露端口数量;对异常连接速率做限速(iptables connlimit、rate-limit);并准备自动化规则在攻击时临时提升防护级别。
14.
Q&A 3 — 如果玩家反映延迟高,端口设置我还能做哪些优化?
答:检查是否开启了不必要的 NAT 处理或多重代理,优先让游戏服务器直接暴露公网或使用高速负载均衡;确认服务器位于玩家网络路径的良好位置(新加坡对亚太玩家通常较优);在防火墙上避免过于复杂的包过滤规则影响性能,必要时调整 MTU、开启 SO_REUSEPORT、并使用性能更好的内核网络参数调优。
来源:自走棋服务器是新加坡后如何设置端口转发与安全策略