SQL Server Browser 与 1434 端口
1434 是 SQL Server Browser 服务的端口(UDP)。命名实例默认使用动态端口,客户端要连接时先向 Browser 查询实例名对应的实际端口,再前往该端口建立数据库连接;默认实例则固定使用 1433,不需要这一步。Browser 还会响应实例信息查询,因此它可以被用来枚举目标上有哪些实例与版本。没有命名实例的环境可以直接停用该服务并封禁端口,以缩小暴露面。
基本信息
| 服务 | SQL Server Browser |
|---|---|
| 协议 | UDP(部分早期文档也提到 TCP) |
| 用途 | 枚举实例名并返回命名实例的动态端口 |
| 相关端口 | 默认实例 1433,命名实例为动态端口 |
| 管理入口 | Windows 服务管理器或配置管理器 |
| 安全等级 | 仅限内网 |
典型使用场景
- 命名实例环境:应用按实例名连接,需要 Browser 解析端口
- 多实例同机部署:不同业务使用不同实例,客户端连接串写实例名
- 客户端排障:确认实例是否已被正确发现
- 资产盘点:核对目标上运行的实例清单
- 安全评估:确认实例枚举是否对非管理网段开放
确认服务与监听状态
确认服务与监听状态
Get-Service SQLBrowser | Select-Object Name,Status,StartType # 服务是否运行
netstat -ano | findstr :1434 # 确认 UDP 监听
Get-Service MSSQL* | Select-Object Name,Status # 实例服务清单
# 连接链路验证(命名实例)
sqlcmd -S tcp:sql01.example.com\SQLEXPRESS -U appuser -P '<口令>' -Q 'SELECT DB_NAME()'端口组合的利弊
| 组合 | 结果 |
|---|---|
| 1433 开放,1434 关闭 | 默认实例可连,命名实例无法被发现 |
| 1433 关闭,1434 开放 | 实例信息可被枚举,等于泄露资产清单 |
| 两者全关,客户端直连固定端口 | 暴露面最小,适合客户端明确的环境 |
替代方案:固定端口并停用 Browser
替代方案:固定端口并停用 Browser
1) 在配置管理器中为命名实例固定 TCP 端口(例如 1444)
2) 客户端连接串直接写 主机,1444,不再依赖自动发现
3) 确认无其他命名实例依赖后,停用 SQL Server Browser 服务
4) 防火墙只放行固定端口,收敛 1434 的实例枚举面只关 1433 不关 1434 并不能隐藏资产:实例名与端口仍可被枚举出来,攻击者据此可直接连接命名实例。
只放行 1433 而漏放 1434,是命名实例连接失败的典型原因;排查时先用服务状态与监听检查确认 Browser 是否可用,再核对防火墙是否放行 UDP 1434。
固定端口不只是为了安全:它让防火墙规则与客户端配置都变得确定,减少动态端口带来的联调成本,适合客户端范围明确的系统。