Jumpserver介绍
Jumpserver 是中国一个开源的堡垒机系统,它是符合 4A(认证、授权、审计、资产管理)规范的专业运维安全审计系统。Jumpserver 提供了一套完整的解决方案,帮助企业安全地管理和监控对服务器的访问,确保操作的合规性和安全性。
特点
-
开源:Jumpserver 是完全开源的,企业可以零成本获取和安装。
-
符合4A规范:Jumpserver 遵循认证、授权、审计和资产管理的4A模型,帮助企业实现全面的安全控制。
-
支持多种资产:Jumpserver 支持多种类型的资产,包括SSH服务器(如Linux、Unix和网络设备)、Windows服务器、数据库、NoSQL数据库、云服务(如Kubernetes、VMware vSphere)以及Web站点。
-
分布式架构:Jumpserver 采用分布式架构设计,可以轻松支持大规模并发访问。
-
无插件Web终端:Jumpserver 提供了一个无插件的Web终端,用户只需要浏览器即可进行安全的远程访问。
-
多云支持:Jumpserver 可以管理部署在不同云平台上的资产。
-
审计录像云端存储:Jumpserver 的审计录像可以存储在云端,确保数据的安全性和可靠性。
-
多租户支持:Jumpserver 支持多租户模式,一套系统可以供多个子公司或部门使用。
-
多应用支持:Jumpserver 不仅支持SSH和RDP协议,还可以通过Remote App连接各类应用。
用途
- 安全审计:Jumpserver 可以记录和审计所有的服务器访问操作,帮助企业满足合规性要求。
- 权限控制:Jumpserver 提供细粒度的权限控制,确保只有授权用户才能访问特定的服务器和资源。
- 自动化运维:Jumpserver 支持自动化运维任务,提高运维效率。
- 资产管理:Jumpserver 帮助企业集中管理和监控所有服务器资产。
- 安全隔离:Jumpserver 通过隔离技术,确保操作的安全性,防止内部和外部的安全威胁。
Jumpserver 是一个功能强大且灵活的堡垒机系统,适用于各种规模的企业,特别是需要严格管理和审计服务器访问的组织。通过使用Jumpserver,企业可以提高其IT基础设施的安全性和运维效率。
Docker部署
-
环境准备
确保已经安装了Docker -
创建网络
- 创建网络
sudo docker network create --driver bridge jumpserver
- 创建网络
-
部署MySQL
Jumpserver需要MySQL数据库支持,以下是安装MySQL的步骤:-
拉取镜像
docker pull mysql:5.7
-
创建MySQL数据挂载目录:
sudo mkdir -p /data/docker/jumpserver/mysql/data /data/docker/jumpserver/mysql/conf
-
/data/docker/jumpserver/mysql/conf
下增加配置文件my.cnf
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci
-
运行MySQL Docker容器:
sudo docker run \ -d \ --name=jms_mysql \ --hostname=jms_mysql \ --restart=always \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_USER=jumpserver \ -e MYSQL_PASSWORD=123456 \ -e MYSQL_DATABASE=jumpserver \ -e TZ=Asia/Shanghai \ -e LANG=en_us.UTF-8 \ -p 3306:3306 \ -v /data/docker/jumpserver/mysql/data:/var/lib/mysql \ -v /data/docker/jumpserver/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \ --network jumpserver \ mysql:5.7
-
-
部署Redis
Jumpserver同样需要Redis作为缓存和消息队列服务,以下是安装Redis的步骤:-
拉取镜像
docker pull redis:6.2.6
-
创建Redis数据挂载目录:
mkdir -p /data/docker/jumpserver/redis/data /data/docker/jumpserver/redis/conf
-
在目录
/data/docker/jumpserver/redis/conf
创建配置文件redis.conf
, 增加配置信息:requirepass 123456
-
运行Redis Docker容器:
sudo docker run \ -d \ --restart always \ --name jms_redis \ --hostname jms_redis \ -p 6379:6379 \ -v /data/docker/jumpserver/redis/data:/data \ -v /data/docker/jumpserver/redis/conf/redis.conf:/etc/redis/redis.conf \ --network jumpserver \ redis:6.2.6 redis-server /etc/redis/redis.conf
-
-
生成密钥
- 生成用于Jumpserver的
SECRET_KEY
和BOOTSTRAP_TOKEN
:if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 50); echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16); echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi
- 生成用于Jumpserver的
-
安装Jumpserver
-
创建Jumpserver数据挂载目录:
mkdir -p /data/docker/jumpserver
-
运行Jumpserver Docker容器:
sudo docker run --name jms_all -d \ -p 80:80 \ -p 2222:2222 \ -p 30000-30100:30000-30100 \ -e SECRET_KEY=$SECRET_KEY \ -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN \ -e LOG_LEVEL=ERROR \ -e DB_HOST=jms_mysql \ -e DB_PORT=3306 \ -e DB_USER=jumpserver \ -e DB_PASSWORD=123456\ -e DB_NAME=jumpserver \ -e REDIS_HOST=jms_redis \ -e REDIS_PORT=6379 \ -e REDIS_PASSWORD=123456 \ --privileged=true \ -v /data/docker/jumpserver/core/data:/opt/jumpserver/data \ -v /data/docker/jumpserver/koko/data:/opt/koko/data \ -v /data/docker/jumpserver/lion/data:/opt/lion/data \ -v /data/docker/jumpserver/kael/data:/opt/kael/data \ -v /data/docker/jumpserver/chen/data:/opt/chen/data \ -v /data/docker/jumpserver/web/log:/var/log/nginx \ --network jumpserver \ jumpserver/jms_all:v3.10.10
-
-
登录Jumpserver
- 访问Jumpserver Web界面:
http://<your-ip>
,使用默认的用户名和密码(通常是admin
和admin
)登录。首次登录时会提示修改密码。
- 访问Jumpserver Web界面:
Docker-Compose 部署
为了方便管理,我们可以创建一个docker-compose.yml
文件来实现相同的部署。
-
创建目录
sudo mkdir -p /data/docker/jumpserver/ sudo mkdir -p /data/docker/jumpserver/redis/conf sudo chmod -R 777 /data/docker/jumpserver/
-
增加配置信息
- 在目录
/data/docker/jumpserver/redis/conf
创建配置文件redis.conf
,requirepass 123456
- 在目录
/data/docker/jumpserver/mysql/conf
创建配置文件my.conf
,[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci
- 在目录
-
生成Jumpserver的SECRET_KEY和BOOTSTRAP_TOKEN
if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 50); echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16); echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi
-
创建
docker-compose.yml
文件version: '3' services: mysql: image: mysql:5.7 container_name: jms_mysql hostname: jms_mysql restart: always environment: MYSQL_ROOT_PASSWORD: '123456' MYSQL_USER: 'jumpserver' MYSQL_PASSWORD: '123456' MYSQL_DATABASE: 'jumpserver' MYSQL_CHARSET: 'utf8mb4' MYSQL_COLLATION: 'utf8mb4_unicode_ci' TZ: 'Asia/Shanghai' LANG: 'en_us.UTF-8' command: ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] volumes: - /data/docker/jumpserver/mysql/data:/var/lib/mysql - /data/docker/jumpserver/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf ports: - "3306:3306" networks: - jumpserver redis: image: redis:6.2.6 container_name: jms_redis hostname: jms_redis ports: - "6379:6379" volumes: - /data/docker/jumpserver/redis/data:/data - /data/docker/jumpserver/redis/conf/redis.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf networks: - jumpserver jms_all: image: jumpserver/jms_all:v3.10.10 container_name: jms_all ports: - "80:80" - "2222:2222" environment: SECRET_KEY: ${SECRET_KEY} BOOTSTRAP_TOKEN: ${BOOTSTRAP_TOKEN} LOG_LEVEL: ERROR DB_HOST: jms_mysql DB_PORT: 3306 DB_USER: jumpserver DB_PASSWORD: 123456 DB_NAME: jumpserver REDIS_HOST: jms_redis REDIS_PORT: 6379 REDIS_PASSWORD: 123456 privileged: true depends_on: - mysql - redis volumes: - /data/docker/jumpserver/core/data:/opt/jumpserver/data - /data/docker/jumpserver/koko/data:/opt/koko/data - /data/docker/jumpserver/lion/data:/opt/lion/data - /data/docker/jumpserver/kael/data:/opt/kael/data - /data/docker/jumpserver/chen/data:/opt/chen/data - /data/docker/jumpserver/web/log:/var/log/nginx networks: - jumpserver networks: jumpserver: driver: bridge
-
请注意以下几点:
- 我们定义了三个服务:
mysql
、redis
和jms_all
,每个服务都有自己的配置。 environment
下的变量SECRET_KEY
和BOOTSTRAP_TOKEN
需要你提供具体的值,或者在.env
文件中设置。- 所有服务都连接到名为
jumpserver
的网络。如果你已经有一个名为jumpserver
的网络,Docker Compose将使用现有的网络;否则,它将创建一个新的网络。 - 使用
volumes
将宿主机的目录挂载到容器中,以便持久化数据。 command
在redis
服务中用于指定启动Redis时使用的配置文件。privileged: true
给予jms_all
服务特权模式,根据你的实际需求决定是否需要此设置。
在使用
docker-compose.yml
文件之前,请确保所有路径和环境变量都替换成了你的实际配置,并且创建了相应的目录和文件。然后,你可以使用以下命令启动服务:docker-compose up -d
或者,如果你想要在启动之前查看将要执行的操作,可以使用:
docker-compose config
这将打印出配置的最终结果,而不会实际启动容器。
- 我们定义了三个服务:
-
参考文章
Jumpserver安装
Docker部署JumpServer3.9.0
Docker部署常见应用之企业级堡垒机JumpServer-问题记录