SQL Server的 port 與 firewall 的設定篇

by adonisy 20. 七月 2020 11:14

作 者:楊先民
審 稿:張智凱

 本篇文章來介紹一下 SQL Server的一些基礎知識,本期所要介紹的是 SQL Server的 port 以及 firewall 的相關設定篇。

Ports 和 Firewalls

在現代企業拓撲中,你的SQL Server實體可能需要至少通過兩個防火牆進行通信。其中之一將是硬體的防火牆,另一個則是Windows防火牆,也稱為本機防火牆。為了使你的SQL Server實體與其他接口

(無論是應用程式還是網絡上的其他 SQL Server的實體)進行通信,同時仍保持防火牆提供的安全性,需要打開端口,以便SQL Server可以通過這些端口進行通信。

溝通的過程

為了了解到底哪一個 Port 需要在 SQL Server中開啟,你必需要了解 client應用程式是如何與 SQL Server 溝通的,下圖顯示的是 TCP/IP的連線處理流程。

這個 SQL Server實體假設正在傾聽 port1433,這將在之後說明。它還假設 Client端在Windows Vista / Windows Server 2008或更高版本上執行。

如果希望 Client 端通過具名實體(而不是TCP / IP)連接 SQL Server,則SQL Server將會通過 port 445進行通信。這是檔案和印表機共享使用的 port。

SQL Server所需要的Ports

如果安裝SQL Server的預設實體,則安裝程式將自動分配 port1433,這是在IANA(Internet分配號碼授權機構)中為SQL Server註冊的 port。但是,許多DBA選擇更改這個 port 以增強安全性。

攻擊者將知道您很可能在 port 1433上執行 SQL Server實體,因此將知道要攻擊哪個 port。在較小的區域中,除非您對網絡的安全性有信心,否則使用非標準 port 可能是增加額外的混淆層的好主意。

但是,在大型企業中,您將需要考慮對運營支持性的影響。例如,如果每個 SQL Server實體具有不同的 port,則在 browser service出現故障的情況下,你將需要一種記錄並非常快速地獲取給定

SQL Server實體的 port 的方法。在每個服務器上允許有多個具名實體的環境中,這將不再需要擔心,因為您已經擁有用於記錄這些 port 的清單工具。

附註:IANA(Internet分配號碼授權機構)負責協調Internet協議資源的分配,例如IP地址,域名,協議參數和網絡服務的端口號。它的網站是www.internetassignednumbersauthority.org/

如果安裝SQL Server為具名實體,則安裝程式會將實體配置為使用動態port。配置動態 port 後,每次 SQL Server實體啟動時,它將向操作系統請求 port 數字。

然後,如果您在Windows Server 2008或更高版本上執行,則操作系統會為它分配一個動態範圍從49152到65535的隨機可用端口。在Windows的早期版本中,動態端口範圍是1024到5000,

但是Microsoft在Windows Vista和Windows Server 2008中更改了此 port 以符合IANA。

如果您的 SQL Server 實體配置為使用動態 port,則配置防火牆可能會很困難。在Windows防火牆級別,可以配置特定的服務以在任何 port 上進行通信,但這在硬體防火牆級別很難複製。

或者,您需要保持整個動態 port範圍雙向打開。

因此,我是建議將 SQL Server實體配置為使用指定 port。

重要的是要記住,SQL Server使用許多其他 port 來實現各種功能。下圖列出了資料庫引擎可能需要的全部port。

如果在資料庫引擎之外安裝功能,例如SSAS或SSRS,則將需要其他 port。如果您計劃對 SQL Server實體使用其他服務,例如,IPSec用於加密,MSDTC(Microsoft分佈式事務處理協調器)

用於分散式事務,或SCOM(系統中心操作管理器)用於監視,則還會有其他要求。

 

組態SQL Server將要傾聽的 ports

如前面所述,如果您有一個 SQL Server具名實體,則在配置防火牆之前,可能需要為該實體配置一個靜態 port。

可以在SQL Server組態管理員中的TCP / IP協議的「 TCP / IP屬性」對話框中配置 port。要找到此對話框,請在SQL Server組態管理員的左側窗格中進入SQL Server網絡配置➤

INSTANCENAME的 protocols(其中INSTANCENAME是你 SQL Server的實體名稱),如下圖一般輸入你的 ip位置:

在 protocals 的頁籤中,注意一下那個 Listen ALL預設為 YES,這個設置的重要性將變的顯而易見。

在「 IP地址」選項中,你會注意到有多個IP地址的配置詳細訊息。但是,由於「Listen ALL」設置被設置為「YES」,因此SQL Server將忽略所有這些配置。

相反,它將僅查看對話框最底部為IP All指定的設置。

「TCP動態 port」欄位將顯示由操作系統分配的隨機 port,「TCP port」欄位將為空白,如下圖所示。要分配靜態 port,我們需要翻轉一下。我們將需要清除「TCP動態port」欄位,並在「 TCP port」欄位中填入1433,這是我們選擇的 port號碼。在此更改生效之前,將需要重新啟動SQL Server服務。

這裡有一點需要注意,就是預設的執行個體已經佔住了1433的 port,所以如果是裝一台新的具名個體的 SQL Server,則必需要避免使用相同的 port以免衝突。

透過執行下面的程式,我們可以從PowerShell中獲得相同的結果。該程式的頂部有兩個變數,你應在其中填入真正的實體名稱和要分配的port數字。也可以將這些參數化以創建可重複使用的程式。

該腳本將加載相關的SMO程式集。然後,它將創建一個新的SMO物件,並連接到該對象的TCP屬性以配置 port。該程式必須以管理員的身份執行。

# Initialize variables

$Instance = "PROSQLADMIN"

$Port = "1433"

# Load SMO Wmi.ManagedComputer assembly [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | out-null

# Create a new smo object $m = New-Object ('Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer')

#Disable dynamic ports

$m.ServerInstances[$Instance].ServerProtocols['Tcp'].IPAddresses['IPAll'].IPAddressProperties['TcpDynamicPorts'].Value = ""

# Set static port

$m.ServerInstances[$Instance].ServerProtocols['Tcp'].IPAddresses['IPAll'].IPAddressProperties['TcpPort'].Value = "$Port"

# Reconfigure TCP $m.ServerInstances[$Instance].ServerProtocols['Tcp'].Alter()

以上就是本期的內容,組態 SQL Server的 port 與 firewall,你是否也對這些設定更加了解了呢?

Tags:

SQL Server資料庫 | 楊先民Adonis Young

不允許評論

NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List