传奇游戏服务器端口封禁策略配置与各类网络攻击防护全流程操作指南

来源: 作者: 点击:

端口是外部流量进入服务器的唯一通道,绝大多数针对游戏服务器的攻击,都是从扫描开放端口、寻找未设防端口发起的。做好端口封禁,等于把绝大多数自动化攻击和随机扫描拦在服务器之外,不需要额外投入硬件成本,是性价比最高的基础防护手段。

先梳理清楚游戏服务器运行涉及的所有端口,分类处理才不会误封导致业务中断。第一类是必须对外开放的业务端口,负责玩家登录和游戏数据传输,默认登录端口通常为7000,游戏主通信端口根据区服数量依次为7100、7200、7300,每多开一组区服顺延一个端口,部分版本会用到80端口做微端更新、列表下载,这类端口必须对外开放,但要做好流量管控。第二类是内部服务端口,包括数据库端口、服务端节点之间的通信端口、日志传输端口,这类端口只需要服务器本机或者同内网节点访问,绝对不能对公网开放。第三类是管理类端口,包括Windows系统的3389远程桌面端口、Linux系统的22SSH端口、数据库管理端口、服务器面板端口,这类端口只允许管理员本人访问,不能对公网开放。第四类是完全不需要的端口,包括系统默认开放的135、137、138、139、445端口,这些是Windows文件共享、RPC服务端口,常年被漏洞利用,没有业务需求直接永久封禁。

不同系统下的端口封禁操作流程有区别,先讲Windows系统的配置方法。打开服务器管理器,找到工具菜单里的高级安全Windows防火墙,首先确认防火墙是开启状态,入站规则和出站规则都设置为默认阻止未匹配的连接。先新建入站规则,规则类型选择端口,TCP协议,输入需要开放的业务端口,比如7000、7100、7200、80,设置为允许连接,规则名称标注为游戏业务端口。接下来新建管理端口的规则,同样选端口和TCP协议,输入3389或者自定义的远程端口,设置允许连接的同时,在作用域选项里添加远程IP地址为管理员常用的固定IP段,其他所有IP全部拒绝。然后新建批量封禁规则,把135、137、138、139、445、1433、3306这些端口全部加入规则,设置为阻止连接,适用域、专用、公网所有网络位置。如果用了第三方防火墙面板,不要同时开系统防火墙和第三方防火墙,选一个就行,避免规则冲突。出站规则默认不需要做太多限制,只要把已知的恶意程序出站连接阻止即可,重点是入站方向的管控。配置完之后可以在另一台设备上用端口扫描工具扫一遍公网IP,确认只开放了需要的业务端口,其他端口都是关闭状态。

再讲Linux系统的配置方法,常用的防火墙工具是firewalld或者iptables,优先用系统自带的firewalld。先启动firewalld并设置开机自启,默认区域设置为public,把默认入站策略设置为drop,也就是未明确允许的连接全部丢弃。首先添加业务端口放行,命令行输入firewall-cmd --permanent --add-port=7000/tcp,依次添加7100、7200、80这些业务端口。然后添加管理端口的富规则,允许指定IP访问22端口,命令格式为firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="管理员固定IP/32" port port="22" protocol="tcp" accept',其他IP访问22端口直接拒绝。接下来封禁高危端口,输入firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="135" protocol="tcp" drop',依次把135到139、445、1433、3306这些端口都加入drop规则。所有规则添加完之后,执行firewall-cmd --reload重载生效,用firewall-cmd --list-all查看已生效的规则,确认没有遗漏。如果用iptables的话,先清空默认规则,设置INPUT链默认DROP,然后依次添加允许回环地址、已建立连接放行、业务端口放行、指定IP访问管理端口、高危端口封禁的规则,最后保存规则避免重启丢失。使用云服务器的话,除了系统内部的防火墙,还要配置云平台的安全组规则,安全组规则优先级高于系统防火墙,两边都要设置对,不然系统里开了端口也可能被云平台拦截,或者云平台没封高危端口,系统防火墙漏了就会暴露。

针对不同类型的攻击,端口层面要做针对性的策略调整。针对端口扫描类攻击,除了关闭所有不必要的端口,还要设置端口扫描检测,短时间内同一个IP访问超过10个不同端口,直接把该IP加入临时黑名单,封禁24小时。很多攻击都是先用扫描器扫全网开放端口,找到目标之后再发动针对性攻击,把扫描的IP直接拦掉,后续的攻击根本不会落到服务器上。针对登录端口的暴力破解攻击,要在7000端口上做连接频率限制,单个IP10秒内发起连接超过5次,直接丢弃后续连接,避免攻击者用字典爆破账号密码。很多人服务器被入侵,不是系统有漏洞,而是远程端口或者数据库端口用了弱密码,被暴力破解扫到之后拿到了权限。针对SYN洪水类攻击,开启系统的SYN cookie防护,调整TCP半连接队列长度,同时在防火墙上限制单个IP的最大半连接数,超过阈值直接丢弃包,避免半连接占满服务器资源导致正常玩家连不上。针对CC类虚假连接攻击,要对7000和游戏主端口设置单IP最大连接数,普通玩家每个IP最多建立3到5个连接,超过的直接断开,同时限制单个IP的新建连接频率,每秒超过2个新连接就触发拦截,防止攻击者用大量肉鸡占满连接数。针对UDP类反射攻击,因为游戏业务基本用不到UDP协议,直接在防火墙封禁所有UDP端口,只放行业务需要的TCP端口即可,能拦掉绝大多数UDP反射放大攻击,这类攻击流量通常很大,但都是UDP协议的,封完UDP端口之后这类攻击直接打不进来。

进阶的端口防护手段能进一步降低被攻击的风险。第一件事是修改默认端口,不要用大家都知道的7000做登录端口,改成10000到65535之间的随机端口,游戏主端口也对应修改,修改之后记得同步更新登录器列表里的端口配置,玩家登录不会受影响,但攻击者扫默认端口的时候就扫不到你的业务端口了,至少能避开90%的随机扫描。第二件事是做端口映射,业务服务器不直接暴露公网IP,前面挂一层高防节点,把高防节点的端口映射到内网业务服务器的真实端口,攻击者看到的是高防节点的IP,打不到真实服务器,被攻击的时候直接切换高防节点就行,不用迁移业务数据。第三件事是配置IP白名单,管理端口、数据库端口、内网服务端口全部设置白名单,只有白名单内的IP能访问,其他IP连端口都碰不到,从根源上杜绝针对这些端口的攻击,哪怕远程端口用了弱密码,不在白名单里的IP根本连不上端口,也没法爆破。第四件事是封禁海外IP段,如果你服务的玩家都在国内,直接把所有海外IP段全部加入防火墙黑名单,海外的扫描器和肉鸡流量占了日常攻击流量的七成以上,封完之后日志里的异常连接会少一大半,服务器带宽占用都会明显下降。

日常维护要定期做端口审计,每新加一个服务就要确认端口是否有必要开放,服务下线之后第一时间关闭对应的端口,不要留开放的闲置端口。很多时候装个配套工具默认就开了端口,自己没注意就给攻击者留了入口。每天看防火墙的拦截日志,统计连接频率最高的IP,发现同一个IP反复连接不同端口、或者短时间大量发起连接的,手动加入永久黑名单。每周用端口扫描工具扫一遍自己的公网IP,确认没有不该开放的端口暴露在外,有时候系统更新或者重启会重置部分防火墙规则,定期扫一遍能及时发现问题。系统补丁要及时打,尤其是涉及远程服务、端口解析的漏洞,很多攻击不是端口没封,而是端口对应的服务有漏洞,补丁打上之后哪怕端口开着也没那么容易被打穿。业务高峰期之前提前检查防火墙规则是否生效,避免规则被意外清空导致端口全开放,遇到大规模攻击的时候先临时拉白名单,只放行已知的玩家IP段,等流量降下来再逐步放开,不要硬扛。如果服务器上装了网站或者其他web服务,一定要把web服务的端口和游戏业务端口分开,web服务漏洞多,很容易被拿webshell,一旦web端口被入侵,攻击者在内网就能访问到数据库和游戏服务端口,防护等于白做,最好把web服务和游戏服务分开装在不同的服务器上,内网也不互通。

端口封禁不是一劳永逸的事,也不能防住所有攻击,但它是所有防护的基础。不做端口管控,哪怕买了高防、装了防护软件,服务器也像到处漏风的房子,攻击者随便找个没封的端口就能打进来。把端口最小化开放、权限按最小范围分配、异常连接及时拦截,绝大多数中小规模的攻击根本碰不到业务层,服务器运行的稳定性会提升非常多。