JumpServer 广受欢迎的开源堡垒机
先介绍一下JumpServer的特点:
-
安全性:
- 支持多种认证方式,如 LDAP/AD 认证、RADIUS 认证、OpenID 认证(单点登录)、CAS 认证(单点登录)和 MFA 二次认证。
- 集中管理用户账号,支持统一密码管理、资产密码托管、自动生成和推送密码、密码过期设置等。
- 对用户、用户组、资产、资产节点、应用以及系统用户进行多维授权,支持细粒度的应用级授权和动作授权。
- 记录用户操作行为、会话内容、命令执行情况,并支持对 Linux、Windows 等资产操作的录像进行回放。
-
开源:
- 完全开源,零门槛,线上快速获取和安装。
-
分布式:
- 能够支持多个机房跨区域部署,中心节点提供 API,各机房部署登录节点,支持大规模并发访问,绝对高效。
-
web ui:
- 仅需浏览器即可使用
-
云端存储:
- 很好的支持云端存储,还可管理多样化云端资产。物理机、虚拟机管理更加高效和安全
用户经过堡垒机通常包括以下几个步骤: 1. 用户通过客户端连接到堡垒机。 2. 堡垒机对用户进行身份验证,确认其身份和权限。 3. 用户通过堡垒机访问目标服务器。 4. 堡垒机对用户的访问行为进行监控和管理,确保其符合安全策略。 5. 用户完成操作后,断开与堡垒机的连接。
它能帮我们做什么?
- 访问控制:堡垒机充当了访问关口,并通过认证和授权机制限制对内部系统的访问。 只有经过身份验证和授权的用户才能通过堡垒机进入内部网络。
- 审计和监控:堡垒机记录和审计所有用户的操作,包括登录、命令执行和文件传输等。 这些审计日志可用于追踪和监控用户活动,以便检测潜在的安全事件或违规行为。
- 建立安全通道:堡垒机使用安全协议(如SSH)建立与远程终端之间的加密通信通道。
- 网络隔离:堡垒机通过作为中转站,实现了内外网络的隔离。使得内部网络不直接暴露在公网上, 暴露出来的资产就只有堡垒机,提高了网络的安全性。
实验配置
内网多台机器访问配置起来相对较麻烦,配置起来也不够安全,通过nas上docker容器构建防火墙服务器实现内部网络统一管理。

编辑docker-compose.yml文件内容:
services:
# JumpServer 核心服务
core:
image: jumpserver/core:v4.10.11-ce
container_name: jms_core
restart: always
depends_on:
- mysql
- redis
env_file: .env
environment:
- DB_ENGINE=mysql
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=${MYSQL_USER}
- DB_PASSWORD=${MYSQL_PASSWORD}
- DB_NAME=${MYSQL_DATABASE}
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=
- REDIS_DB_CELERY=3
- REDIS_DB_CACHE=4
- REDIS_DB_WS=5
- STATIC_ROOT=/opt/jumpserver/data/static
- MEDIA_ROOT=/opt/jumpserver/data/media
volumes:
- jumpserver_data:/opt/jumpserver/data
ports:
- "9090:8080"
command: ["start", "all"]
# MySQL 8 数据库
mysql:
image: mysql:8.0
container_name: jms_mysql
restart: always
env_file: .env
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
- /volume4/Cy/contaners/jump/data/mysql:/var/lib/mysql
- /volume4/Cy/contaners/jump/config/mysql:/docker-entrypoint-initdb.d
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- "3307:3306"
# Redis 缓存
redis:
image: redis:7-alpine
container_name: jms_redis
restart: always
volumes:
- /volume4/Cy/contaners/jump/config/redis/redis.conf:/usr/redis/redis.conf:ro
- /volume4/Cy/contaners/jump/data/redis:/usr/redis/data
command: ["redis-server", "/usr/redis/redis.conf"]
ports:
- "6380:6379"
# Koko 组件(SSH 网关)
koko:
image: jumpserver/jms_koko:latest
container_name: jms_koko
restart: always
depends_on:
- core
env_file: .env
environment:
- CORE_HOST=http://core:8080
- BOOTSTRAP_TOKEN=${BOOTSTRAP_TOKEN}
ports:
- "2222:2222"
# Lion 组件(Web Terminal)
lion:
image: jumpserver/jms_lion:latest
container_name: jms_lion
restart: always
depends_on:
- core
env_file: .env
environment:
- CORE_HOST=http://core:8080
- BOOTSTRAP_TOKEN=${BOOTSTRAP_TOKEN}
ports:
- "9091:8081"
# Nginx 反向代理
nginx:
image: nginx:alpine
container_name: jms_nginx
restart: always
depends_on:
- core
- lion
ports:
- "81:80"
volumes:
- /volume4/Cy/contaners/jump/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- /volume4/Cy/contaners/jump/nginx/ssl:/etc/nginx/ssl:ro
- jumpserver_data:/opt/jumpserver/data:ro
# ========================
# 🔧 定义共享卷(Shared Volumes)
# ========================
volumes:
jumpserver_data:
driver: local
driver_opts:
type: none
device: /volume4/Cy/contaners/jump/data/jumpserver
o: bind
.env配置文件如下:
# .env
SECRET_KEY=NAEiIUus7j8Sv8EjQmlE4anhpvTFZRHvcOcV53T5j6hjIcbt
BOOTSTRAP_TOKEN=Q1Qv2s1eLxUDe6aH1uEgxicr
# MySQL 配置
MYSQL_ROOT_PASSWORD=!JumpPwd2025
MYSQL_DATABASE=jumpserver
MYSQL_USER=jumpserver
MYSQL_PASSWORD=!JumpPwd123
# 域名(可选,用于 HTTPS)
#SERVER_NAME=
浏览器输入192.168.xxx.xxx:81/, 链接换下,回车即可。