解決 Symantec Endpoint Protection 與 Docker 相容性問題
目前公司是採用 Symantec Endpoint Protection (簡稱 SEP) 方案與 Docker 一直有相容性問題,直到在追一個問題時發現 Running Docker containers in process isolation when Symantec Endpoint Protection is installed 才得以解決。但我碰到第二個問題,Container 啟動之後(例如,起一個 ASP.NET MVC 容器),請求網頁沒有問題了,但網頁如果連線至容器之外的資料庫進行存取時,那麼則會被 Symantec Endpoint Protection 內建的防火牆擋下,在 Symantec Endpoint Protection 進行防火牆設置得以解決。也就是將容器運作的 IP 網段進行排除。
但有個問題,每個開發人員安裝後 Docker 預設 NAT 網路設置都不同,以目前收集到的有 192.168.10.0/24
、172.17.224.0/20
、172.31.80.0/20
、172.19.112.0/20
等等,這會造成維營部門設定上的麻煩。
目前嘗試過許多方法,還未找到可以重設或指定預設 NAT 組態的方法(請參考此文設定),那麼我們換個方向,每個開發人員統一建置新的 NAT,統一大家的設置。
請先執行以下指令,建立 natdev 網路:
docker network create -d nat --subnet=172.86.43.0/20 --gateway 172.86.43.1 --ipam-driver windows --opt com.docker.network.windowsshim.networkname=natdev natdev
在本機執行容器時,需要加上 --network natdev
來啟動容器,這樣經過設置的 Symantec Endpoint Protection 防火牆就不會擋下容器對外的請求:
docker run -d -p 8080:80 --network natdev --rm {your image}
Visual Studio - Container Tools
目前 Visual Studio 2019 - Container Tools 無法指定額外的參數,也就是說,如果在 Visual Studo 開發 Docker 的專案會使用預設 NAT 網路,那麼還是會碰到被 Symantec Endpoint Protection 防火牆擋下的問題。
以下是暫時作業程序:
- 請暫時修改回 IIS Express / .NET Core 偵錯模式。
- 需要時再切換回 Docker 模式並且以 Release 模式進行編譯。
- 使用
docker images
尋找{ProjectName}:latest
映像檔,指定--network natdev
後手動指令啟動。
我有回饋此需求,你可以幫忙按個 ∧ 提高觀注度。
Symantec Endpoint Protection Firewall setting
跟 SEP 管理者對測多次之後終於確認最後可運作的規則,最後特別跟管理者要了 Firewall 設定的截圖。
這裡主要除了把上述設計好的 NAT 網段加入外,還需要把容器要連線的目的地也加入,以我們的情境而言,就是把測試資料庫的 IP 位置一一加入。
這裡設定開放存取什麼服務。目前 HTTP / SQL Server / SQL Client 就能滿足我們的情境。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。