如果想要看成果的,可以從下方文章去觀看。
Network Policy Server(NPS)是一個 Windows Server 的服務,用於提供 RADIUS 驗證。本身功能與驗證條件是不及 ClearPass 多樣跟靈活,優勢是簡單又無需額外費用,是作為網路驗證伺服器一個常見的開始。
而 NPS 可以透過擴充與註冊,讓 NPS 可以與 Entra 搭配,產生兩階段的驗證:先驗證存於 AD 內身份訊息、再去 Entra 進一步的驗證而觸發MFA。
本文會以一個LAB環境部署開始,逐步,直到能完成 802.1x 驗證時,在手機跳出Authenticator推播訊息,按下核准才能連線的情境。
環境與架構
| 角色 | 本案實際環境 |
|---|---|
| Aruba VMC44 | 172.26.1.44(NAS/無線控制器) |
| ClearPass Policy Manager | 172.26.1.57(RADIUS Proxy/本機 AD 802.1X) |
| Windows DC01 + NPS Extension | DC01.entraid-mfa.com/172.26.1.45 |
| AD DS 網域 | entraid-mfa.com |
| Entra Tenant ID | 9127dbbf-a78a-423e-9acc-2d54333700ce |
| 測試使用者 | mgmt01(已同步、具 AD 密碼/P1/Authenticator) |
https://arubanetworking.hpe.com/techdocs/NAC/clearpass/platform/mfa-workflows

MFA 有 TOTP、PUSH、EMAIL、SMS、PHONE 等,在 802.1x 連線驗證方式,只能使用 PUSH,因為其他方式取得的驗證碼,並沒有任何地方能讓使用者輸入。
用這套方式,接受 Microsoft Authenticator 推播的手機就不能用於網路連線了,沒辦法在連線中途收到推播。
步驟
這邊假設 Microsoft Entra 已經完成註冊,並且已經具有P1授權。
- 安裝 Windows Server 並部署AD DS功能。
- 在 Windows Server 上進行 AD 到 Entra (地到雲) 同步
- 測試帳號先用瀏覽器登入 Microsoft 服務新增MFA方式。
- 在 Windows Server 安裝NPS,並作簡易驗證測試
- 在 Windows Server 安裝NPS Extension並註冊
- 在 ClearPass 設定認證服務,指向NPS作為認證源
安裝 Windows Server 並部署AD DS功能
安裝 Windows Server 這步就不多說了。
安裝完後,建議先將 Windows Server 改系統名稱,通常都是這樣命名「DC01」,意味著Domain Controller第一臺。
然後開始新增伺服器角色,新增 Active Directory 網域服務。

安裝完成後,右上角旗幟部分(驚嘆號通知),會提示需要進一步完成AD DS部署。
新增樹系

一路往下安裝


安裝完成後,在 伺服器管理員 > 工具 > Active Directory,可以看到樹系。

在 Windows Server 上進行 AD 到 Entra (地到雲) 同步
這個步驟重點是:地端到雲端。
因此要在 「Active Directory 使用者和電腦」 中,新建立一個測試帳號。這邊我再建一個mgmt02。


接下來則是要在 Windows Server 安裝代理程式,好讓 AD 能跟 Entra 同步。

這邊兩個都可以讓 AD 與 Entra 做到同步,只是會影響設定方向。
上者安裝之後,才能從 Entra 設定 AD 同步方向。
下者安裝之後,AD 與 Entra 做到同步,DC 就會變成 Entra 上的一個設備。
由於是 POC ,盡可能簡單部署複雜度,我建議都裝。
安裝 Microsoft Entra Connect (下者) 的過程

接下來要跟 Entra ID 做連線,使用 Entra ID上具有 全域系統管理員 權限等帳號去登入。



安裝 AADConnectProvisioningAgentSetup (上者) ,完成後,可在 Entra 選擇同步方向,AD 到 Entra ID。

要安裝代理程式才能看到樹系可以選擇。

然後按下建立,需要一點時間才能建立完成。
進入到概觀

新增範圍篩選,這邊我把測試帳號都放在組織單位(OU) MFA 之下,然後完成。

切換到「隨需佈建」測試,輸入「CN=mgmt02,OU=MFA,DC=entraid-mfa,DC=com」,然後佈建。


如果不知道辨別名稱,可以在 DC 上 執行 Power Shell 去查詢。
# 假設要查 mgmt02
Get-ADUser -Identity mgmt02 -Properties UserPrincipalName | Select-Object Name, SamAccountName, UserPrincipalName, DistinguishedName

欄位DistinguishedName的值就是辨別名稱。
測試帳號先用瀏覽器登入 Microsoft 服務新增MFA方式與調整帳號所屬樹系。
當帳號被同步上 Entra ID 之後,預設是沒有 MFA 方法,因此需要先用瀏覽器登入,完成新增MFA方法。
由於這部分帳號是依照 Entra ID 使用,跟 AD 中的域名可能會有不同,因此建議直接在 Entra ID 上複製主體名稱,然後進行登入。
entra.microsoft.com

登入成功後,會要求安裝 Microsoft Authenticator。

出現 QR Code,依據只是,用手機 Microsoft Authenticator 去掃描然後加入。



然後回到 AD 上調整測試帳號樹系,跟 Entra ID 的域名相同。

在 Windows Server 安裝NPS,並作簡易驗證測試
在 伺服器管理員 > 新增 角色及功能 , 安裝 網路原則與存取服務。


安裝完成後,進入 網路原則伺服器 ,執行 在 Active Directory 中登錄伺服器。

建立 RADIUS Client:新增 ClearPass 與 VMC 作為 Client。密碼就兩邊一致就好。

新建一個簡單的網路原則,

這邊限制中,至少要啟用 PEAP、PAP。

對PEAP按下編輯,要能看到憑證,如果NPS沒有憑證,PEAP認證一定會失敗。
=> 最簡單的方式是新增角色及功能 AD CS 去產生憑證。
=> 請AI協助提供指令,簽出一張伺服器憑證,然後部署在 Windows Server 上。

然後透過VMC做AAA測試,至少要有回應,確保NPS認證服務正常。

在 Windows Server 安裝NPS Extension並註冊
下載 NPS Extension https://www.microsoft.com/en-us/download/details.aspx?id=54688
官方文件 Use Microsoft Entra multifactor authentication with NPS | Azure Docs
安裝為 NPS Extension 之後,就可以依據官方文件去註冊。
※ 一旦完成此步驟,NPS 都會使用 NPS extension,生產環境安裝前請謹慎。

Set-Location 'C:\Program Files\Microsoft\AzureMfa\Config'
.\AzureMfaNpsExtnConfigSetup.ps1
在過程中,需要輸入 租戶ID ,這個可以在 Entra ID 上取得。


過程中,也需要跟 Entra ID 做連動,並要求權限要許可。


使用腳本註冊完成後,由於PEAP MSChapv2不支援OTP,因此要關掉,否則若驗證時使用,會出現驗證失敗訊息。
# 關閉 OTP。
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\AzureMfa' -Name 'OVERRIDE_NUMBER_MATCHING_WITH_OTP' -PropertyType String -Value 'FALSE' -Force
Restart-Service IAS
Get-Service IAS
實際上預設方法是以 Entra 上設定為主,

驗證失敗訊息:NPS 伺服器上安裝的 NPS 延伸動態連結程式庫 (DLL) 已拒絕連線要求。

在 ClearPass 設定認證服務,指向NPS作為認證源
當以上順利完成時,NPS 就能透過 NPS Extension 連動 Entra ID 做 MFA。
於是 802.1x 驗證就能順利連動 MFA ,但是,會發現每次連接都要做 MFA ,很多文件也是這樣寫。接下來就輪到 ClearPass 出場,用一些方式避免每次都走 NPS 驗證身份。
ClearPass 可以設定兩個驗證源:RADIUS Proxy、AD。
當RADIUS Proxy串NPS進行首次認證,NPS觸發MFA,MFA完成後登入成功並寫入屬性Cache。
當屬性Cache有效時,認證則會優先去找AD,避免NPS再次導致MFA。
這種方式缺點之一,就是Client會看到兩張憑證:NPS、ClearPass,可能會有信任憑證的問題。
但是至少比使用者每次都要 MFA 的煩人更好。
認證流程
角色: Cache失效的Endpoint 、 Cache有效的Endpoint 。
服務條件:AD是Cache有效才會命中,並且AD服務在NPS服務上方。
Cache失效的Endpoint 連上無線網路 EntraID-MFA 時,透過 NPS 做兩階段驗證,兩階段(MFA)成功時會回傳屬性「Radius:Microsoft:MS-CHAP2-Success」
對於存在屬性「Radius:Microsoft:MS-CHAP2-Success」,即給與認證成功並寫入MAC Cache,這邊MAC Cache只能使用DateTime形式。
然後,當Client斷線時,若Cache有效,因為AD服務在上方而優先命中。
由於這次認證源不是NPS,而是AD,因此就不會碰到NPS延伸到Entra的MFA。在Cache生效期間中,都去找AD。而AD身份跟Entra上的是一樣的,因此一樣的使用者帳號密碼都能在兩個服務中順利驗證通過。
Services – EntraID-MFA NPS
這邊要使用 RADIUS Proxy 還是 RADIUS 都是差不多的。

Services – EntraID-MFA AD
連線時會有 Date 而且是 DT 形式,如果 Endpoint 的 Cache 使用 DT 形式,就能在服務中精準命中。

我相信會需要看到這篇的人,對於ClearPass應該都有基本瞭解,本文服務或是強制配置都是最簡單的Allow。
除了MAC Cache需要設定 現在經過特定時間 之外,我就附在下方,看需求要調整成8小時都可以。

select
(localtimestamp(0) + interval '0 minutes') as now_plus_0mins_dt,
(localtimestamp(0) + interval '5 minutes') as now_plus_5mins_dt,
(localtimestamp(0) + interval '120 minutes') as now_plus_120mins_dt,
(localtimestamp(0) + interval '1440 minutes') as now_plus_1440mins_dt,
(localtimestamp(0) + interval '10080 minutes') as now_plus_10080mins_dt
AAA Timeout
由於 MFA 會讓驗證時間變長,若是十幾秒就認為 Timeout ,就會讓 MFA 驗證不順利。
因此建議條長,微軟建議寫60秒,個人認為30~60秒都算合理。

後記
這部分做起來也是匆匆忙忙,可能內容有誤,也請不吝指出,日後可能會修改。
802.1x 做 MFA,相比其他 Captive Portal 形式(SAML、Cloud Identity),可以省下:網頁憑證、可信任網頁的環境配置、URL白名單,以及iOS對於Captive Portal的神奇支援度,省下要為iOS測試的工。
管理員登入會比較有看頭,因為設備未必都能支援MFA,但如果可以把管理員登入指向ClearPass,就能透過NPS路線去做MFA。讓一些重要但沒有MFA的設備,可以用這種方式達到MFA。
最近經常被問,如果不用PEAP的話,要改用什麼?一律建議TLS,因為這是微軟說的,而且搞事的都是系統廠商說得算,一個更新讓PEAP不正常也不是網路設備的鍋。
最通用的,目前還是Captive Portal形式。
而本文 MFA 是探討在 帳號密碼 外流時,是否能攔住非本人的連線?就算是TLS,設備給人盜取,也可能直接用設備上的憑證或是電腦驗證就連上網路。
也許連線時MFA驗證,搭配防火牆、Policy跟VLAN,可以做個高機密用途的無線網路或是有線網路。
不過 MFA 不建議作為 非重要的連線 關卡,主要是擾民,二來也許有其他更容易攔截的方法。
換個想法,要是防火牆用自己的MFA、某某設備又是自己的MFA,然後有好幾種MFA要套配不同APP,也是一種困擾。
如果 User 沒有授權 P1
P1 授權主要是讓 NPS Extension 合法使用的條件,對於使用者是否要有 P1 授權是沒有明寫的,但實測也可以觸發 Entra MFA。

TACACS+範本 (SSH、ClearPass)
TACACS+沒辦法把RADIUS Server作為驗證源。
因此需要在驗證源新增一個Token Server,然後把NPS相關IP與Secret等輸入,就能用。

