一键加固——BAT脚本批量封堵Windows高危端口实战

张开发
2026/4/21 14:32:58 15 分钟阅读

分享文章

一键加固——BAT脚本批量封堵Windows高危端口实战
1. 为什么需要批量关闭Windows高危端口每次看到新闻里报道某公司因为系统漏洞被黑客入侵数据泄露造成重大损失我都会下意识检查自己电脑的端口开放情况。你可能不知道Windows系统默认开放的一些端口比如135、139、445这些简直就是给黑客开的后门。去年有个朋友的公司内网中了勒索病毒溯源发现就是通过445端口进来的。手动关闭这些端口也不是不行但操作起来特别麻烦。首先得记住一长串命令然后逐个执行稍不留神就可能输错参数。更头疼的是每次重装系统或者换电脑又得重新来一遍。这就是为什么我们需要一个一键加固的解决方案——把复杂的操作打包成BAT脚本点一下就能自动完成所有高危端口的封堵。2. BAT脚本工作原理详解2.1 认识netsh ipsec命令这个脚本的核心是Windows自带的netsh ipsec命令组它就像系统的网络保镖。我刚开始接触时也觉得这些命令很神秘后来拆解后发现其实逻辑很清晰add policy创建安全策略相当于建立一个新的安保方案add filterlist创建过滤列表相当于列出需要检查的证件类型add filter添加具体规则相当于说持XX证件的一律不放行add filteraction定义处理动作抓到可疑分子后是劝返还是拘留add rule把所有设置打包成一条完整规则2.2 脚本逐行解析让我们拆解原始脚本的关键部分netsh ipsec static add policy nameqianye这行创建了一个名为qianye的安全策略相当于新建了一个安保方案。名字可以自定义我习惯用PortBlocker这样见名知意的标识。netsh ipsec static add filterlist nameFilter1建立名为Filter1的过滤列表后续所有端口规则都会放在这个列表里。就像安检时先把所有禁止携带的物品清单列出来。netsh ipsec static add filter filterlistFilter1 srcaddrany dstaddrme dstport135 protocolTCP这是最核心的过滤规则意思是对任何来源IPsrcaddrany访问本机dstaddrme135端口的TCP请求全部拦截。dstport参数就是我们要封堵的端口号。3. 增强版脚本实战3.1 基础脚本优化原始脚本已经能用但经过多次实践我做了这些改进增加状态提示在每个端口关闭操作前添加echo提示执行过程一目了然错误处理用if errorlevel检查命令是否执行成功日志记录关键操作结果重定向到日志文件改进后的脚本片段echo [%time%] 开始执行端口加固 port_block.log netsh ipsec static add policy nameSecurePorts if %errorlevel% neq 0 ( echo 策略创建失败请检查权限 port_block.log exit /b 1 )3.2 支持自定义端口列表不同环境需要关闭的端口可能不同我增加了从配置文件读取的功能新建ports.txt配置文件# 需要关闭的端口列表 135,TCP 135,UDP 445,TCP 3389,TCP脚本自动读取并处理for /f tokens1,2 delims, %%i in (ports.txt) do ( if not %%i# ( echo 正在关闭 %%i/%%j 端口... netsh ipsec static add filter filterlistFilter1 dstport%%i protocol%%j ) )4. 部署与验证指南4.1 脚本执行方法很多新手第一次运行BAT脚本时会遇到问题这里强调几个关键点管理员权限右键选择以管理员身份运行执行目录脚本和ports.txt要放在同一目录防病毒软件部分安全软件会拦截需要临时禁用实测发现在Windows 10/11和Server 2016上运行最稳定。有次在Server 2008上执行时报错后来发现需要先安装IPSec服务。4.2 效果验证技巧执行完脚本别急着关窗口我教你几种验证方法本地测试telnet 127.0.0.1 445如果显示无法打开连接说明端口已关闭网络扫描 使用Advanced Port Scanner等工具从另一台电脑扫描策略检查netsh ipsec static show all这个命令会列出所有IPSec策略确认我们的规则已生效5. 常见问题排查5.1 脚本执行报错处理有读者反馈执行时报参数错误通常是这些原因策略已存在先用delete policy删除旧策略端口格式错误检查ports.txt中是否有空行或错误协议类型特殊端口限制如80端口需要先停止IIS服务我的调试建议是在脚本开头加echo on显示详细执行过程每步操作后添加timeout /t 2给系统处理时间5.2 与其他防火墙的冲突如果同时使用第三方防火墙如360、火绒可能会遇到规则被覆盖在防火墙设置中将我们的策略设为最高优先级端口仍可访问暂时关闭其他防火墙测试是否是冲突导致网络异常某些VPN软件会修改IPSec规则需要调整配置遇到最棘手的情况是某次在域控服务器上执行后域认证出现问题。后来发现是封堵了Kerberos用的88端口所以提醒大家修改前一定要确认端口用途。6. 进阶应用场景6.1 域环境批量部署在企业环境中可以通过组策略批量下发这个脚本。具体步骤将脚本保存到网络共享目录创建GPO策略在计算机配置→策略→Windows设置→脚本中添加启动脚本设置适当的权限和网络访问控制注意要先在测试环境验证有次我直接在生产环境部署导致大量打印机连接中断就是因为没考虑打印机服务器使用的端口。6.2 定期自动更新安全不是一劳永逸的我建立了这样的维护机制每周自动从内网服务器下载最新的ports.txt通过任务计划程序设置每月1号凌晨执行更新脚本开头先删除旧策略再创建新的对应的任务计划创建命令schtasks /create /tn PortUpdate /tr C:\Scripts\port_block.bat /sc monthly /d 1 /st 03:007. 安全注意事项虽然这个脚本很实用但也要注意不要盲目关闭所有端口先确认业务需求比如远程办公可能需要保留3389备份原始配置执行前运行netsh ipsec static exportpolicy C:\bak.ipsec网络设备配合在路由器/防火墙上也做相应限制实现纵深防御有次我关闭了某台服务器的135-139端口后文件共享功能完全失效。后来才知道这些端口是NetBIOS必需的所以现在执行前都会先用netstat -ano查看实际使用的端口。8. 脚本优化方向经过多个项目的实践我总结出这些优化思路图形化界面用PowerShell封装成带进度条的窗口程序端口例外机制支持白名单配置如允许特定IP访问3389状态监控实时显示被封端口的访问尝试记录邮件通知当检测到异常访问时自动发送告警一个典型的白名单添加示例netsh ipsec static add filter filterlistFilter1 srcaddr192.168.1.100 dstaddrme dstport3389 protocolTCP mirroredyes这样192.168.1.100这台管理机就能正常使用远程桌面了。

更多文章