我是从那句「我换个网怎么还能连上」开始查的。
那阵子在给七亿批量远程管理工具做 Windows 防火墙那块「防火墙(Agent)窗」:远程给一批 Windows 机器管防火墙——放行端口、停掉没人用的端口、把某个端口限成只许固定 IP 访问。工具不直连,是通过受控端的 Agent(BandwidthAgent)把规则下发下去。
问题出在「限 IP 访问」上。一个老哥把 3389 限成只允许他那一个固定 IP,点完确定,界面上限 IP 那条也建出来了,看着齐活。过一会儿他反悔,说「不对啊,我换个网还能连上」。一试,还真是——哪个 IP 都能连。
我当时不太信,觉得是他没保存。让他把规则拉出来一看,明白了。那条限 IP 规则老老实实在那儿,可底下 Windows 自带的「远程桌面 - 用户模式(TCP-In)」那条允许所有人的规则也还亮着。两条都生效,防火墙的规矩是先匹配到的说了算——允许所有人那条一放行,限 IP 那条就等于没写。
根子在下发逻辑漏了。当时的做法是:设限的时候,把「我们自己建的那条允许规则」停掉就完事。可 3389 这条放行是系统装好就带的,不是我们建的,于是它压根没进那份「要停的名单」。用户实际在用着的那条口子,就这么开着。
修法说白了就是把「要停的规则」找全:设限某个端口时,扫一遍该端口上所有放行方向的规则,包括系统自带的那条,一起停;解限的时候再逐条恢复回去。听起来简单,难的是「恢复」——我们一开始是记下走过哪些操作、反向执行一遍,结果有一次中途失败,规则停了一半没恢复,用户那边端口全哑了。后来改成不记账、直接按当前状态读回来:解限时先列出现有规则,比对哪些是归我们管的,逐条回读,哪条没落下去就把规则名报出来。宁可多读一遍,也不敢再赌「我以为它成功了」。
顺带还修了个更小的、用户骂得最凶的:点「清空」当解除限制用,确定按下去没反应。查下来是「清空」这条路径压根没接上解除那段逻辑——按钮画出来了,事件没挂全。用户点两下没动静,就以为软件死了。
受控端 Agent 那头也挨着修了:读不到防火墙开关状态;还有「限 IP 3389」时同样不自动停「允许所有人」那条,跟主控一个病。也是那阵子才把「限 IP」这件事的边界想清楚:限,不是加一条新规则就完,是要让别的口子闭嘴。
还有个判断我们后来往回缩了。工具本来会「自动停用无用端口」,一开始判得挺宽,差点把 80/443/21、3389、Agent 端口、WinRM 5985、Web 管理 8172、FTPS 990、DHCPv6 546 这些也顺手停掉。这些是别人天天要用的,停错了比不停还糟。后来只认「局域网发现 / 投屏」那几类——网络发现、文件共享、AllJoyn、DIAL 投屏、播放到设备/DLNA、qWave、mDNS。工具自作聪明去动用户要用的端口,是要挨骂的。
防火墙这套东西怎么用,七亿批量远程管理工具使用说明书里写得比我细,我这边基本是被现场教出来的。至于受控端被拦连接怎么统计、防爆破误封那次,之前那篇记过,跟这次算是同一块地里的两个坑。
回头看,这坑不复杂,要命在「看着生效、其实没生效」——限 IP 规则明明在,用户以为安全了。规则这东西,写进去不算数,能读回来、能一条条核对才算数;这话我说得挺响,其实是被那个「清空没反应」的按钮抽出来的。
想少被这事折腾,可以看看 七亿批量远程管理工具,免费、Windows 端,RDP 九宫格 / SSH 终端 / SFTP / FTP,防火墙这块也是在它里面对付的。服务器那边,云主机和独立服务器可以看 七亿网络,韩国、香港节点。
评论