本文屬於一篇內部規范文檔,整理的初衷是為了規范、統一集團的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 .