文章目录
rak部落小编为您整理发布针对RAKsmart服务器部署Docker环境的「容器安全与生产级加固」分步教程,涵盖容器运行时安全、镜像漏洞管理及服务器端防护策略,以下是具体内容。
一、非Root用户运行容器
1. 创建专用容器用户
- 在宿主机创建非特权用户(例如
docker-user
):bash复制下载sudo useradd -r -s /sbin/nologin docker-user - Docker容器启动时指定用户:bash复制下载docker run –user $(id -u docker-user):$(id -g docker-user) -d nginx:alpine
2. 限制容器Capabilities
- 移除默认权限并仅保留必要能力(如网络操作):bash复制下载docker run -d –cap-drop=ALL –cap-add=NET_BIND_SERVICE nginx:alpine
- 高风险Capabilities需禁用:
SYS_ADMIN
(容器内挂载文件系统)SYS_PTRACE
(调试进程)NET_RAW
(原始网络操作)
二、容器镜像安全扫描
1. 使用Trivy扫描镜像漏洞
- 安装Trivy:bash复制下载sudo apt-get install wget apt-transport-https gnupg lsb-release wget -qO – https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add – echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list sudo apt-get update && sudo apt-get install trivy
- 扫描镜像:bash复制下载trivy image nginx:alpine
2. 配置只读文件系统
- 启动容器时限制文件系统写入:bash复制下载docker run -d –read-only \ –tmpfs /tmp:rw,size=64m \ nginx:alpine
--tmpfs
:允许临时目录写入(避免应用崩溃)
三、Docker运行时安全加固
1. 启用内容信任(DCT)
- 强制验证镜像签名:bash复制下载export DOCKER_CONTENT_TRUST=1 docker pull nginx:alpine # 仅拉取签名镜像
2. 限制容器资源(CPU/内存)
- 防止资源耗尽攻击:bash复制下载docker run -d –memory=512m –cpus=1 nginx:alpine
3. 隔离容器网络
- 禁用容器间通信(默认网桥):bash复制下载docker network create –driver bridge –internal isolated_net docker run -d –network=isolated_net nginx:alpine
四、RAKsmart服务器安全实践
1. 安全组隔离Docker API端口
- 禁止2375/2376端口公网暴露:
- 在RAKsmart控制面板配置安全组规则:
- 仅允许特定IP访问Docker API端口(如内部管理IP段)
- 默认拒绝所有入站流量到2375/2376
- 在RAKsmart控制面板配置安全组规则:
- 启用TLS认证Docker Daemon(生产环境强制):bash复制下载# 生成CA证书 openssl genrsa -aes256 -out ca-key.pem 4096 openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem # 配置Docker启用TLS /etc/docker/daemon.json: { “tls”: true, “tlscacert”: “/path/to/ca.pem”, “tlscert”: “/path/to/server-cert.pem”, “tlskey”: “/path/to/server-key.pem” }
2. Docker日志审计集成journald
- 配置Docker日志驱动:bash复制下载# 修改/etc/docker/daemon.json { “log-driver”: “journald”, “log-opts”: { “tag”: “{{.ImageName}}/{{.Name}}” } }
- 查询日志:
journalctl -u docker CONTAINER_NAME=容器名
- 查询日志:
3. 定期清理无用资源
- 自动清理停止的容器、悬空镜像和旧日志:bash复制下载docker system prune –force –all –volumes find /var/lib/docker/containers -type f -name “*.log” -size +100M -delete
五、生产级加固Checklist
项目 | 验证命令/方法 | |
---|---|---|
容器以非Root运行 | `docker inspect 容器名 | grep User` |
只读文件系统 | `docker inspect 容器名 | grep Readonly` |
Capabilities限制 | `docker inspect 容器名 | grep Cap` |
镜像漏洞扫描 | trivy image 镜像名 | |
安全组规则生效 | nmap -p 2375,2376 服务器IP |
六、紧急响应建议
- 容器入侵处置:
- 立即停止容器:
docker stop 容器ID
- 导出取证数据:
docker export 容器ID > forensics.tar
- 分析日志:
journalctl -u docker --since "1 hour ago"
- 立即停止容器:
- 漏洞修复流程:
- 更新基础镜像版本(如
FROM nginx:1.25-alpine
) - 重新扫描镜像后部署:
trivy image 新镜像名
- 更新基础镜像版本(如
通过以上措施,可大幅降低RAKsmart服务器上Docker容器的攻击面,满足等保2.0/ISO 27001等合规要求。建议结合RAKsmart提供的抗DDoS和流量清洗能力,构建多层防御体系。