首页 > 解决方案 > Docker 中的 Windows Server Core、防火墙

问题描述

目前我正在做一个项目,我必须对一个应该在 Windows 上运行的应用程序进行 docker 化。它是一个可以通过命令行安装和配置的应用程序。这个问题最终适用于任何应用程序。

我选择的平台显然是 Windows。因此,我选择了一个基础映像mcr.microsoft.com/windows/servercore:1803开始​​。

安装后,我的应用程序需要将规则添加到防火墙。所以我决定测试我是否能够操纵容器内的防火墙。结果证明这是一次非常有问题的经历。

到目前为止我所做的。

FROM mcr.microsoft.com/windows/servercore:1803

# Add user 
RUN net user /add MyUser
RUN net user MyUser ABCdef123!
RUN net localgroup "Administrators" MyUser /add

之后,我测试了是否可以通过调用来查看 FW 规则Get-NetFirewallRule。这导致了一个错误:

Get-NetFirewallRule : There are no more endpoints available from the endpoint mapper.
At line:1 char:1
+ Get-NetFirewallRule
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (MSFT_NetFirewallRule:root/standardcimv2/MSFT_NetFirewallRule) [Get-NetFirewallRule], CimException
    + FullyQualifiedErrorId : Windows System Error 1753,Get-NetFirewallRule

我通过调用检查了当前运行的服务,Get-Service这导致包含此行的服务列表:Stopped mpssvc Windows Defender Firewall. 看起来FW甚至还没有启动。我决定深入挖掘并检查注册表以获取一些线索。调用它cmd REG QUERY HKLM\SYSTEM\CurrentControlSet\services\MpsSvc /v Start给了我一个禁用的值 4。所以我尝试启用它,将其设置为 2 但在启动服务后没有运气:

REG ADD HKLM\SYSTEM\CurrentControlSet\services\MpsSvc /v Start /t REG_DWORD /d 2 /f
net start MpsSvc

结果:

System error 1058 has occurred.
The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.

依赖于 FW 的服务运行良好(BFE、RDC 等)它只是无法启动。

聪明的头脑有什么线索吗?提前致谢!

标签: windowspowershelldockercontainersdockerfile

解决方案


假设您使用的是 Windows Server 容器,而不是 Hyper-V 容器,那么您有一个共享内核,因此使用主机的防火墙。

网络隔离和安全

根据使用的容器和网络驱动程序,端口 ACL 由 Windows 防火墙和 VFP 组合实施。

Windows 服务器容器

它们使用 Windows 主机的防火墙(受网络命名空间启发)以及 VFP

默认出站:全部允许

默认入站:允许所有(TCP、UDP、ICMP、IGMP)未经请求的网络流量

拒绝不是来自这些协议的所有其他网络流量


推荐阅读