Hyper-V中的訪問控制列表

微軟在Windows Server 2012中對虛擬交換機做了很多的改進和增強,其中不但增加了諸如RSS、dVMQ、端口映射以及支持PVLAN等技術,還提供了非常實用的訪問控制列表(ACL)功能。

在Technet中可以查看到Windows Server 2012中對於ACL的稱謂叫做Port Access Control Lists,它是基於源/目的地址、方向和動作(允許/拒絕)來進行規則篩選的:

Local or Remote Address Direction Action

12-34-56-78-9A-BC

Inbound

Allow

12-34-56-78-9A-BC

Outbound

Allow

FF-FF-FF-FF-FF-FF

Inbound

Allow

Any

Inbound

Deny

Any

Outbound

Deny

通過上面的列表可以看到在2012的ACL功能當中是支持IP與MAC地址的,並且像“Any”這類通配指令也是支持的,所以對於熟悉主流網絡設備的童鞋來講不需要適應過程,可謂是極易於上手的。

那麼在Windows Server 2012R2中,ACL功能又得到了加強,被稱爲“Extended Port Access Control Lists”即擴展端口訪問控制列表,不難看出這就好比網絡設備上的標準ACL與擴展ACL一樣,後者在原有基礎上增加支持源/目的端口、協議、權重等,下面就實際演示一下Windows Server操作系統中的ACL功能:

##########################################################################################

演示環境:

主機:Windows 8.1

虛擬機:Windows Server 2008R2 SP1 Standard


因爲ACL功能對操作系統版本沒有過分的要求,它是屬於Hypervisor層的技術,所以我就用自己的筆記本電腦(Windows8.1)啓用Hyper-V功能即可,如下圖所示我準備了兩臺測試虛機,一臺叫做SQL2008R2(運行SQL2008R2),另一臺叫做WIN2008R2(運行IIS7)

wKioL1PoUQWhUS0hAAQVRxhB51c046.jpg

在開始配置ACL之前,我把兩臺虛擬機的防火牆都關閉,其中SQL2008R2的IP爲192.168.10.12,它是能夠PING通WIN2008R2(192.168.10.11)的,如下圖:

wKiom1PoTAXiDjjxAAW8WK0iTyE706.jpg

此外可以看到SQL2008R2這臺虛機當前TCP 1433端口處於監聽狀態

wKioL1PoTR6AfvRNAAVn-AWem-8863.jpg

回到WIN2008R2這臺機器上,此時也是能夠PING通192.168.10.12(SQL2008R2)的

wKiom1PoTAaRWkm0AAUIkF33l80512.jpg

並且已經安裝了Web Server角色,本機默認站點可以正常訪問,而且可以telnet到SQL2008R2的1433端口

wKioL1PoTR-BxQVYAAR3JtrXySE907.jpg

##########################################################################################

測試環境準備好之後,來看一下主機上的PowerShell,主要篩選一下Hyper-V Module下的ACL相關命令,可以看到本文前面提到過的“標準ACL”與“擴展ACL”,如下圖:

wKiom1PoTAazraHQAAMIlhQQ8cg664.jpg

接着就來試一下標準ACL的效果,實用下面的命令對虛機WIN2008R2配置一條ACL,針對目的地址192.168.10.12的出方向進行Deny操作。

wKioL1PoTSDAtb97AAGF6Q2N5Vw476.jpg

配置生效後可以通過Get命令查詢已存在的ACL,如下圖所示:

wKiom1PoTAey9XV7AAKdBPlha0w993.jpg

此時回到WIN2008R2再去PING SQL2008R2時已經不可達了。

wKioL1PoTSCTmksKAAPRnCJ65dc404.jpg

接着刪掉剛剛生效的ACL

wKiom1PoTAfz5ta_AANrIqDB8VU689.jpg

再去WIN2008R2重新PING SQL2008R2,通信又恢復正常了。

wKioL1PoTSCAT2GiAATmhNyFif8748.jpg

此外除了IP意外,還可以使用MAC地址作爲篩選條件,如下圖所示,還是對於WIN2008R2這臺虛機,使用MAC地址並拒絕入方向流量。

wKiom1PoTAjQ2J4OAAPpDKWm6Xg930.jpg

來到SQL2008R2上去PING WIN2008R2可以看到ACL生效了。

wKiom1PoTAiAFG2MAAQVtxhuQl8579.jpg

##########################################################################################

上面的演示主要是針對Windows Server 2012中的“標準ACL”進行的操作,而在R2當中,“擴展ACL”又分爲兩類,在Technet中對此介紹爲Detailed ACL rules以及Stateful ACL rules;那麼它們有什麼區別呢?衆所周知,在很多會話類的通信中,我們需要對於進出方向都做規定纔可以保證鏈接通暢,舉個例子,某臺客戶端電腦要訪問外網的一臺Web Server,那麼爲了安全考慮,管理員首先要permit這臺客戶端電腦出方向的請求,比如允許它訪問外網80端口的tcp協議,那麼當Web Server收到訪問請求後,需要返回給客戶端電腦相應的數據包,此時就需要管理員permit客戶端本地端口的入方向請求。OK,入方向請求沒問題,關鍵是本地端口是多少?開啓1024~5000端口?別鬧。。。。


到這一步就會發現即便是擴展ACL也不太好實現我們的需求,那麼怎麼辦?對於這些特定場景的需求,特別是有狀態類會話怎麼辦?於是乎變有了上面提到的Stateful ACL rules。


顧名思義,Stateful ACL就跟有狀態防火牆(Stateful Firewall)是一樣的,究其工作原理大致如下:

  1. 數據包到了防火牆這裏時,狀態檢測引擎會查看該連接請求是否爲一個初始化連接(即是否攜帶SYN標記)。

  2. 接下來就去與ACL規則最比對,當然如果不滿足的就丟掉了,滿足的話就繼續。

  3. 防火牆內會有一個狀態表,並把這個連接作爲一條會話添加進表中進行維護。

  4. 表內條目大致會包括一些源/目的地址、源/目的端口號、連接時間等信息。

  5. 後續數據包再到達時,如果不是初始化連接請求,即沒有SYN,則直接去跟狀態表中的內容最比對。

  6. 如果後續數據包與狀態表中信息匹配,則直接轉發,不需要再去與ACL中的規則做比對,如果不屬於任何會話則丟棄。

  7. 此外會話還包含一個timeout值,當超過這個保活時間後,會話會被刪除。

##########################################################################################

下面來看一下Stateful ACL的特別之處,下圖中是一條沒有附加“-Stateful”參數的ACL,針對於虛機SQL2008R2的本地1433端口入方向進行允許,另外還加了一條“-Weight”權重值參數,該參數值越大越先被執行,因爲Hyper-V內的ACL並沒有一條默認的規則,例如deny any any之類的,所以Weight值會被用來與其他ACL配合使用。

wKioL1PoVJ3yqD9sAAH-ey3AadE441.jpg

僅僅配置了這條ACL後,SQL2008R2這臺機器的1433端口還是不能被WIN2008R2訪問的,如下圖所示;除非我再加一條針對WIN2008R2入方向的ACL,但那樣就比較繁瑣了

wKioL1PoTSGQ99srAAUv_QvyWiM732.jpg

接着再試一下Stateful ACL的效果,同樣是剛纔的命令,只不過在後面追加了一個“-Stateful”並賦予$true,如下圖:

wKiom1PoTAmhgUS0AAKsCFQTaRg927.jpg

由於Stateful ACL會自動打開返回流量的端口,並根據timeout值維護這個會話,因此WIN2008R2可以telnet到SQL2008R2的1433端口了。

wKioL1PoTSKjrCcyAALwqy6WtBc658.jpg

同樣對於Web訪問類請求也適用,下圖中SQL2008R2受到ACL的限制是無法訪問WIN2008R2的IIS站點的。

wKioL1PoTSKybPcJAAMo9o2GWJU893.jpg

通過-Stateful參數允許SQL2008R2出方向的TCP80請求,如下圖:

wKiom1PoTAnhH4pFAAN-UtuO5Wg852.jpg

ACL生效,拖Stateful的福,可以訪問WIN2008R2的默認站點了。

wKioL1PoTSPSVuYvAASn8QSsSkY309.jpg

###########################################################################################

Hyper-V的ACL使虛擬機的網絡安全性得到了多一層的保護,在上面的測試中我沒有添加“-timeout”參數,有需要的筒子可以自行查看get-help;不過遺憾的是,我沒有找到在大範圍環境中批量執行ACL的途徑,縱然VMM可以集成Cisco Nexus 1000v之類的第三方產品,但是一方面需要投入額外成本,另一方面又增加了維護開銷;當然如果純粹使用PS腳本應該也是可行的,但要是能在今後增加圖形化界面的全局配置想必是極好的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章