生产环境安全加固

生产环境安全加固

安全加固框架

Docker 生产环境安全加固是一个系统工程,涉及守护进程配置、容器运行时安全、镜像管理、网络安全和访问控制等多个层面。

1. 守护进程安全配置

daemon.json 安全配置

{
  "userns-remap": "default",
  "live-restore": true,
  "userland-proxy": false,
  "no-new-privileges": true,
  "seccomp-profile": "/etc/docker/seccomp.json",
  "log-driver": "journald",
  "log-opts": {
    "tag": "{{.Name}}/{{.ID}}"
  },
  "icc": false,
  "iptables": true,
  "authorization-plugins": ["docker-opa"],
  "tls": true,
  "tlsverify": true,
  "tlscacert": "/etc/docker/ca.pem",
  "tlscert": "/etc/docker/server-cert.pem",
  "tlskey": "/etc/docker/server-key.pem",
  "hosts": ["tcp://192.168.1.100:2376", "unix:///var/run/docker.sock"]
}

关键配置说明

配置 说明 安全收益
userns-remap 用户命名空间映射 防止容器 root 获得宿主机 root
live-restore 守护进程重启时运行中的容器不停止 可用性
userland-proxy 禁用用户态代理 减少攻击面
no-new-privileges 禁止容器内提权 防止 setuid 提权
icc 禁止容器间通信 网络隔离
authorization-plugins 授权插件 细粒度访问控制

2. 容器运行配置

安全的容器启动模板

docker run -d \
  --read-only \
  --user 1000:1000 \
  --cap-drop=ALL \
  --cap-add=NET_BIND_SERVICE \
  --security-opt=no-new-privileges:true \
  --security-opt=seccomp=default.json \
  --security-opt=apparmor=docker-default \
  --tmpfs /tmp:rw,nosuid,nodev,noexec,size=100M \
  -v /var/log/myapp:/var/log:rw \
  --restart=always \
  --memory=256m \
  --cpus=0.5 \
  --pids-limit=100 \
  nginx

Docker Compose 安全配置

services:
  app:
    image: myapp:${TAG}
    user: "1000:1000"
    read_only: true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp:size=100M
      - /var/run:size=50M
    volumes:
      - app-logs:/var/log/app
    restart: always
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: "256M"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

3. 网络层安全

网络隔离配置

services:
  web:
    image: nginx
    networks:
      - frontend
    ports:
      - "443:443"
    depends_on:
      - app

  app:
    image: myapp
    networks:
      - frontend
      - backend
    expose:
      - "3000"

  db:
    image: postgres
    networks:
      - backend
    # internal: true  # 不访问外网

networks:
  frontend:
    driver: bridge
  backend:
    internal: true  # 数据库不能访问外网

防火墙规则

# 限制 Docker 相关的 iptables 规则
iptables -A INPUT -i docker0 -j DROP
iptables -A FORWARD -i docker0 -o docker0 -j DROP

# 只允许特定容器访问
iptables -A FORWARD -s 172.17.0.0/16 -d 10.0.0.0/8 -j ACCEPT

4. 镜像安全策略

# 在 CI/CD 中自动扫描
trivy image --severity HIGH,CRITICAL --exit-code 1 myapp:$TAG

# 只允许使用签名镜像
export DOCKER_CONTENT_TRUST=1

# 定期更新基础镜像
docker pull node:18-alpine
docker pull nginx:alpine

# 清理旧镜像
docker image prune -a -f

5. 主机加固

# 1. 更新 Docker
sudo apt-get update && sudo apt-get upgrade docker-ce

# 2. 限制 Docker socket 访问
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock

# 3. 审计 Docker 操作
sudo auditctl -w /var/lib/docker -p wa -k docker
sudo auditctl -w /etc/docker -p wa -k docker-config
sudo auditctl -w /var/run/docker.sock -p rwxa -k docker-socket

# 4. 限制资源
sudo systemctl set-property docker.service \
  MemoryMax=4G \
  CPUQuota=80%

6. 运行时安全监控

Falco 安装和配置

services:
  falco:
    image: falcosecurity/falco:latest
    privileged: true
    network_mode: host
    pid: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /proc:/host/proc:ro
      - /etc/falco:/etc/falco:ro

关键 Falco 规则

- rule: Container with Privileged Mode
  condition: container.id != host and container.privileged = true
  output: "Privileged container started (user=%user.name)"
  priority: WARNING

- rule: Sensitive Mount Detected
  condition: sensitive_mount and container.id != host
  output: "Sensitive mount detected (mount=%mount.path)"
  priority: CRITICAL

- rule: Unauthorized Process
  condition: proc.name in (crypto_miner_list) and container.id != host
  output: "Unauthorized process running in container"
  priority: CRITICAL

7. 安全审计清单

每日检查

  • [ ] 检查运行中的容器是否有特权模式
  • [ ] 检查是否有新的高危 CVE
  • [ ] 检查 Docker 守护进程日志中的异常

每周检查

  • [ ] 更新基础镜像
  • [ ] 扫描所有镜像的漏洞
  • [ ] 审查 Docker 配置变更

每月检查

  • [ ] 轮换 TLS 证书
  • [ ] 审计容器访问日志
  • [ ] 更新 Docker 版本
  • [ ] 进行安全演练

8. 自动化安全检查

#!/bin/bash
# docker-security-check.sh

echo "=== Docker 安全检查 ==="

# 检查特权容器
echo "[*] 检查特权容器..."
docker ps -q | xargs -I {} docker inspect {} --format '{{.Name}} {{.HostConfig.Privileged}}'

# 检查 Docker socket 挂载
echo "[*] 检查 Docker socket 挂载..."
docker ps -q | xargs -I {} docker inspect {} --format '{{range .Mounts}}{{.Source}}{{end}}' | grep docker

# 检查非 root 用户
echo "[*] 检查非 root 运行..."
docker ps -q | xargs -I {} docker inspect {} --format '{{.Name}} {{.Config.User}}'

# 检查资源限制
echo "[*] 检查资源限制..."
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

安全架构全景

                   安全加固体系
    ┌─────────────────────────────────────────┐
    │  访问控制:RBAC、TLS、授权插件           │
    ├─────────────────────────────────────────┤
    │  运行时安全:非root、只读、Capabilities  │
    ├─────────────────────────────────────────┤
    │  网络安全:隔离、加密、防火墙             │
    ├─────────────────────────────────────────┤
    │  镜像安全:扫描、签名、SBOM              │
    ├─────────────────────────────────────────┤
    │  守护进程安全:配置加固、审计             │
    ├─────────────────────────────────────────┤
    │  主机安全:更新、监控、限制               │
    └─────────────────────────────────────────┘

生产环境安全加固不是一次性任务,而是持续的过程。每个层次的安全措施相互补充,共同构建纵深防御体系。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容