SQL Server 安全篇——降低外围威胁(1)——网络配置
本文属于SQL Server安全专题系列
前面大篇幅介绍了SQL Server及操作系统的安全,现在是时候介绍一下外围主要是网络层面的安全。这部分主要包括网络功能、服务和端点。因为绝大部分的攻击都来自于网络,所以网络层的安全控制某种意义上可以说是最外层的防御。本文先介绍一下网络方面的配置。
网络配置
在介绍之前先要了解一下基础知识,包括端口和协议。这对后续防火墙的管理很有必要。
端口和协议
协议
在网络环境下,网络中的服务器交互时,彼此之间需要了解传输的信息是什么内容。这个工作由网络协议(protocol)来完成,SQL Server可以侦听三种不同的协议:Shared memory(共享内存)、named pipes(命名管道)和TCP/IP。
Shared Memory:仅用于在同一台服务器内的应用程序和数据库引擎实例交互。由于正式环境都不建议把客户端和数据库安装在同一个环境下,所以这种协议极少使用。通常仅用来排查网络连接的故障。
Named Pipes:主要用于局域网环境。在广域网中虽然可用但是性能会大打折扣。
TCP/IP:除非有理由不使用,否则都应该配置SQL Server使用TCP/IP协议。因为不管从安全性还是支持的广泛程度来说,都是其他协议无法比拟的。
端口
端口分为两大类:动态和静态。端口是在操作系统中的一个交互端点,配合网络协议传输信息。SQL Server使用TCP端口和UDP端口,客户端可以通过端口与实例建立连接。
静态端口:端口号总是固定的,即使服务器重启。很多软件都预占了一些端口,如SQL Server(1433)、MySQL(3306)。
动态端口:每次服务重启时重新生成(当然有几率会使用重启前的端口号,不过几率估计非常低)。
介绍完这些非常基础的内容之后,下面从操作中再深入介绍。
配置网络协议
正如很多SQL Server资料上都会提到,对SQL Server的管理,除非不能满足需求,否则都应该使用SQL Server配置管理器来管理。通常情况下我们会使用下面图中所示的部分来管理协议:
注意如果是多实例的环境中,应该分清楚你要控制的是哪个实例。同时提醒一下,对这里的网络协议修改,需要重启数据库引擎服务才能生效,这个在配置完毕之后就会弹出提醒框。
图上可以看到,默认情况下Named Pipes是禁用的,而其他两个是启用状态。双击Shared Memory可以发现它并没有可配置的内容。
双击命名管道可以看到当前的管道名。
下面重点介绍一下TCP/IP:对话框分为两页,第一页是【协议】,包含三个部分,【保持活动状态】(Keep Alive)、【已启用】(Enabled)和【全部侦听】(Listen All)
- 保持活动状态:下面就有解释。
- 全部侦听:标识SQLServer实例是否要侦听所有可用IP地址或者已配置的IP地址子集。
第二页是【IP地址】,可以配置实例侦听的端口。如果使用静态端口(建议操作),则“TCP动态端口”处应该留空。如果【协议】页的“全部侦听”设为【否】,则此处的每个IP地址都要手动配置端口。如果设为【是】,只需要配置IPALL部分即可。
从SQL Server角度,可供配置的网络方面内容主要就是上面这些,下面来演示一下防火墙方面的配置。
SQL Server所需的防火墙配置
防火墙是什么这里就不多说了。它的核心功能就是“放行”跟“阻止”。为了使得外部应用能够与SQL Server通信,需要配置防火墙放行合理的请求。在大型企业环境中,防火墙可能有好几层,如企业外部、企业内部、一套应用(含应用程序与数据库服务器)中等等。同时防火墙也有软硬之分,有专用的硬件防火墙,但是对于DBA来说,通常不需要关注过多。这里主要指数据库服务器本身的防火墙。
下面首先来看看SQLServer跟客户端的交互流程。
客户端与SQLServer交互
如图所示,当使用TCP/IP协议时,客户端可以通过连接字符串中的实例已侦听的特定端口或实例名并使用SQL Browser服务解析实例名的方式直接与命名实例交互。如果使用的是默认实例,可以不用SQL Browser服务直接连接。
当客户端使用命名管道与实例通信时,通讯总使用445端口。这个端口通常用于文件和打印机共享。如果不计划使用命名管道,那么最好禁用文件和打印机共享并在防火墙中阻止445端口降低攻击风险。
SQL Server所需端口
上面说了很多关于端口的问题,那么下面来详细介绍一下SQL Server所需的端口:
为了让SQL Server稳定运行,下面的端口不要随意占用,但是默认1433端口在很多时候应该修改,以防攻击者攻击,这些端口号在防火墙中通过放行和阻止来控制外部与SQL Server的交互。
功能/组件 | 所需端口 |
默认实例 | TCP 1433,可以由DBA修改 |
命名实例 | 动态端口,可由DBA修改 |
默认实例上的DAC(专用管理员链接) | TCP 1434 |
命名实例上的DAC | 动态端口 |
SQL Server Browser 服务 | UDP 1434 |
HTTP端点上的实例 | TCP 80,可由IIS管理员修改 |
HTTPS端点上的实例 | TCP 443,可由IIS管理员修改 |
Service Broker |
没有默认值,通常使用4022. |
数据库镜像 | 没有默认值,通常使用7022,如果多实例服务器,那么端口号通常以加一的形式累加 |
AlwaysOn可用性组 | 没有默认值,但是通常使用镜像的端口号。 |
复制(Replication)中连接实例的部分 | 使用实例的端口号 |
复制中链接Web sync部分 | TPC 80,可由DBA或IIS管理员修改 |
复制FTP | TCP 21,可由DBA修改 |
复制-文件共享 | UDP 137-138,TCP 139,如果需要NetBIOS则TCP 445也需要 |
T-SQL debugger | TCP 135 |
SSAS | TCP 2382,可由DBA修改 |
SQL Server Browser 服务(与命名实例的SSAS搭配) | TCP 2382 |
HTTP上的SSAS | TCP 80,可由IIS管理员修改 |
HTTP上的SSAS PivotTable | TCP 80,可由IIS管理员修改 |
通过HTTP的SSRS Web Service | TCP 80,可由IIS管理员修改 |
通过HTTPS的SSRS Web Service | TCP 443,可以由IIS管理员修改 |
SSIS运行时(runtime) | TCP 135 |
WMI | TCP 135 |
MSDTC | TCP 135 |
IPSec | UDP 500和UDP 5000 |
其他略 | |