本文属于一篇内部规范文档,整理的初衷是为了规范、统一集团的Windows服务器(仅仅SQL Server数据库服务器)防火墙设置,仅仅供内部其它同事设置Windows防火墙时作为参考的文档资料。如有不足,敬请指正。后续将不断完善、整理该文档。文档里面部分内容直接摘抄自MSDN,敬请知晓!
文档类型 |
Windows服务器防火墙配置规范 |
创建日期 |
2017-02-06 |
版本变化 |
V1.0 |
|
|
修改记录
修改人 |
修改日期 |
版本 |
修改描述 |
孔令波 |
2017-02-06 |
V1.0 |
创建制定文档 |
注意事项:Windows服务器防火墙必须开启,不能因为繁琐或图省事直接关闭防火墙。
、
SQL Server组件使用的端口
数据库引擎使用的端口
应用场景 |
端口 |
注释 |
SQL Server 默认实例 |
TCP端口 1433 |
这是允许通过防火墙的最常用端口。 它适用于与默认数据库引擎安装或作为计算机上唯一运行实例的命名实例之间的例行连接。 (命名实例具有特殊的注意事项。 请参阅本主题后面的动态端口。) |
SQL Server 命名实例 |
此TCP端口是在启动数据库引擎时确定的动态端口。 |
请参阅下面 动态端口部分中的描述。 当使用命名实例时, SQL Server Browser 服务可能需要 UDP 端口 1434。 |
SQL Server 命名实例 |
由管理员配置的端口号。 |
请参阅下面 动态端口部分中的描述。 |
专用管理连接 |
对于默认实例,为 TCP 端口 1434。 其他端口用于命名实例。 有关端口号,请查看错误日志。 |
默认情况下,不会启用与专用管理员连接 (DAC) 的远程连接。 若要启用远程 DAC,请使用外围应用配置器方面。 有关详细信息,请参阅 Surface Area Configuration。 |
SQL Server Browser 服务 |
UDP 端口 1434 |
SQL Server Browser 服务用于侦听指向命名实例的传入连接,并为客户端提供与此命名实例对应的 TCP 端口号。 通常,只要使用 SQL Server 的命名实例,就会启动数据库引擎Browser服务。 如果客户端配置为连接到命名实例的特定端口,则不必启动 SQL Server Browser 服务。 |
SQL Server 实例。 |
可以在创建 HTTP 端点时指定。 对于 CLEAR_PORT 通信,默认端口为 TCP 端口 80,对于 SSL_PORT 通信,默认端口为 443。 |
用于通过 URL 实现的 HTTP 连接。 |
SQL Server 默认实例。 |
TCP 端口 443 |
用于通过 URL 实现的 HTTPS 连接。 HTTPS 是使用安全套接字层 (SSL) 的 HTTP 连接。 |
Service Broker |
TCP 端口 4022。 若要验证使用的端口,请执行下面的查询: |
对于 SQL ServerService Broker,没有默认端口,不过这是联机丛书示例中使用的常规配置。 |
数据库镜像 |
管理员选择的端口。 若要确定此端口,请执行以下查询: |
对于数据库镜像,没有默认端口,不过联机丛书示例使用 TCP 端口 7022。 务必避免中断正在使用的镜像端点,尤其是处于带有自动故障转移功能的高安全模式下时。 防火墙配置必须避免破坏仲裁。 有关详细信息,请参阅指定服务器网络地址(数据库镜像)。 |
复制 |
与 SQL Server 的复制连接使用典型的常规数据库引擎端口(供默认实例使用的 TCP 端口 1433 等) |
对于通过 HTTP 进行的同步,复制使用 IIS 端点(其端口可配置,但默认情况下为端口 80),不过 IIS 进程通过标准端口(对于默认实例为 1433)连接到后端 SQL Server。 |
Transact-SQL 调试器 |
TCP 端口 135 |
如果使用 Visual Studio,则在 Visual Studio 主机计算机上,还必须将 Devenv.exe 添加到“例外”列表中并打开 TCP 端口 135。 |
Analysis Services 使用的端口
下表列出了 Analysis Services经常使用的端口。
功能 |
端口 |
注释 |
Analysis Services |
对于默认实例,为 TCP 端口 2383。 |
默认 Analysis Services实例的标准端口。 |
SQL Server Browser 服务 |
仅 Analysis Services 命名实例需要的 TCP 端口 2382 |
客户端向 Analysis Services 命名实例发出不指定端口号的连接请求时,该连接请求将被转到端口 2382,即 SQL Server Browser 侦听的端口。 SQL Server Browser 将此请求重定向到该命名实例所使用的端口。 |
Analysis Services 配置为通过 IIS/HTTP 使用 |
TCP 端口 80 |
用于通过 URL 实现的 HTTP 连接。 |
Analysis Services 配置为通过 IIS/HTTPS 使用 |
TCP 端口 443 |
用于通过 URL 实现的 HTTPS 连接。 HTTPS 是使用安全套接字层 (SSL) 的 HTTP 连接。 |
Reporting Services 使用的端口
下表列出了 Reporting Services经常使用的端口。
功能 |
端口 |
注释 |
Reporting Services Web 服务 |
TCP 端口 80 |
用于通过 URL 实现的与 Reporting Services 之间的 HTTP 连接。 建议不要使用预配置规则万维网服务(HTTP)。 有关详细信息,请参阅下面的 与其他防火墙规则的交互 部分。 |
Reporting Services 配置为通过 HTTPS 使用 |
TCP 端口 443 |
用于通过 URL 实现的 HTTPS 连接。 HTTPS 是使用安全套接字层 (SSL) 的 HTTP 连接。 建议不要使用预配置规则“安全万维网服务(HTTPS)”。 有关详细信息,请参阅下面的 与其他防火墙规则的交互 部分。 |
Integration Services 使用的端口
下表列出了 Integration Services 服务经常使用的端口。
功能 |
端口 |
注释 |
Microsoft 远程过程调用 (MS RPC) |
TCP 端口 135 |
Integration Services 服务在端口 135 上使用 DCOM。 服务控制管理器使用端口 135 执行诸如启动和停止 Integration Services 服务以及将控制请求传送到正在运行的服务等任务。 此端口号无法更改。 |
如何配置Windows Firewall
Windows Server 2003服务器
Windows Server 2003的防火墙设置比较简单,下面简要列一下配置步骤:
1:在“开始菜单”上,选择“控制面板”,打开Windows防火墙(或者在运行窗口使用firewall.cpl命令打开Windows防火墙)。
2:在Exception下,选择添加端口(Add Port)
在Add a Port里面,添加对应的TCP端口号,如下所示,如果你需要限制某些IP段才能访问数据库,可以在“Chnage scope"里面根据实际需要进行配置。
另外,如果需要开放UDP端口,可以新建一个命名为Customer Defined Port--SQL Server Udp Port的规则(Exception)。步骤基本上一致,在此略过。
Windows Server 2008/2012服务器
注意:Windows Server 2008R2 与2012服务器的防火墙设置基本上一致,在此不做重复介绍。只介绍Windows Server 2012,请知晓!
1:在“开始”菜单上,单击“运行”,键入 WF.msc,然后单击“确定”,打开“高级安全Windows防火墙”,当然你可以从“控制面板”,打开Windows防火墙(运行里面使用firewall.cpl命令打开Windows防火墙),然后从菜单进入“高级安全Windows防火墙”
2:在入站规则右键点击“新建规则”,然后安装下面步骤逐一操作即可,当然有些地方根据实际需求配置
3:在"规则类型(Rule Type)"下,选择“端口(Port)”选项。
4:在“协议和端口(Protocol and Ports)",选择 TCP。 选择“特定本地端口”,然后键入数据库引擎实例的端口号,例如默认实例的端口号 1433或1434。 这里具体根据实际需要定制,如上所示,有可能还需要开通其它TCP端口号或UDP端口号(UDP端口,一般新建一个命名为Customer Defined Port--SQL Server Udp Port的规则)。 单击“下一步”。
5:在“操作(Action)”对话框中,选择“允许连接”,然后单击“下一步”。
6:在“配置文件”里面选择在什么时候应用该规则,例如域(Domain)、专用(Private)、公用(Public)。 全部勾选。
7:在名称(Name)里面填入Customer Defined Port--SQL Server Tcp Port , 这个名称Customer Defined Port表示自定义端口,SQL Server Tcp Port表示与SQL Server相关的Tcp 端口号。
8:完成后,如果你要限制某些IP才能访问这些端口,可以找到新建的规则“Customer Defined Port--SQL Server Tcp Port”,右键单击属性,在Scop里面设置。如下所示
当然也可以在“Rule Type”里面选择定制,左边菜单就会出现“Scope”选项。
方式2:使用Powshell来配置防火墙.
注意: Windows Server 2008 R2下如果Powshell是2.0版本,是无法使用Powshell来配置防火墙的。 我没有测试升级Powshell版本是否支持。下面实验环境为Windows Server 2012。 使用Powshell配置防火墙的效率是远远高于使用图形界面的。
1:开启1433端口
New-NetFirewallRule -DisplayName "Customer Defined Port--SQL Server Tcp Port" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow -Description "This Inbound rule is special for SQL Server"
2:开启1433,1434端口
New-NetFirewallRule -DisplayName "Customer Defined Port--SQL Server Tcp Port" -Direction Inbound -LocalPort 1433,1434 -Protocol TCP -Action Allow -Description "This Inbound rule is special for SQL Server"
当然可以根据实际情况开启相关端口,严禁开启其它不相关端口号,所需端口才开启,另外,使用powshell可以非常方便的管理防火墙,如果你需要查找帮助命令,可以使用下面命令,此处从略。
Get-Command -Noun "*Firewall*" | Select -ExpandProperty Name
PS C:\Users> Get-Command -Noun "*Firewall*" | Select -ExpandProperty Name
Copy-NetFirewallRule
Disable-NetFirewallRule
Enable-NetFirewallRule
Get-NetFirewallAddressFilter
Get-NetFirewallApplicationFilter
Get-NetFirewallInterfaceFilter
Get-NetFirewallInterfaceTypeFilter
Get-NetFirewallPortFilter
Get-NetFirewallProfile
Get-NetFirewallRule
Get-NetFirewallSecurityFilter
Get-NetFirewallServiceFilter
Get-NetFirewallSetting
New-NetFirewallRule
Remove-NetFirewallRule
Rename-NetFirewallRule
Set-NetFirewallAddressFilter
Set-NetFirewallApplicationFilter
Set-NetFirewallInterfaceFilter
Set-NetFirewallInterfaceTypeFilter
Set-NetFirewallPortFilter
Set-NetFirewallProfile
Set-NetFirewallRule
Set-NetFirewallSecurityFilter
Set-NetFirewallServiceFilter
Set-NetFirewallSetting
Show-NetFirewallRule
Add-SqlFirewallRule
Remove-SqlFirewallRule
查看某个命令的具体帮助信息,如下所示:
PS C:\Users> get-help New-NetFirewallRule
NAME
New-NetFirewallRule
SYNTAX
New-NetFirewallRule -DisplayName <string> [-PolicyStore <string>] [-GPOSession <string>] [-Name <string>]
[-Description <string>] [-Group <string>] [-Enabled <Enabled> {True | False}] [-Profile <Profile> {Any | Domain |
Private | Public | NotApplicable}] [-Platform <string[]>] [-Direction <Direction> {Inbound | Outbound}] [-Action
<Action> {NotConfigured | Allow | Block}] [-EdgeTraversalPolicy <EdgeTraversal> {Block | Allow | DeferToUser |
DeferToApp}] [-LooseSourceMapping <bool>] [-LocalOnlyMapping <bool>] [-Owner <string>] [-LocalAddress <string[]>]
[-RemoteAddress <string[]>] [-Protocol <string>] [-LocalPort <string[]>] [-RemotePort <string[]>] [-IcmpType
<string[]>] [-DynamicTarget <DynamicTransport> {Any | ProximityApps | ProximitySharing | WifiDirectPrinting |
WifiDirectDisplay | WifiDirectDevices}] [-Program <string>] [-Package <string>] [-Service <string>]
[-InterfaceAlias <WildcardPattern[]>] [-InterfaceType <InterfaceType> {Any | Wired | Wireless | RemoteAccess}]
[-LocalUser <string>] [-RemoteUser <string>] [-RemoteMachine <string>] [-Authentication <Authentication>
{NotRequired | Required | NoEncap}] [-Encryption <Encryption> {NotRequired | Required | Dynamic}]
[-OverrideBlockRules <bool>] [-CimSession <CimSession[]>] [-ThrottleLimit <int>] [-AsJob] [-WhatIf] [-Confirm]
[<CommonParameters>]
ALIASES
None
REMARKS
Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
-- To download and install Help files for the module that includes this cmdlet, use Update-Help.
方式3:使用netsh来配置防火墙.
netsh 命令也配置防火墙,在此从略。
netsh firewall set portopening protocol = TCP port = 1433 name ='Customer Defined Port--SQL Server Tcp Port' mode = ENABLE scope = SUBNET profile = CURRENT
IMPORTANT: Command executed successfully.
However, "netsh firewall" is deprecated;
use "netsh advfirewall firewall" instead.
For more information on using "netsh advfirewall firewall" commands
instead of "netsh firewall", see KB article 947709
at http://go.microsoft.com/fwlink/?linkid=121488 .