windows - 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 等)它只是无法启动。
聪明的头脑有什么线索吗?提前致谢!
解决方案
假设您使用的是 Windows Server 容器,而不是 Hyper-V 容器,那么您有一个共享内核,因此使用主机的防火墙。
从网络隔离和安全:
根据使用的容器和网络驱动程序,端口 ACL 由 Windows 防火墙和 VFP 组合实施。
Windows 服务器容器
它们使用 Windows 主机的防火墙(受网络命名空间启发)以及 VFP
默认出站:全部允许
默认入站:允许所有(TCP、UDP、ICMP、IGMP)未经请求的网络流量
拒绝不是来自这些协议的所有其他网络流量
推荐阅读
- python - 没有调用django模型实例方法
- asp.net-mvc - 如何将 Angular 8 应用程序发布到 asp.net 应用程序的子文件夹?
- activemq-artemis - ArtemisMQ 连接器
- ruby - Ruby - 在哈希中按 id 排序和按日期分组
- java - 这不违反静态变量的规则吗?
- python - 当元素不存在时,python selenium webdriver中的IF ELSE语句不执行Else
- mule - compare two arrays in dataweave2.0
- python - vertically stacked list - can't iterate through them?
- javascript - 如何在 HTML 上无延迟地流式传输 PCM 音频?
- r - 是否存在与 Python 的“*”等价的 R?