广受欢迎的开源堡垒机JumpServer

前言

大家好,本人TopJohn,互联网码农,开源爱好者。

今天主要介绍下一款备受欢迎的开源堡垒机或者说跳板机,在日常服务器运维中会经常用到,后端或者运维小伙伴可能比较熟悉,是一款日常使用率较高的软件。

官网:https://www.jumpserver.org/

GitHub地址:https://github.com/jumpserver/jumpserver

介绍

JumpServer堡垒机帮助企业以更安全的方式管控和登录各种类型的资产。

JumpServer

功能

主要包括以下6大功能:

  • SSH:Linux / Unix / 网络设备 等
  • Windows:Web 方式连接 / 原生 RDP 连接
  • 数据库:MySQL / Oracle / SQLServer / PostgreSQL 等
  • Kubernetes:支持连接到 K8s 集群中的 Pods
  • Web站点:各类系统的 Web 管理后台
  • 应用:通过 Remote App 连接各类应用

当然,我接触JumpServer还是因为它可以管理众多的服务器(不管是阿里云、腾讯云的ECS还是本地虚拟化的KVM虚拟机),能够使得公司内部能有效协作、规范管理,能够有效管理服务器资源,尤其是在业务、人员权限变动比较大的团体效果尤为明显。

优势

按官方的说法是:

九年时间,倾情投入,用心做好一款堡垒机。

“ JumpServer 从创立至今始终坚持开源开放,始终坚持倾听社区心声,始终坚持高质量快速迭代。我们将继续秉承这些原则,用心做好一款堡垒机。”—— JumpServer 开源项目创始人 广宏伟

确实,JumpServer这款堡垒机在开源领域目前还没有对手,一般的互联网金融科技企业管理服务器资产应该都会选择JumpServer

  • 开源:零门槛,线上快速获取和安装

  • 无插件:仅需浏览器,极致 Web Terminal 使用体验

  • 分布式:轻松支持大规模并发访问

  • 多云支持:一套系统,同时管理不同云上资产

  • 云端存储:审计录像存放在云端,永不丢失

  • 多租户:一套系统,多个子公司和部门同时使用

JumpServer 堡垒机支持事前授权、事中监察、事后审计,满足等保合规要求,符合 4A 规范的堡垒机:

  • 身份验证 / Authentication:防止身份冒用和复用
  • 授权控制 / Authorization:防止内部误操作和权限滥用
  • 账号管理 / Accounting:人员和资产的管理
  • 安全审计 / Auditing:追溯的保障和事故分析的依据

尤其是随着等保、密评等政府信息化项目的要求,堡垒机的需求也日渐凸显,除了企业自身需求,也会有一些项目等保密评要求使用堡垒机。

架构

JumpServer 采用分层架构,分别是负载层、接入层、核心层、数据层、存储层,下图为官方给出的应用架构图:

  • Core 组件是 JumpServer 的核心组件,其他组件依赖此组件启动。
  • Koko 是服务于类 Unix 资产平台的组件,通过 SSH、Telnet 协议提供字符型连接。
  • Lion 是服务于 Windows 资产平台的组件,用于 Web 端访问 Windows 资产。
  • Omnidb 是服务于数据库的组件,用于可视化界面纳管数据库。
  • Razor 是服务于 RDP 协议组件,该组件主要功能是通过 JumpServer Client 方式访问 Windows 资产。
  • Magnus 是服务于数据库的组件,用于通过客户端代理访问数据库。
  • Celery 是处理异步任务的组件,用于执行 JumpServer 相关的自动化任务。

JumpServer 分为多个组件,大致的架构如下图所示,其中 LinaLuna 为纯静态文件,最终由 Nginx 整合。

组件化设计,每个组件都有清晰的职责,能够较为灵活的拓展,不至于整个系统变得臃肿!

安装部署

JumpServer安装方式有4种:

  • Linux 单机部署
  • Linux 集群模式部署
  • Kubernetes Helm模式部署
  • 源码部署

说说这几种部署方式的应用场景:

  1. 单机部署方式适合用于中小型企业,管理的资产不是特别多的情况,具体也看服务器配置了,目前我用的就是这种方式,我比较青睐这种方式,维护简单,没压力,更新也十分便捷。

  2. 集群模式部署的话,类似单机模式,只不过利用了nfs,把redis和mysql单独部署,可以利用多服务器部署JumpServer实例,将实例运行压力分摊到各节点上,提升集群并发访问的性能,引入了私有化云存储minioElasticsearch部署略微麻烦,维护升级也蛋疼,如果单机版本沟通的话还是推荐单机版。

  3. Kubernetes Helm模式部署,这种模式适用于公司有K8s集群的,直接调整配置文件通过Helm命令行部署,适合大型企业,有一定规模的运维人员。

  4. 源码部署这种方式适合对JumpServer十分熟练的选手了,想进行深入研究的童鞋可以尝试一下。

Linux 单机部署

下面我就单机部署讲解下操作步骤,毕竟其他的方式也不适合咱,就不多折腾了。

在线安装

1. 安装部署

在线安装适用于服务器管控比较松的公司,互联网企业,如果是银行等金融科技的话,老老实实用离线安装,也不麻烦。

  • 国内直接拉去官方脚本安装:
#️⃣ root@localhost:/opt#
curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash

████████████████████████████████████████ 100%
[Success]: download install script to /opt/jumpserver-installer-v3.7.1
[Info]: Start executing the installation script.
[Info]: In an automated script deployment, note the message prompts on the screen.
████████████████████████████████████████ 100%
[Success]: The Installation is Complete.

For more commands, you can enter jmsctl --help to view help information.
  • 其他地区拉GitHub上的脚本安装:
#️⃣ root@localhost:/opt#
curl -sSL https://github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash

████████████████████████████████████████ 100%
[Success]: download install script to /opt/jumpserver-installer-v3.7.1
[Info]: Start executing the installation script.
[Info]: In an automated script deployment, note the message prompts on the screen.
████████████████████████████████████████ 100%
[Success]: The Installation is Complete.

For more commands, you can enter jmsctl --help to view help information.

首次安装后需要修改配置文件,定义 DOMAINS 字段后即可正常使用

如果服务器是一键安装并且旧版本就已经使用 JumpServer 开启了 HTTPS,则不需要进行任何更改。

需要使用 IP 地址来访问 JumpServer 的场景,可以根据自己的 IP 类型来填写 config.txt 配置文件中 DOMAINS 字段为公网 IP 还是内网 IP。

  # 打开config.txt 配置文件,定义 DOMAINS 字段
  vim /opt/jumpserver/config/config.txt 

  # 可信任 DOMAINS 定义,
  # 定义可信任的访问 IP, 请根据实际情况修改, 如果是公网 IP 请改成对应的公网 IP,
  # DOMAINS="demo.jumpserver.org"    # 使用域名访问
  # DOMAINS="172.17.200.191"         # 使用 IP 访问
  # DOMAINS="demo.jumpserver.org,172.17.200.191"    # 使用 IP 和 域名一起访问
  DOMAINS=

安装完成后 JumpServer 配置文件路径为: /opt/jumpserver/config/config.txt

cd /opt/jumpserver-installer-v3.7.1

# 启动
./jmsctl.sh start

# 停止
./jmsctl.sh down

# 卸载
./jmsctl.sh uninstall

# 帮助
./jmsctl.sh -h
2. 环境访问

安装成功后,通过浏览器访问登录 JumpServer

地址: http://<JumpServer服务器IP地址>:<服务运行端口>
用户名: admin
密码: admin

登录页

在线升级

中国大陆执行下列脚本:

cd /opt
wget https://resource.fit2cloud.com/jumpserver/installer/releases/download/v3.7.1/jumpserver-installer-v3.7.1.tar.gz
tar -xf jumpserver-installer-v3.7.1.tar.gz
cd jumpserver-installer-v3.7.1

其他地区执行下列脚本:

cd /opt
wget https://github.com/jumpserver/installer/releases/download/v3.7.1/jumpserver-installer-v3.7.1.tar.gz
tar -xf jumpserver-installer-v3.7.1.tar.gz
cd jumpserver-installer-v3.7.1

然后执行更新,再启动:

./jmsctl.sh upgrade

# 启动 JumpServer 服务
./jmsctl.sh start	

离线安装

1. 安装部署

离线安装相对于在线安装只是将下载安装包这步改成了手动上传,区别不大:

cd /opt
tar -xf jumpserver-offline-installer-v3.7.1-amd64.tar.gz
cd jumpserver-offline-installer-v3.7.1-amd64
# 根据需要修改配置文件模板, 如果不清楚用途可以跳过修改
cat config-example.txt
# JumpServer configuration file example.
#
# 如果不了解用途可以跳过修改此配置文件, 系统会自动填入
# 完整参数文档 https://docs.jumpserver.org/zh/master/admin-guide/env/

################################## 镜像配置 ###################################
#
# 国内连接 docker.io 会超时或下载速度较慢, 开启此选项使用华为云镜像加速
# 取代旧版本 DOCKER_IMAGE_PREFIX
#
# DOCKER_IMAGE_MIRROR=1

################################## 安装配置 ###################################
#
# JumpServer 数据库持久化目录, 默认情况下录像、任务日志都在此目录
# 请根据实际情况修改, 升级时备份的数据库文件(.sql)和配置文件也会保存到该目录
#
VOLUME_DIR=/data/jumpserver

# 加密密钥, 迁移请保证 SECRET_KEY 与旧环境一致, 请勿使用特殊字符串
# (*) Warning: Keep this value secret.
# (*) 勿向任何人泄露 SECRET_KEY
#
SECRET_KEY=

# 组件向 core 注册使用的 token, 迁移请保持 BOOTSTRAP_TOKEN 与旧环境一致,
# 请勿使用特殊字符串
# (*) Warning: Keep this value secret.
# (*) 勿向任何人泄露 BOOTSTRAP_TOKEN
#
BOOTSTRAP_TOKEN=

# 日志等级 INFO, WARN, ERROR
#
LOG_LEVEL=ERROR

# JumpServer 容器使用的网段, 请勿与现有的网络冲突, 根据实际情况自行修改
#
DOCKER_SUBNET=192.168.250.0/24

# ipv6 nat, 正常情况下无需开启
# 如果宿主不支持 ipv6 开启此选项将会导致无法获取真实的客户端 ip 地址
#
USE_IPV6=0
DOCKER_SUBNET_IPV6=fc00:1010:1111:200::/64

################################# MySQL 配置 ##################################
# 外置 MySQL 需要输入正确的 MySQL 信息, 内置 MySQL 系统会自动处理
#
DB_HOST=mysql
DB_PORT=3306
DB_USER=root
DB_PASSWORD=
DB_NAME=jumpserver

# 如果外置 MySQL 需要开启 TLS/SSL 连接, 参考 https://docs.jumpserver.org/zh/master/install/install_security/#ssl
#
# DB_USE_SSL=True

################################# Redis 配置 ##################################
# 外置 Redis 需要请输入正确的 Redis 信息, 内置 Redis 系统会自动处理
#
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=

# 如果使用外置 Redis Sentinel, 请手动填写下面内容
#
# REDIS_SENTINEL_HOSTS=mymaster/192.168.100.1:26379,192.168.100.1:26380,192.168.100.1:26381
# REDIS_SENTINEL_PASSWORD=your_sentinel_password
# REDIS_PASSWORD=your_redis_password
# REDIS_SENTINEL_SOCKET_TIMEOUT=5

# 如果外置 Redis 需要开启 TLS/SSL 连接, 参考 https://docs.jumpserver.org/zh/master/install/install_security/#redis-ssl
#
# REDIS_USE_SSL=True

################################## 访问配置 ###################################
# 对外提供服务端口, 如果与现有服务冲突请自行修改
#
HTTP_PORT=80
SSH_PORT=2222
MAGNUS_MYSQL_PORT=33061
MAGNUS_MARIADB_PORT=33062
MAGNUS_REDIS_PORT=63790

################################# HTTPS 配置 #################################
# 参考 https://docs.jumpserver.org/zh/master/admin-guide/proxy/ 配置
#
# HTTPS_PORT=443
# SERVER_NAME=your_domain_name
# SSL_CERTIFICATE=your_cert
# SSL_CERTIFICATE_KEY=your_cert_key
#

# Nginx 文件上传下载大小限制
#
CLIENT_MAX_BODY_SIZE=4096m

################################## 组件配置 ###################################
# 组件注册使用, 默认情况下向 core 容器注册, 集群环境需要修改为集群 vip 地址
#
CORE_HOST=http://core:8080
PERIOD_TASK_ENABLED=True

# Core Session 定义,
# SESSION_COOKIE_AGE 表示闲置多少秒后 session 过期,
# SESSION_EXPIRE_AT_BROWSER_CLOSE=true 表示关闭浏览器即 session 过期
#
# SESSION_COOKIE_AGE=86400
SESSION_EXPIRE_AT_BROWSER_CLOSE=True

# 可信任 DOMAINS 定义,
# 定义可信任的访问 IP, 请根据实际情况修改, 如果是公网 IP 请改成对应的公网 IP,
# DOMAINS="demo.jumpserver.org"
# DOMAINS="172.17.200.191"
# DOMAINS="demo.jumpserver.org,172.17.200.191"
DOMAINS=

# Lion 开启字体平滑, 优化体验
#
JUMPSERVER_ENABLE_FONT_SMOOTHING=True

################################# XPack 配置 #################################
# XPack 包, 开源版本设置无效
#
RDP_PORT=3389
MAGNUS_POSTGRESQL_PORT=54320
MAGNUS_ORACLE_PORTS=30000-30030

################################## 其他配置 ##################################
# 终端使用宿主 HOSTNAME 标识, 首次安装自动生成
#
SERVER_HOSTNAME=${HOSTNAME}

# 当前运行的 JumpServer 版本号, 安装和升级完成后自动生成
#
CURRENT_VERSION=
# 安装
./jmsctl.sh install

# 启动
./jmsctl.sh start

安装完成后 JumpServer 配置文件路径为: /opt/jumpserver/config/config.txt

cd jumpserver-offline-release-v3.7.1-amd64

# 启动
./jmsctl.sh start

# 停止
./jmsctl.sh down

# 卸载
./jmsctl.sh uninstall

# 帮助
./jmsctl.sh -h
2. 环境访问

安装成功后,通过浏览器访问登录 JumpServer

地址: http://<JumpServer服务器IP地址>:<服务运行端口>
用户名: admin
密码: admin

登录页

离线升级

从飞致云社区 下载最新的 linux/amd64 离线包, 并上传到部署服务器的 /opt 目录。

cd /opt
tar -xf jumpserver-offline-installer-v3.7.1-amd64.tar.gz
cd jumpserver-offline-installer-v3.7.1-amd64
./jmsctl.sh upgrade
./jmsctl.sh start

功能介绍

1. 页面展示

  • 页面左侧为功能菜单区,第一次登录默认展示仪表盘界面。
  • 右上方区域为功能按钮,可以快速跳转 站内信、Web 终端、工单、系统设置等功能。
  • 可以在图示序号1的位置,进行功能视图的切换。

2. 功能说明

序号名称说明
1控制台管理员操作入口,通过控制台,管理员可进行用户管理、资产管理、应用管理、账号管理、权限管理、访问控制等配置。
审计台审计员操作入口,通过审计台,审计员可查看各会话的连接详细信息及各类型日志,组织审计员只能够看到该组织下的相关数据。
工作台普通用户操作入口,通过工作台,普通用户可以通过工作台看到自己有权限操作运维的资产。
2站内信站内消息通知中心,接收工单处理提醒,高危命令告警等通知。
3Web 终端资产运维操作入口,通过Web 终端进入资产运维页面,进行资产正常运维操作。
4工单工单入口,通过该按钮进入工单页面,查看提交的工单及待审批的功能等。
5系统设置系统设置入口,通过该按钮进入系统设置中,配置认证,安全等各类型系统参数。
6帮助帮助入口,通过该按钮进入帮助页面,可访问产品官网或下载系统工具。
7个人信息个人信息入口,点击该按钮,查看个人账号信息,用于API 调用的APIKey,当前用户连接资产使用的资产令牌以及退出登录的按钮等。

3. 常用功能

我就个人使用感觉给大家讲解下我所使用到的JumpServer的核心功能,如何使用JumpServer保证公司内部资产正常流转使用。

  1. 作为一名公司IT运维管理员,在安装完JumpServer之后需要对JumpServer进行一系列的配置,点击右上角的系统设置进行一系列的配置,比如堡垒机的域名、邮件服务器、认证设置(一般公司都会有统一认证服务)、安全设置等。
  2. 配置完成后,管理员可以进入控制台进行用户配置,确定哪些人员需要使用堡垒机,进行资产管理,将所需添加的公司内部虚拟机、物理机、各种云服务器、数据库进行配置,添加进堡垒机,然后进行账号管理,配置这些服务器所需要的账号,最后配置权限,确保每个用户和资产的关联关系,保证资产可见范围仅所需用户可见。
  3. 对于普通用户来说,堡垒机的作用就是可以在不知道各种服务器数据库账号密码的情况下能够借助堡垒机进行使用,包括进入命令行进行命令行操作(执行linux命令、脚本)、一系列文件上传下载操作。可以通过web终端进行命令行操作,文件操作可以通过可视化的文件管理进行拖拽。当然也可以直接配置到一些例如xshell、termius、iterms2、finalshell命令行工具中直接使用,个人倾向直接配置到命令行工具中使用,这样就不需要打开浏览器,直接使用命令行工具操作,无论从界面还是可操作性来讲都比较不错。
  4. 最后一块就是审计这块,系统中有一个单独的审计台界面,用于查看各种日志、操作记录等,当出现一些比较严重的事故,用于调查事故原因以及追责的时候可能会用到。(一般情况下,也不希望看~)

总结

个人使用经验,JumpServer很适合有内部服务器或者云服务器众多,后端、运维较多,有一定管理需求的企业,能够通过JumpServer将服务器有效的管理起来,同时能够避免因为密码泄露造成分风险,本人有幸使用JumpServer几年有余,目前一直保持更新,目前使用v3.7.1最新版本。

如果在使用过程中有遇到问题,欢迎与作者交流~

公众号-开源技术实验室