Ubuntu 上 Docker 容器的安全隔离实践
一 核心隔离机制与防护要点
- 使用 Linux Namespaces 提供进程、网络、挂载、用户等隔离;配合 Cgroups 做 CPU、内存、I/O 与进程数等资源限制,防止资源耗尽导致的主机不稳定或被 DoS。
- 通过 Capabilities 实施最小权限:默认丢弃不必要能力,仅按需添加(如 NET_BIND_SERVICE);启用 no-new-privileges 防止权限提升。
- 启用 Seccomp 系统调用过滤(默认白名单已禁用危险调用),必要时提供自定义策略以进一步收紧。
- 在 AppArmor/SELinux 上启用强制访问控制(Ubuntu 常用 AppArmor),为容器进程绑定受限策略。
- 启用 User Namespaces 将容器内 root 映射为宿主机非特权 UID/GID,显著降低逃逸后危害;必要时采用 Rootless 模式运行 Docker。
- 镜像与运行时安全:优先选择 最小化基础镜像(如 Alpine/Distroless),避免挂载 /var/run/docker.sock,并定期做 漏洞扫描与更新。
二 宿主机与 Docker 守护进程加固
- 保持 Docker 版本为最新,及时获取安全修复。
- 配置 /etc/docker/daemon.json 启用用户命名空间映射,示例:
- 编辑配置:
- sudo mkdir -p /etc/docker
- echo ‘{ “userns-remap”: “default” }’ | sudo tee /etc/docker/daemon.json
- 重启服务并检查:
- sudo systemctl restart docker
- docker info | grep -i ‘root dir\|userns’
- grep -E ‘dockremap’ /etc/subuid /etc/subgid
该配置会自动创建 dockremap 用户与 /var/lib/docker/165536.165536 等目录,实现容器内 root 到宿主机高号 UID 的安全映射。
- 按需配置 日志驱动与审计:例如使用 json-file 并设置最大文件数与大小,便于安全审计与取证。
三 容器运行时的安全配置模板
- 最小权限与系统调用过滤:
- docker run -d --name web
–cap-drop ALL --cap-add NET_BIND_SERVICE
–security-opt no-new-privileges
–security-opt seccomp=default
nginx:1.25
- 用户命名空间与只读文件系统:
- docker run -d --name app
–read-only
-v app-data:/var/lib/app
alpine:latest sleep 3600
说明:启用 userns-remap 后,即便容器内为 root,在宿主机上也仅为 非特权 UID,配合只读根文件系统可显著缩小攻击面。
- 资源与进程数限制:
- docker run -d --name worker
–memory=512m --cpus=1 --pids-limit=100
ubuntu:24.04 sleep 3600
- 网络隔离:
- 创建隔离网络:docker network create --internal isolated-net
- 运行无外网容器:docker run -d --name isolated --network=none alpine:latest sleep 3600
提示:避免使用 –network=host;对需要外网访问的服务,仅暴露必要端口并使用防火墙做白名单。
四 网络与多容器隔离设计
- 使用 自定义 bridge 网络 实现容器间互通与与宿主机/外网的隔离;对敏感服务采用 internal 网络(无默认网关)彻底阻断外联。
- 按业务划分多个网络,减少横向移动面;必要时结合 iptables/nftables 做细粒度访问控制。
- 选择网络模式时权衡隔离与性能:Host 模式隔离性最低、性能最高;Bridge 适合单机多容器;None 提供最高隔离(无网络)。
五 镜像治理 监控审计与验证
- 镜像与供应链安全:
- 使用可信源与 最小化镜像,避免使用 latest 标签;在 CI/CD 中集成 Trivy/Clair/Snyk 做漏洞扫描与准入控制。
- 运行监控与入侵检测:
- 使用 docker events 做关键生命周期事件审计;部署 Falco/Sysdig 检测容器内异常行为(如特权提升、敏感文件访问、异常网络连接)。
- 定期自检与基线核查:
- 使用 docker-bench-security 对 Docker 主机与容器运行时进行安全基线检查并整改。