原 【DB宝48】JumpServer:多云环境下更好用的堡垒机
Tags: 原创LinuxDocker安全JumpServer堡垒机
一、JumpServer简介
JumpServer 是全球首款开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 规范的运维安全审计系统。
JumpServer 使用 Python / Django 为主进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。
JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。
官网网址:https://www.jumpserver.org/
文档:https://docs.jumpserver.org/zh/master/
GitHub:https://github.com/jumpserver/jumpserver
1.1、页面展示
1.2、特色优势
- 开源: 零门槛,线上快速获取和安装;
- 分布式: 轻松支持大规模并发访问;
- 无插件: 仅需浏览器,极致的 Web Terminal 使用体验;
- 多云支持: 一套系统,同时管理不同云上面的资产;
- 云端存储: 审计录像云端存储,永不丢失;
- 多租户: 一套系统,多个子公司和部门同时使用;
- 多应用支持: 数据库,Windows远程应用,Kubernetes。
1.3、功能列表
身份认证 Authentication | 登录认证 | 资源统一登录与认证 |
LDAP/AD 认证 | ||
RADIUS 认证 | ||
OpenID 认证(实现单点登录) | ||
CAS 认证 (实现单点登录) | ||
MFA认证 | MFA 二次认证(Google Authenticator) | |
RADIUS 二次认证 | ||
登录复核 | 用户登录行为受管理员的监管与控制:small_orange_diamond: | |
账号管理 Account | 集中账号 | 管理用户管理 |
系统用户管理 | ||
统一密码 | 资产密码托管 | |
自动生成密码 | ||
自动推送密码 | ||
密码过期设置 | ||
批量改密 | 定期批量改密:small_orange_diamond: | |
多种密码策略:small_orange_diamond: | ||
多云纳管 | 对私有云、公有云资产自动统一纳管:small_orange_diamond: | |
收集用户 | 自定义任务定期收集主机用户:small_orange_diamond: | |
密码匣子 | 统一对资产主机的用户密码进行查看、更新、测试操作:small_orange_diamond: | |
授权控制 Authorization | 多维授权 | 对用户、用户组、资产、资产节点、应用以及系统用户进行授权 |
资产授权 | 资产以树状结构进行展示 | |
资产和节点均可灵活授权 | ||
节点内资产自动继承授权 | ||
子节点自动继承父节点授权 | ||
应用授权 | 实现更细粒度的应用级授权 | |
MySQL 数据库应用、RemoteApp 远程应用:small_orange_diamond: | ||
动作授权 | 实现对授权资产的文件上传、下载以及连接动作的控制 | |
时间授权 | 实现对授权资源使用时间段的限制 | |
特权指令 | 实现对特权指令的使用(支持黑白名单) | |
命令过滤 | 实现对授权系统用户所执行的命令进行控制 | |
文件传输 | SFTP 文件上传/下载 | |
文件管理 | 实现 Web SFTP 文件管理 | |
工单管理 | 支持对用户登录请求行为进行控制:small_orange_diamond: | |
组织管理 | 实现多租户管理与权限隔离:small_orange_diamond: | |
安全审计 Audit | 操作审计 | 用户操作行为审计 |
会话审计 | 在线会话内容审计 | |
历史会话内容审计 | ||
录像审计 | 支持对 Linux、Windows 等资产操作的录像进行回放审计 | |
支持对 RemoteApp:small_orange_diamond:、MySQL 等应用操作的录像进行回放审计 | ||
指令审计 | 支持对资产和应用等操作的命令进行审计 | |
文件传输 | 可对文件的上传、下载记录进行审计 | |
数据库审计 Database | 连接方式 | 命令方式 |
Web UI方式 :small_orange_diamond: | ||
支持的数据库 | MySQL | |
Oracle :small_orange_diamond: | ||
MariaDB :small_orange_diamond: | ||
PostgreSQL :small_orange_diamond: | ||
功能亮点 | 语法高亮 | |
SQL格式化 | ||
支持快捷键 | ||
支持选中执行 | ||
SQL历史查询 | ||
支持页面创建 DB, TABLE | ||
会话审计 | 命令记录 | |
录像回放 |
1.4、架构图
- 首先前端是nginx提供的动态页面,可以通过浏览器来进行访问;
- 接着jumpserver为管理后台,管理员可以通过web页面进行资产管理、用户管理、资产授权等操作,用户可以通过web页面进行资产登录、文件管理等操作;
- coco 为ssh server和 web terminal server,用户可以使用自己的账户通过ssh或者web terminal访问ssh协议和telnet协议资产;
- Luna 为web terminal server前端页面,用户使用web terminal方式登录所需要的组件;
- Guacamole 为RDP协议和vnc协议资产组件,用户可以通过web terminal来连接RDP协议和vnc协议资产(暂时只能通过web terminal来访问);
1.5、端口说明
端口涉及如下端口:
- Jumpserver 默认端口为 8080/tcp ,浏览器访问的端口
- Coco 默认 SSH 端口为 2222/tcp,Web Terminal默认 端口为 5000/tcp ,通过ssh连接的时候使用的端口
- Guacamole 默认端口为 8081/tcp
- Nginx 默认端口为 80/tcp
- Redis 默认端口为 6379/tcp
- Mysql/Mariadb 默认端口为 3306/tcp
1.6、产品组件
Jumpserver:管理后台,是核心组件(Core), 使用 Django Class Based View 风格开发,支持 Restful API。
Coco:Coco为 SSH Server 和 Web Terminal Server。用户可以通过使用自己的账户登录 SSH 或者 Web Terminal直接访问被授权的资产。不需要知道服务器的账户和密码,现在 Coco 已经被 koko 取代。
Luna:luna 为 Web Terminal Server 前端页面,用户使用 Web Terminal 方式登录时所需要的插件。
Guacamole:Guacamole是一个开源项目,为远程桌面提供解决方案。Jumpserver 使用其组件实现 RDP和VNC 功能,Jumpserver 并没有修改其代码而是添加了额外的插件,支持 Jumpserver 调用。
二、安装JumpServer
- 极速安装:https://docs.jumpserver.org/zh/master/install/setup_by_fast/
- 完整文档:https://docs.jumpserver.org
- 演示视频:https://www.bilibili.com/video/BV1ZV41127GB
有2种安装方式,可以一键自动部署,也可以手动部署,建议一键自动部署。
2.1、一键自动部署
仅需两步快速安装 JumpServer:
- 准备一台 2核4G (最低)且可以访问互联网的 64 位 Linux 主机;
- 以 root 用户执行如下命令一键安装 JumpServer。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | -- 一键安装启动 curl -sSL https://github.com/jumpserver/jumpserver/releases/download/v2.8.2/quick_start.sh | bash -- 注意:安装过程需要下载docker环境,重启docker,下载很多镜像,最后大约占用空间3g左右,安装时间大约30分钟。 [root@docker36 jumpserver-installer-v2.8.2]# docker images | grep jumpserver jumpserver/core v2.8.2 f3dd5c1946ec 2 days ago 1.01GB jumpserver/guacamole v2.8.2 8869e8512eec 2 days ago 824MB jumpserver/lina v2.8.2 98abb9179db1 2 days ago 27.9MB jumpserver/luna v2.8.2 d2e17fada2f6 2 days ago 27MB jumpserver/koko v2.8.2 40cdabc32153 2 days ago 426MB jumpserver/mysql 5 697daaecf703 3 months ago 448MB jumpserver/redis 6-alpine f731cd48185c 3 months ago 31.6MB jumpserver/nginx alpine2 b47070d178ad 18 months ago 18.5MB -- 若不能下载,请添加以下解析: echo " 13.229.188.59 github.com 199.232.4.133 raw.githubusercontent.com " >> /etc/hosts echo " nameserver 114.114.114.114 nameserver 8.8.8.8 nameserver 223.5.5.5 " > /etc/resolv.conf -- 启动 cd /opt/jumpserver-installer-v2.8.2/ ./jmsctl.sh start -- 会启动9个容器,创建一个网络叫jms_net,子网为:"192.168.250.0/24" -- 首次启动可能会报错,可以使用命令“docker logs -f jms_core --tail 200”查看,等表结构合并完毕后,确定该命令输出都是 ok, 没有 error, 重新 start 即可,详见https://docs.jumpserver.org/zh/master/install/setup_by_fast/ -- Web访问 http://192.168.66.36:8080 https://192.168.66.36:8443 (默认用户名密码为:admin/admin) -- 启动后的容器和状态 [root@docker36 jumpserver-installer-v2.8.2]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26b95ecb8900 jumpserver/nginx:alpine2 "sh -c 'crond -b -d …" 57 seconds ago Up 51 seconds (healthy) 0.0.0.0:8080->80/tcp, 0.0.0.0:8443->443/tcp jms_nginx 9c25659c23c4 jumpserver/luna:v2.8.2 "/docker-entrypoint.…" About a minute ago Up About a minute (healthy) 80/tcp jms_luna c8d74738aaa2 jumpserver/lina:v2.8.2 "/docker-entrypoint.…" About a minute ago Up About a minute (healthy) 80/tcp jms_lina bc24581c6d0a jumpserver/koko:v2.8.2 "./entrypoint.sh" About a minute ago Up About a minute (healthy) 0.0.0.0:2222->2222/tcp, 5000/tcp jms_koko cc17285dc6ec jumpserver/guacamole:v2.8.2 "/init" About a minute ago Up About a minute (healthy) 8080/tcp jms_guacamole edac0a216aa3 jumpserver/core:v2.8.2 "./entrypoint.sh sta…" About a minute ago Up About a minute (healthy) 8070/tcp, 8080/tcp jms_celery 2ca03ab4d62d jumpserver/core:v2.8.2 "./entrypoint.sh sta…" 11 minutes ago Up 11 minutes (healthy) 8070/tcp, 8080/tcp jms_core 69e9bdede65f jumpserver/redis:6-alpine "docker-entrypoint.s…" 13 minutes ago Up 13 minutes (healthy) 6379/tcp jms_redis c73896dc22ad jumpserver/mysql:5 "docker-entrypoint.s…" 13 minutes ago Up 13 minutes (healthy) 3306/tcp, 33060/tcp jms_mysql [root@docker36 jumpserver-installer-v2.8.2]# [root@docker36 jumpserver-installer-v2.8.2]# ./jmsctl.sh status Name Command State Ports ----------------------------------------------------------------------------------------------------------- jms_celery ./entrypoint.sh start task Up (healthy) 8070/tcp, 8080/tcp jms_core ./entrypoint.sh start web Up (healthy) 8070/tcp, 8080/tcp jms_guacamole /init Up (healthy) 8080/tcp jms_koko ./entrypoint.sh Up (healthy) 0.0.0.0:2222->2222/tcp, 5000/tcp jms_lina /docker-entrypoint.sh ngin ... Up (healthy) 80/tcp jms_luna /docker-entrypoint.sh ngin ... Up (healthy) 80/tcp jms_mysql docker-entrypoint.sh --cha ... Up (healthy) 3306/tcp, 33060/tcp jms_nginx sh -c crond -b -d 8 && ngi ... Up (healthy) 0.0.0.0:8443->443/tcp, 0.0.0.0:8080->80/tcp jms_redis docker-entrypoint.sh redis ... Up (healthy) 6379/tcp |
执行过程: