温馨提示×

如何在Ubuntu上实现Docker容器的安全隔离

小樊
46
2025-12-20 10:43:21
栏目: 智能运维

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 主机与容器运行时进行安全基线检查并整改。

0