5.允许Docker对iptables进行更改 描述 iptables用于在Linux内核中设置,维护和检查IP数据包过滤器规则表。 允许Docker守护程序对iptables进行更改。 如果您选择这样做,Docker将永远不会对您的系统iptables规则进行更改。 如果允许,Docker服务器将根据您为容器选择网络选项的方式自动对iptables进行所需的更改。 建议让Docker服务器自动对iptables进行更改,以避免网络配置错误,这可能会妨碍容器之间以及与外界的通信。 此外,每次选择运行容器或修改网络选项时,它都可以避免更新iptables的麻烦。
加固建议
不使用--iptables = false
参数运行Docker守护程序。 若以systemctl管理docker服务则需要编辑/usr/lib/systemd/system/docker.service的ExecStart参数删除--iptables = false
, 重启docker服务
systemctl daemon-reload
systemctl restart docker
6.设置日志记录级别 描述 设置适当的日志级别,将Docker守护程序配置为记录您以后想要查看的事件。 基本日志级别为“ info”及更高版本将捕获除调试日志以外的所有日志。 直到且除非有必要,否则您不应在“debug”日志级别运行Docker守护程序
加固建议 运行Docker守护程序,如下所示:
dockerd --log-level=info
若以systemctl管理docker服务则需要编辑/usr/lib/systemd/system/docker.service的ExecStart参数添加--log-level="info"
,并重启docker
systemctl stop docker
systemctl start docker
7.将容器的根文件系统挂载为只读 描述 容器的根文件系统应被视为“黄金映像”,并且应避免对根文件系统的任何写操作。 您应该显式定义用于写入的容器卷。 您不应该在容器中写入数据。 属于容器的数据量应明确定义和管理。 在管理员控制他们希望开发人员在何处写入文件和错误的许多情况下,这很有用。
加固建议
添加--read-only
标志,以允许将容器的根文件系统挂载为只读。 可以将其与卷结合使用,以强制容器的过程仅写入要保留的位置。 您应该按以下方式运行容器:
docker run --interactive --tty --read-only --volume <writable-volume> <Container Image Name or ID> <Command>
如果您是k8s或其他容器编排软件编排的容器,请按照相应的安全策略配置或忽略。
8.为Docker启用内容信任 描述 默认情况下禁用内容信任。 您应该启用它。 内容信任提供了将数字签名用于发送到远程Docker注册表和从远程Docker注册表接收的数据的功能。 这些签名允许客户端验证特定图像标签的完整性和发布者。 这确保了容器图像的出处
加固建议
要在bash shell中启用内容信任,请输入以下命令:export DOCKER_CONTENT_TRUST=1
或者,在您的配置文件中设置此环境变量,以便在每次登录时启用内容信任。 内容信任目前仅适用于公共Docker Hub的用户。 当前不适用于Docker Trusted Registry或私有注册表。
9.限制容器的内存使用量 描述 默认情况下,Docker主机上的所有容器均等地共享资源。 通过使用Docker主机的资源管理功能(例如内存限制),您可以控制容器可能消耗的内存量。 默认情况下,容器可以使用主机上的所有内存。 您可以使用内存限制机制来防止由于一个容器消耗主机的所有资源而导致的服务拒绝,从而使同一主机上的其他容器无法执行其预期的功能。 对内存没有限制可能会导致一个问题,即一个容器很容易使整个系统不稳定并因此无法使用。
加固建议
仅使用所需的内存来运行容器。 始终使用--memory
参数运行容器。 您应该按以下方式启动容器:
docker run --interactive --tty --memory 256m <Container Image Name or ID>