1.
准备工作与前提确认
- 确认服务器系统(常见:Ubuntu, Debian, CentOS)。
- 确认你有root或sudo权限,以及主机提供商控制面板(用于额外防护和公网IP设置)。
- 备份重要数据并记录当前防火墙规则(例如:iptables-save > /root/iptables.backup)。
2.
确认游戏所需端口与协议
- 查阅官方文档获取游戏所需TCP/UDP端口(示例:Minecraft 默认 25565 TCP/UDP;Steam 系列 27000-27050 TCP/UDP)。
- 把端口和协议整理成列表,例:25565/tcp, 25565/udp, 27015-27030/udp 等;如不确定优先允许官方推荐端口。
- 若涉及语音/匹配服务,注意开放相应UDP端口与 STUN/TURN 端口(供 VoIP 使用)。
3.
在 Ubuntu/Debian 上使用 ufw 开放端口(推荐新手)
- 安装并启用:sudo apt update && sudo apt install ufw -y;sudo ufw enable。
- 添加规则:sudo ufw allow 25565/tcp;sudo ufw allow 25565/udp;或范围:sudo ufw allow 27000:27050/tcp。
- 查看规则并生效:sudo ufw status verbose;如需删除:sudo ufw delete allow 25565/tcp。
4.
在 CentOS/RedHat 使用 firewalld 开放端口
- 启用 firewalld:sudo systemctl enable --now firewalld。
- 添加永久规则并重载:sudo firewall-cmd --permanent --add-port=25565/tcp;sudo firewall-cmd --reload。
- 检查:sudo firewall-cmd --list-all 或查看特定端口 sudo firewall-cmd --query-port=25565/tcp。
5.
使用 iptables 精细控制(进阶)
- 允许端口示例:sudo iptables -A INPUT -p tcp --dport 25565 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT;sudo iptables -A INPUT -p udp --dport 25565 -j ACCEPT。
- 保存规则:在 Debian/Ubuntu 安装 iptables-persistent:sudo netfilter-persistent save;在 CentOS 使用 service iptables save 或 iptables-save > /etc/iptables/rules.v4。
- 建议加上拒绝默认策略:sudo iptables -P INPUT DROP,但先确保已允许 SSH(22)以免锁死:sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT。
6.
端口转发(NAT)与内网服务器部署
- 若游戏服务运行在私有网络或 Docker 容器,需在宿主机做 DNAT:sudo iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 192.168.1.100:25565。
- 开启 IP 转发:sudo sysctl -w net.ipv4.ip_forward=1;持久化编辑 /etc/sysctl.conf 添加 net.ipv4.ip_forward=1 并 sudo sysctl -p。
- 对 Docker 使用 --publish 或 docker-compose 的 ports 映射,确保宿主防火墙规则允许映射端口。
7.
检测端口是否开放与连通性测试
- 本地查看监听:ss -tulpn 或 netstat -tulpn,确认服务绑定到正确 IP 与端口。
- 远程测试端口:从本地机器或第三方主机运行 telnet x.x.x.x 25565 或 nc -vz x.x.x.x 25565;也可用 nmap -sU/-sT 检查 UDP/TCP。
- 若无法连通,检查云厂商是否有额外的安全组、私有网络或带宽/防护策略阻挡。
8.
常见安全强化策略(防止被滥用或被攻陷)
- 限制 SSH 登录:更换端口、禁止 root 直接登录(/etc/ssh/sshd_config PermitRootLogin no),使用密钥认证。
- 使用 fail2ban 阻止暴力登录:sudo apt install fail2ban 并配置 jail.local 针对 ssh、游戏服务的日志规则。
- 最小开放原则:仅开放必要端口;如果可能,用防火墙白名单限制仅允许特定 IP 段连接游戏管理端口。
9.
DDoS 与流量攻击的防护建议
- 优先使用主机商/带宽商的抗 DDoS 服务(香港节点通常有可选套餐);开启后端清洗并设置清洗阈值。
- 在服务器端做速率限制:iptables 示例限制新连接速率 sudo iptables -A INPUT -p tcp --syn --dport 25565 -m connlimit --connlimit-above 100 -j DROP 或使用 hashlimit 做包速率控制。
- 部署 CDN 或游戏加速/中继服务(如需要)并监控流量异常,必要时临时关闭非关键端口。
10.
日志与监控:持续观察与问题定位
- 开启系统日志并集中收集:rsyslog/ journald,或用 ELK/Prometheus + Grafana 监控端口连接数与带宽。
- 定期查看 /var/log/auth.log、游戏服务日志与 iptables-log,发现异常 IP 后用 iptables/ufw 临时封禁。
- 自动化脚本:写脚本定时检查端口可用性并报警(结合 cron 与邮件/钉钉 webhook)。
11.
性能与延迟优化小贴士
- 调整内核参数优化 UDP/TCP:在 /etc/sysctl.conf 增加 net.core.rmem_max、net.core.wmem_max、net.ipv4.udp_mem 等并 sudo sysctl -p。
- 调整游戏服务线程与连接池,避免单线程瓶颈;如果有高并发使用负载均衡或多实例部署。
- 选择香港节点的机房与玩家地理位置接近,使用合适带宽套餐并开启 provider 层 QoS/优先级设置(若有)。
12.
常见问题与解答 — Q1
Q: 我已经打开了端口,但外网玩家仍然无法连接,如何排查?
A: 首先确认服务在服务器上监听(ss/netstat);其次从外网用 nc/telnet/nmap 测试端口;检查云商控制面板是否有安全组或私有网络限制;确认没有本地防火墙规则(iptables/ufw/firewalld)阻挡;如使用 NAT,确认端口转发与 IP 转发已启用;最后检查是否被 DDoS 或带宽限制影响。
13.
常见问题与解答 — Q2
Q: 我担心被攻击,但又必须开放端口给玩家,有没有折中方案?
A: 优先启用主机商的抗 DDoS 服务及白名单策略,仅在必要端口开放给公网;管理端口限制来源 IP;使用 fail2ban/iptables 做速率限制与自动封禁;必要时通过中继/加速服务将真实服务器隐藏在后端,或使用端口代理与按需开启策略。
14.
常见问题与解答 — Q3
Q: 使用 ufw/iptables 哪个更合适?
A: 新手推荐 ufw(简单易用);生产环境或需更精细规则时用 iptables 或 nftables 可实现复杂策略与 NAT;CentOS 常用 firewalld。可以在掌握 iptables/nft 的前提下,结合脚本与持久化工具管理规则。
来源:租香港服务器打游戏的端口设置与防火墙策略推荐