简介:本文将详细介绍基于Docker生产环境的相关配置及应用。

Docker 参数配置相关建议

确认docker相关的文件具有合适的权限
描述

确保可能包含敏感参数的文件和目录的安全对确保Docker守护程序的正确和安全运行至关重要

加固建议

执行以下命令为 Docker 相关文件配置权限:

chown root:root /usr/lib/systemd/system/docker.service
chmod 644 /usr/lib/systemd/system/docker.service
chown root:root /usr/lib/systemd/system/docker.socket
chmod 644 /usr/lib/systemd/system/docker.socket
chown root:root /etc/docker
chmod 755 /etc/docker

若文件路径与实际系统中不同可以使用以下命令获取文件路径:

systemctl show -p FragmentPath docker.socket
systemctl show -p FragmentPath docker.service
审核 Docker 文件和目录
描述

除了审核常规的 Linux 文件系统和系统调用之外,还审核所有与Docker相关的文件和目录。 Docker 守护程序以root特权运行。 其行为取决于某些关键文件和目录。如 /var/lib/docker/etc/dockerdocker.servicedocker.socket/usr/bin/docker-containerd/usr/bin/docker-runc 等文件和目录

加固建议

在/etc/audit/audit.rules与/etc/audit/rules.d/audit.rules文件中添加以下行:

-w /var/lib/docker -k docker
-w /etc/docker -k docker
-w /usr/lib/systemd/system/docker.service -k docker
-w /usr/lib/systemd/system/docker.socket -k docker
-w /usr/bin/docker-containerd -k docker
-w /usr/bin/docker-runc -k docker

然后,重新启动 audit 程序。 例如

service auditd restart
限制容器的内存使用量
描述

默认情况下,Docker 主机上的所有容器均等地共享资源。 通过使用Docker主机的资源管理功能(例如内存限制),您可以控制容器可能消耗的内存量。

默认情况下,容器可以使用主机上的所有内存。 您可以使用内存限制机制来防止由于一个容器消耗主机的所有资源而导致的服务拒绝,从而使同一主机上的其他容器无法执行其预期的功能。 对内存没有限制可能会导致一个问题,即一个容器很容易使整个系统不稳定并因此无法使用。

加固建议
  • 仅使用所需的内存来运行容器。 始终使用 --memory 参数运行容器。 您应该按以下方式启动容器:
docker run --interactive --tty --memory 256m <Container Image Name or ID>
2.设置日志记录级别
描述

设置适当的日志级别,将 Docker 守护程序配置为记录您以后想要查看的事件。 基本日志级别为 info 及更高版本将捕获除调试日志以外的所有日志。 直到且除非有必要,否则您不应在 debug 日志级别运行 Docker 守护程序

加固建议

运行Docker守护程序,如下所示:

dockerd --log-level=info

若以 systemctl 管理 docker 服务则需要编辑 /usr/lib/systemd/system/docker.serviceExecStart 参数添加 --log-level="info",并重启 docker

systemctl stop docker
systemctl start docker
限制容器之间的网络流量
描述

默认情况下,同一主机上的容器之间允许所有网络通信。 如果不需要,请限制所有容器间的通信。 将需要相互通信的特定容器链接在一起。默认情况下,同一主机上所有容器之间都启用了不受限制的网络流量。 因此,每个容器都有可能读取同一主机上整个容器网络上的所有数据包。 这可能会导致意外和不必要的信息泄露给其他容器。 因此,限制容器间的通信。

加固建议

在守护程序模式下运行 docker 并传递 --icc = false 作为参数。 例如,

/usr/bin/dockerd --icc=false
若使用systemctl管理docker服务则需要编辑

/usr/lib/systemd/system/docker.service
文件中的ExecStart参数添加 --icc=false选项 然后重启docker服务

systemctl daemon-reload
systemctl restart docker
为Docker启用内容信任
描述

默认情况下禁用内容信任。 您应该启用它。
内容信任提供了将数字签名用于发送到远程Docker注册表和从远程Docker注册表接收的数据的功能。 这些签名允许客户端验证特定图像标签的完整性和发布者。 这确保了容器图像的出处

加固建议

要在 bash shell 中启用内容信任,请输入以下命令:export DOCKER_CONTENT_TRUST=1 或者,在您的配置文件中设置此环境变量,以便在每次登录时启用内容信任。 内容信任目前仅适用于公共Docker Hub的用户。 当前不适用于Docker Trusted Registry或私有注册表。

允许Docker对iptables进行更改
描述

iptables 用于在 Linu x内核中设置,维护和检查IP数据包过滤器规则表。 允许 Docker 守护程序对 iptables 进行更改。
如果您选择这样做,Docker 将永远不会对您的系统 iptables 规则进行更改。 如果允许,Docker 服务器将根据您为容器选择网络选项的方式自动对 iptables 进行所需的更改。 建议让 Docker服务器自动对 iptable s进行更改,以避免网络配置错误,这可能会妨碍容器之间以及与外界的通信。 此外,每次选择运行容器或修改网络选项时,它都可以避免更新 iptables 的麻烦。

加固建议

不使用 --iptables = false 参数运行 Docker 守护程序。 若以 systemctl 管理 docker 服务则需要编辑 /usr/lib/systemd/system/docker.serviceExecStart 参数删除 --iptables = false , 重启 docker 服务

systemctl daemon-reload
systemctl restart docker
不要使用aufs存储驱动程序
描述

aufs 存储驱动程序是最早的存储驱动程序。 它基于 Linux 内核补丁集,该补丁集不太可能合并到主要 Linux 内核中。 还已知aufs 驱动程序会导致一些严重的内核崩溃。 aufs 刚刚获得了Docker 的支持。 最重要的是,许多使用最新 Linux 内核的Linux 发行版都不支持 aufs 驱动程序。

加固建议

不要明确使用 aufs 作为存储驱动程序。 例如,请勿按以下方式启动Docker 守护程序: 若以 systemctl 管理 docker 服务则需要编辑 /usr/lib/systemd/system/docker.serviceExecStart 参数删除 --storage-driver aufs 重启 docker 服务

systemctl daemon-reload
systemctl restart docker
不要使用特权容器
描述

使用 --privileged 标志将所有 Linux 内核功能赋予容器,从而覆盖 --cap-add--cap-drop 标志。 确保不使用它。
--privileged 标志为容器提供了所有功能,并且还解除了设备cgroup 控制器强制执行的所有限制。 换句话说,容器可以完成主机可以做的几乎所有事情。 存在此标志是为了允许特殊用例,例如在Docker 中运行 Docker

加固建议

不要使用 --privileged 标志运行容器

Docker JAVA程序参数配置建议

Q.E.D.