Windows服务器安全加固实战:一键批处理脚本关闭高危端口
刚部署完Windows Server的运维人员,往往面临一个棘手问题——如何快速关闭那些容易被黑客利用的高危端口?手动操作不仅耗时费力,还容易遗漏关键步骤。本文将分享一个经过实战检验的批处理脚本解决方案,帮助你在30秒内完成135、445、3389等端口的自动化关闭。
1. 为什么需要关闭这些高危端口?
每次部署新服务器时,安全加固都是首要任务。Windows系统默认开放的某些端口,就像敞开的门窗,给攻击者提供了可乘之机。让我们看看这些端口为何如此危险:
- 135端口:RPC服务端口,历史上多次成为蠕虫病毒(如"冲击波")的攻击目标
- 445端口:SMB协议端口,WannaCry勒索软件就是通过这个端口传播
- 3389端口:远程桌面协议(RDP)端口,暴力破解的高频目标
- 137-139端口:NetBIOS相关端口,可能泄露系统信息
去年某中型企业的数据库服务器被入侵,事后分析发现攻击者正是通过未关闭的445端口植入恶意软件。这种案例在中小企业中屡见不鲜,而预防措施其实很简单。
2. 批处理脚本 vs 图形界面:效率对决
手动通过Windows防火墙关闭端口需要至少15个步骤:
- 打开"高级安全Windows防火墙"
- 选择"入站规则"
- 点击"新建规则"
- 选择"端口"选项
- 指定TCP协议
- 输入单个端口号
- 选择"阻止连接"
- 配置应用场景
- 命名规则
- 对每个端口重复上述操作
相比之下,批处理脚本只需双击运行,整个过程不到30秒。更重要的是,脚本可以确保配置的一致性,避免人为疏忽。
@echo off title Windows服务器高危端口关闭工具 echo 正在创建IP安全策略... :: 创建IPSec策略 netsh ipsec static add policy name=PortBlockPolicy netsh ipsec static add filterlist name=BlockedPorts :: 添加TCP端口过滤规则 for %%p in (135,136,137,138,139,445,3389,1444) do ( netsh ipsec static add filter filterlist=BlockedPorts srcaddr=any dstaddr=me dstport=%%p protocol=TCP ) :: 添加UDP端口过滤规则 for %%p in (135,136,137,138,139,445,3389,1444) do ( netsh ipsec static add filter filterlist=BlockedPorts srcaddr=any dstaddr=me dstport=%%p protocol=UDP ) :: 应用阻止动作 netsh ipsec static add filteraction name=BlockAction action=block netsh ipsec static add rule name=BlockRule policy=PortBlockPolicy filterlist=BlockedPorts filteraction=BlockAction netsh ipsec static set policy name=PortBlockPolicy assign=y echo 高危端口已成功关闭 echo 按任意键退出... pause >nul3. 脚本深度解析与自定义指南
这个脚本的核心是Windows内置的netsh ipsec命令,它比单纯使用防火墙规则更底层,提供了更强的控制能力。让我们拆解关键部分:
3.1 策略创建与分配
netsh ipsec static add policy name=PortBlockPolicy这行代码创建了一个名为"PortBlockPolicy"的IP安全策略。IPSec策略是Windows网络安全的基石,可以定义复杂的通信规则。
3.2 端口过滤列表
netsh ipsec static add filterlist name=BlockedPorts我们创建了一个过滤器列表,用于集中管理所有要阻止的端口规则。这种模块化设计使得后期维护更加方便。
3.3 自定义端口列表
脚本中使用了for循环来批量处理端口号,这种设计使得自定义变得非常简单。如需添加或删除端口,只需修改这一行:
for %%p in (135,136,137,138,139,445,3389,1444) do (例如,要增加对23(Telnet)和21(FTP)端口的防护:
for %%p in (21,23,135,136,137,138,139,445,3389,1444) do (4. 高级应用场景与注意事项
在实际生产环境中,这个基础脚本还可以进一步优化:
4.1 白名单模式
对于需要严格控制的服务器,可以修改脚本实现"默认拒绝,按需允许"的白名单模式:
:: 只允许特定IP访问3389端口 netsh ipsec static add filter filterlist=AllowedRDP srcaddr=192.168.1.100 dstaddr=me dstport=3389 protocol=TCP netsh ipsec static add filteraction name=PermitAction action=permit netsh ipsec static add rule name=AllowRDP policy=PortBlockPolicy filterlist=AllowedRDP filteraction=PermitAction4.2 日志记录增强
添加日志记录功能,便于事后审计:
:: 启用IPSec日志 netsh ipsec static set config property=ipsecdiagnostics value=7 netsh ipsec static set config property=ipsecloglevel value=74.3 重要注意事项
执行脚本前,请确保已建立其他管理通道(如带外管理),避免锁定自己 生产环境建议先在测试服务器验证脚本效果 定期检查策略是否生效,可使用
netsh ipsec static show all命令
5. 自动化部署方案
对于拥有多台服务器的环境,可以通过以下方式批量部署:
方案一:组策略部署
- 将脚本保存为
secure_ports.bat - 在组策略管理器中创建新策略
- 配置"计算机配置→策略→Windows设置→脚本(启动/关机)"
- 添加启动脚本
方案二:PowerShell远程执行
$servers = "server1","server2","server3" foreach ($server in $servers) { Copy-Item .\secure_ports.bat \\$server\c$\scripts\ Invoke-Command -ComputerName $server -ScriptBlock { Start-Process cmd.exe -ArgumentList "/c c:\scripts\secure_ports.bat" } }方案对比表
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 组策略 | 域环境 | 集中管理,自动应用 | 需要域控制器 |
| PowerShell | 少量服务器 | 灵活,无需域 | 需手动维护服务器列表 |
| 手动运行 | 单台服务器 | 简单直接 | 不适用于批量操作 |
在最近为某客户部署的50台服务器环境中,我们采用组策略方案,仅用2小时就完成了全部服务器的端口加固,效率是手动操作的30倍以上。