1. 系统基础安全加固
sudo apt-get update && sudo apt-get upgrade docker-ce docker-ce-cli containerd.io,修复系统内核、Docker引擎及容器运行时的已知漏洞,降低被攻击风险。ufw(Uncomplicated Firewall)限制对Docker守护进程(默认端口2375/tcp用于不安全通信、2376/tcp用于TLS加密通信)的访问,仅允许可信IP地址连接;示例命令:sudo ufw allow from <trusted-ip> to any port 2376/tcp,并启用防火墙sudo ufw enable。2. 容器运行时安全配置
USER <non-root-user>指令指定非root用户运行容器进程;若需临时切换,可使用docker run --user <uid>:<gid> <image>命令,避免容器内进程获取宿主机root权限。/etc/docker/daemon.json)或docker run命令限制容器的CPU、内存及磁盘使用,示例配置:{"cpu-period":100000,"cpu-quota":50000,"memory":"512m","memory-swap":"1g"},防止单个容器耗尽宿主机资源导致系统崩溃。namespaces(进程、网络、挂载等隔离)、capabilities(限制容器进程的系统调用权限)及cgroups(资源限制)实现隔离;可通过--cap-drop(删除不必要的权限,如NET_ADMIN)和--security-opt=no-new-privileges(禁止容器内进程提权)进一步强化隔离。3. 镜像安全管控
nginx:latest、ubuntu:22.04)或企业私有仓库(如Harbor)中的镜像,避免从不明来源(如第三方未验证仓库)拉取镜像,降低恶意代码植入风险。# 构建阶段
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
# 运行阶段
FROM alpine:3.18
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
```。
Trivy、Clair等工具扫描镜像中的已知CVE漏洞(如操作系统包、应用依赖的漏洞);示例命令:trivy image --exit-code 1 --severity HIGH,CRITICAL <image-name>,若发现高危漏洞,需及时更新基础镜像或修复依赖。4. 访问与认证安全
/etc/docker/daemon.json配置TLS(示例:{"tls":true,"tlscacert":"/etc/docker/certs.d/ca.pem","tlscert":"/etc/docker/certs.d/server-cert.pem","tlskey":"/etc/docker/certs.d/server-key.pem","hosts":["unix:///var/run/docker.sock","tcp://0.0.0.0:2376"]}),重启Docker服务后,客户端需通过~/.docker/config.json配置证书连接。docker组(sudo usermod -aG docker <username>),避免直接使用root用户运行Docker命令;同时,通过sudo限制对Docker相关文件(如/var/lib/docker)的访问权限。5. 网络安全隔离
bridge网络(网络隔离较弱),创建自定义桥接网络(docker network create --driver bridge my-network),将容器连接到自定义网络,实现容器间通信的隔离;若需完全隔离,可使用--network none模式(容器无网络访问)。-p参数映射宿主机端口到容器端口,减少暴露面;若需映射,仅开放必要端口(如HTTP的80/tcp、HTTPS的443/tcp)。6. 监控与审计
/var/log/docker.log)及容器日志(通过docker logs <container-id>),使用Logstash、Fluentd等工具集中存储和分析日志,及时发现异常行为(如频繁的端口扫描、未授权登录)。cAdvisor(监控容器资源使用)、Prometheus(指标存储与告警)、Grafana(可视化监控数据)搭建监控体系,实时监控容器的CPU、内存、网络流量等指标,设置告警阈值(如CPU使用率超过80%触发告警),快速响应资源异常。