Docker部署堡垒机需嵌入加固逻辑,Jumpserver是主流开源选择,但须联动容器隔离、最小权限、网络收敛和审计闭环:数据库需资源限制与密码认证,Redis禁用远程绑定;密码等敏感信息禁硬编码,改用Docker secrets或.env;Jumpserver主容器须降权运行(user: "1001:1001");网络层应创建--internal自定义网络并经反向代理暴露端口;日志须挂载持久卷并同步至对象存储。

用Docker部署堡垒机本身不等于安全,关键在于架构设计时就嵌入加固逻辑。Jumpserver 是当前最主流的开源选择,其 Docker 化部署天然适配云原生环境,但默认配置远未达到生产级安全要求。真正有效的方案,是把容器隔离、最小权限、网络收敛和审计闭环四者联动起来。
基础服务需强制资源隔离与凭据保护
MySQL 和 Redis 作为 Jumpserver 的核心依赖,不能简单暴露默认端口或使用弱密码:
- 数据库容器必须限制内存与 CPU,例如在
docker-compose.yml中为jms_mysql添加mem_limit: 512m和cpus: 0.5 - Redis 必须启用密码认证且禁用远程绑定(
bind 127.0.0.1),避免公网可连;若需跨容器通信,应通过自定义 Docker 网络(如devopsnetwork)内部互通,而非开放0.0.0.0 - 所有密码(
MARIADB_ROOT_PASSWORD、REDIS_PASSWORD、BOOTSTRAP_TOKEN、SECRET_KEY)不得硬编码在配置文件中,应改用 Docker secrets 或环境变量文件(.env)并设为600权限
Jumpserver 主容器必须降权运行
官方镜像 jumpserver/jms_all 默认以 root 启动,这是高危行为。加固做法是:
- 在
docker-compose.yml的jms_server服务中添加user: "1001:1001",确保进程非 root 身份运行 - 挂载目录(如
/opt/jumpserver/data)宿主机对应路径需提前用chown 1001:1001授权,避免容器内权限错误导致启动失败 - 禁用容器内 SSH 服务(
koko组件已接管终端代理),移除sshd相关端口映射和配置,收缩攻击面
网络层必须收敛访问入口与出口
Docker 网络默认桥接模式易被横向渗透,生产环境应:
- 创建仅内部通信的自定义网络:
docker network create --driver bridge --internal devopsnetwork,使 MySQL/Redis/Jumpserver 三者仅能彼此通信,无法访问外网 - Jumpserver Web 端口(80/443)和 SSH 代理端口(2222)必须通过反向代理(如 Nginx 或 Traefik)暴露,代理层启用 HTTPS、IP 白名单、速率限制,并剥离原始请求头
- 堡垒机自身出口 IP 需加入目标资产(如云服务器安全组、数据库白名单),避免因 NAT 或浮动 IP 导致连接失败;若使用阿里云等平台,注意其元数据地址(
http://100.100.100.200)不可被容器意外访问
审计与日志必须持久化且防篡改
堡垒机的核心价值在审计,而 Docker 容器日志默认易丢失:
- 将
/opt/jumpserver/logs、/opt/koko/logs等路径全部挂载到宿主机持久卷,并设置chown -R 1001:1001确保容器可写 - 启用 Jumpserver 的 SFTP 日志归档功能,将操作录像和命令日志同步至外部对象存储(如 MinIO 或阿里云 OSS),避免单点故障
- 在宿主机部署
auditd或使用docker events --filter event=start监控容器启停,防止有人绕过 Jumpserver 直接登录资产


















