為強化對主機標頭攻擊的防護,Unified Access Gateway (UAG) 依預設會在每個傳入要求中驗證 HTTP 主機與 X-Forwarded-Host 標頭。此驗證會依據允許的主機標頭清單強制執行;該清單同時包含動態計算的主機名稱與連接埠,以及明確設定的主機名稱與連接埠。
主機標頭驗證清單
自動允許清單
當儲存 UAG 的網路、高可用性與 Edge 服務設定時,系統會自動將下列項目新增至「自動允許的主機標頭」清單中。
自動允許清單中的項目僅供參考。
- 個別網路介面 IP
- 系統組態中的 UAG 名稱
- 高可用性虛擬 IP
- Horizon 設定
- 為 Tunnel 和 Blast 設定的外部 URL
- Blast 外部 URL 和其他 Blast 外部 URL
- Tunnel 外部 URL 和其他 Tunnel 外部 URL
- 主機連接埠重新導向對應項目
- Web 反向 Proxy 設定中的 Proxy 主機模式和外部 URL
如果傳入要求使用下列主機標頭格式,且其值符合自動允許清單中的項目,系統就會允許該要求:
- <主機名稱或 IP>
- <主機名稱或 IP>:443
- <主機名稱或 IP>:80
- <主機名稱或 IP>:9443
- <主機名稱或 IP>:<其他自動允許的連接埠>
可接受的主機標頭範例
情境 1:如果 uag.myco.com 已自動加入允許清單,則會接受下列主機標頭:
uag.myco.comuag.myco.com:443uag.myco.com:80(連線至連接埠 9443 的管理介面時不允許)uag.myco.com:9443(僅在連線至連接埠 9443 的管理介面時允許)
情境 2:如果 test.com:10443 已自動加入允許清單,則只接受 test.com:10443。
明確設定的清單
如果抵達 Unified Access Gateway 的 HTTP 要求,其主機標頭值不是動態計算得出的值,管理員必須使用下列其中一個選項,將這些值明確新增至允許清單:
-
選項 1:在 [管理員 UI] > [系統組態] 中使用允許的主機標頭設定。
-
選項 2:透過 PowerShell 指令碼部署時,使用
.ini檔案範例組態
[一般]
allowedHostHeaderValues=abc.com,abc.com:10443,uag1.example.com,uag-lb.example.com -
選項 3:使用 CLI 命令:
adminreset --allowedHostHeader
連接埠特定的驗證邏輯
-
如果新增的是純文字主機名稱 (例如
uag1.myco.com),Unified Access Gateway 會自動允許主機標頭連接埠為 443、80、9443 以及未指定連接埠的要求。 -
如果新增的是包含特定連接埠的主機名稱 (例如
uag1.myco.com:10443),則只允許主機標頭與明確列出的 host:port 相符的要求。
允許的標頭格式範例
| 允許的主機標頭 | 傳入主機標頭 | 是否允許? |
|---|---|---|
uag.myco.com | uag.myco.com:443 | 是 |
uag.myco.com | uag.myco.com:9443 | 是 |
uag.myco.com:10443 | uag.myco.com:9443 | 否 (管理邏輯) |
uag.myco.com:10443 | uag.myco.com:443 | 否 |
疑難排解主機標頭驗證
如果傳入要求中的主機標頭值不在允許清單中,UAG 會以 HTTP 400 回應。
請檢查下列記錄檔以查看遭拒絕的訊息:
/opt/omnissa/gateway/logs/admin.log (管理員服務)
/opt/omnissa/gateway/logs/esmanager.log (Horizon/Web 反向 Proxy 流量)
常見的記錄訊息
-
Rejecting request from <source>. The request was rejected because the domain <uag-hostname> is untrusted. -
UAGW00388: Sending bad request. Incoming request does not have valid host header: <host-header-value>, XFH: <xfh-header-value> -
Redirect host <redirect-host> does not match the allowed hosts. Hence sending 400
此頁面對您有幫助嗎?