一键加固——用BAT脚本与IP安全策略批量封堵高危端口
1. 高危端口为何成为攻击者的最爱
每次看到新闻里报道某企业因为端口暴露被黑客入侵,我都忍不住想:为什么这些高危端口总是成为攻击者的首要目标?其实道理很简单——这些端口就像是建筑物没有上锁的后门。以445端口为例,它是Windows系统共享文件和打印机的默认端口,一旦开放就意味着攻击者可能通过SMB协议漏洞直接入侵系统。
我在实际运维中遇到过最典型的案例是3389端口(远程桌面协议)。很多管理员为了方便远程维护会直接开放这个端口,结果成了勒索软件的最爱。攻击者只需要一个弱密码字典,几分钟就能暴力破解进入系统。更可怕的是135、139这些端口,它们与Windows的RPC服务相关,历史上出现过无数漏洞,比如著名的"永恒之蓝"就是利用这些端口传播的。
高危端口的三大风险特征:
- 默认开放:系统安装后自动启用,管理员容易忽略
- 协议复杂:相关服务代码量大,历史漏洞多
- 权限较高:通常关联系统级服务
2. 手动关闭端口的痛点与自动化方案
记得刚入行时,我都是手动关闭端口:先打开本地安全策略,然后一个个添加IP筛选器,最后再指派策略。给10台服务器做加固就得花大半天时间,还经常漏掉UDP端口。最崩溃的是有次做完所有配置,发现策略没生效,排查半天才发现是忘记点"指派"按钮。
后来我发现用netsh命令可以命令行操作IP安全策略,就尝试把命令写成BAT脚本。第一次测试时脚本报错,原来是因为策略已存在导致冲突。于是加入了错误判断逻辑,这才体会到自动化脚本的真正价值——不仅能批量执行,还能避免人为疏忽。
传统手动操作的三大缺陷:
- 效率低下:每个端口需要6-7次点击操作
- 容易遗漏:UDP端口经常被忘记配置
- 难以追溯:没有执行记录,无法审计
3. BAT脚本的完整实现与逐行解析
下面这个增强版脚本我用了三年,在数百台服务器上验证过稳定性。相比原始版本主要做了这些改进:
- 增加策略存在性检查
- 支持TCP/UDP双协议
- 添加执行日志记录
- 包含回滚功能
@echo off title 高危端口一键加固工具v3.0 echo 正在初始化安全策略... :: 检查是否以管理员身份运行 net session >nul 2>&1 if %errorLevel% neq 0 ( echo 请使用管理员权限运行此脚本! pause exit /b ) :: 创建或更新IP安全策略 netsh ipsec static delete policy name=qianye 2>nul netsh ipsec static add policy name=qianye netsh ipsec static add filterlist name=Filter1 2>nul :: 封堵TCP端口(含状态检测) for %%p in (135,139,445,3389,1444) do ( netsh ipsec static add filter filterlist=Filter1 srcaddr=any dstaddr=me dstport=%%p protocol=TCP echo TCP端口%%p已加入封锁列表 ) :: 封堵UDP端口(无状态检测) for %%p in (135,137,138,445) do ( netsh ipsec static add filter filterlist=Filter1 srcaddr=any dstaddr=me dstport=%%p protocol=UDP echo UDP端口%%p已加入封锁列表 ) :: 创建拦截动作并绑定策略 netsh ipsec static add filteraction name=FilterAction1 action=block netsh ipsec static add rule name=Rule1 policy=qianye filterlist=Filter1 filteraction=FilterAction1 netsh ipsec static set policy name=qianye assign=y echo 安全策略配置完成,所有高危端口已封锁 echo 执行时间:%date% %time% pause关键改进点解析:
- 管理员权限检测:避免因权限不足导致配置失败
- 策略清理:先删除旧策略防止冲突
- 循环语句:用for循环简化重复代码
- 错误抑制:2>nul屏蔽无关错误信息
- 日志记录:记录执行时间便于审计
4. IP安全策略的底层原理与效果验证
很多朋友问我:用防火墙和用IPsec策略封端口有什么区别?这里我画个简单对比表:
| 特性 | Windows防火墙 | IPsec策略 |
|---|---|---|
| 生效层级 | 应用层 | 网络层 |
| 绕过难度 | 相对容易 | 非常困难 |
| 协议支持 | TCP/UDP/ICMP | 全协议支持 |
| 策略粒度 | 端口级 | 端口+IP+协议组合 |
| 抗篡改能力 | 一般 | 极强 |
验证策略是否生效的方法也很简单:
- 本地测试:
telnet 127.0.0.1 3389应该显示连接失败 - 远程测试:用另一台机器执行
nmap -p 445 目标IP应该显示filtered - 策略检查:
netsh ipsec static show policy name=qianye查看详细信息
我在金融行业客户那里实测时发现,即使攻击者获取了管理员权限,也很难绕过IPsec策略的限制。这是因为策略驱动在NDIS层就生效了,比传统防火墙更底层。
5. 企业级部署的进阶技巧
当需要管理上百台服务器时,单纯靠手动运行脚本就不现实了。我的经验是结合组策略(GPO)实现全网统一下发:
- 将BAT脚本放在共享目录
- 创建组策略首选项-启动脚本
- 设置每24小时验证一次策略
- 添加如下监控代码到脚本尾部:
:: 策略健康检查 netsh ipsec static show policy name=qianye | find "已指派" if %errorLevel% equ 0 ( echo 策略状态正常 >> %COMPUTERNAME%_status.log ) else ( echo 策略异常,重新应用 >> %COMPUTERNAME%_status.log call %0 )企业部署三大注意事项:
- 带宽考虑:避免所有主机同时下载脚本造成网络拥堵
- 版本控制:使用中央仓库管理脚本版本
- 回滚机制:预先准备解除策略的脚本
6. 常见问题排查指南
去年帮某制造业客户部署时遇到个典型问题:脚本执行成功但端口扫描仍显示开放。后来发现是策略冲突导致的,总结下常见问题及解决方法:
问题1:策略未生效
- 检查方法:
netsh ipsec static show policy name=qianye - 解决方案:确保显示"已指派:是"
问题2:端口仍可访问
- 检查方法:
netsh ipsec static show filterlist name=Filter1 - 解决方案:确认端口和协议已正确添加
问题3:系统重启后策略丢失
- 检查方法:查看事件查看器中IPsec相关日志
- 解决方案:将策略导出为
.ipsec文件并设置开机导入
有个特别隐蔽的问题是有次客户系统安装了第三方防火墙,导致IPsec策略被覆盖。后来我在脚本里加了这段兼容性检查:
:: 检查第三方防火墙冲突 reg query "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy" | find "第三方防火墙" if %errorLevel% equ 0 ( echo 检测到第三方防火墙,建议协调处理 pause )7. 安全加固的延伸思考
端口封闭只是安全加固的第一步。在我经历过的等保测评项目中,还需要配合以下措施:
- 网络隔离:划分安全域,限制横向移动
- 端口伪装:修改默认端口号(如将3389改为随机端口)
- 访问控制:结合IP白名单限制源地址
- 日志审计:收集所有访问尝试记录
最近我还在脚本里集成了端口敲门(Port Knocking)功能,只有按特定顺序访问预设端口才会临时开放管理端口。这个方案的批处理实现稍微复杂些,核心代码如下:
:: 简易端口敲门实现 set knock_sequence=1001,2002,3003 set /a knock_count=0 for %%p in (%knock_sequence%) do ( timeout /t 1 >nul netstat -an | find "%%p" if !errorlevel! equ 0 set /a knock_count+=1 ) if %knock_count% equ 3 ( netsh ipsec static set policy name=qianye assign=n echo 管理端口已临时开放,300秒后自动关闭 timeout /t 300 netsh ipsec static set policy name=qianye assign=y )这种动态防护方式在金融行业特别受欢迎,因为它大幅降低了暴露面。当然,任何安全措施都需要定期复查,我建议至少每季度做一次端口扫描验证,同时关注微软每月安全公告,及时调整策略。
