kaixin
Published on 2023-12-06 / 2 Visits
0

堡垒机

堡垒机介绍

为什么要用堡垒机:

  • 数据安全与防止泄露成为政府和企业都非常关心的议题,因此堡垒机也应运而生,主要是为了保证服务器的安全,误操作的追查,等等。
  • 场景:在某旅游出行平台官网及APP上登录、下单或交易时,跳转均出现问题,导致操作无法顺利完成。造成直接经济损失巨大,按照其上一季度的财报公布的数据,宕机的损失为平均每小时106.48万美元。最终,平台回应此事称系由于员工误操作删除了服务器上的执行代码导致。不论是因为黑客攻击还是员工误操作,真金白银800万美元的经验教训告诫我们对于数据的安全和备份必须要引起重视!堡垒机能解决这2个问题,一是攻击面小,二是可定制双机备份
  • 总体来说,堡垒机可以保证运维人员或者开发人员更为规范的进行操作服务器,真的出现问题,可以通过回溯等方式恢复误操作的内容。

堡垒机起源

  • 理念来源于跳板机,认识到跳板机的不足,需要更新、更好的安全技术理念来实现运维操作管理,需要一种能满足角色管理与授权审批、信息资源访问控制、操作记录和审计、系统变更和维护控制要求,并生成一些统计报表配合管理规范来不断提升IT内控的合规性的产品。
  • 2005年前后,运维堡垒机开始以一个独立的产品形态被广泛部署,有效地降低了运维操作风险,使得运维操作管理变得更简单、更安全。2005年齐治科技研发出世界第一台运维堡垒机

堡垒机作用

  1. 核心系统运维和安全审计管控。
  2. 过滤和拦截非法访问、恶意攻击,阻断不合法命令,审计监控、报警、责任追踪。
  3. 报警、记录、分析、处理。
  4. 核心功能:
    1. 单点登录功能
    2. 账户管理功能
    3. 身份验证
    4. 资源授权
    5. 访问控制
    6. 操作审计
  5. 4A服务:
    1. 身份验证(authentication):登录审核,用户登录会受到管理员的监督,对登录的ip进行限制访问。
    2. 授权控制(authorization):更为细粒度的进行权限限制,限制权限命令,文件权限,ssh权限,数据库权限,基于sudo限制,显示那些文件权限,以及数据库链接权限限制。
    3. 账户管理(Accounting):用户管理,普通用户,超级管理员用户,统一密码管理,过期时间,密码修改策略等,不仅仅是/etc/passwd 还可以接入第三方数据库,如ldap统一认证服务。
    4. 安全审计(Auditing):登录审计,用户登录行为的日志记录,记录用户的操作,限制ssh用户登录的链接会话,录像用户操作,实时的监控户监控用户的行为,可以实时中断。比如记录用户A在服务器的一举一动,每个敲击命令,同时还有录屏功能等等。

image-20231107214724443

应用场景

  1. 多个用户使用同一账号: 多出现在同一工作组中,由于工作需要,同时系统管理员账号唯一,因此只能多用户共享同一账号;如果发生安全事故,不仅难以定位账号的实际使用者和责任人,而且无法对账号的使用范围进行有效控制,存在较大的安全风险和隐患。
  2. 一个用户有多个账户: 目前一个维护人员使用多个账号时较为普遍的情况,用户需要记忆多套口令同时在多套主机系统、网络设备之间切换,降低工作效率,增加工作复杂度。
  3. 缺少统一的权限管理平台,难以实现更细粒度的命令权限控制: 维护人员的权限大多是粗放管理,无基于最小权限分配原则的用户权限管理,难以实现更细粒度的命令权限控制,系统安全性无法充分保证。
  4. 无法制定统一的访问审计策略,审计粒度粗:各个网络设备、主机系统、数据库是分别单独审计记录访问行为,由于没有统一审计策略,而且各系统自身审计日志内容深浅不一,难以及时通过系统自身审计发现违规操作行为和追查取证;
  5. 传统的网路安全审计系统无法对维护人员经常使用的SSH、RDP等加密、图形操作协议进行内容审计

跳板机

  • 跳板机就是一台服务器,运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作,跳板机是开发者登录到服务器的唯一途径,开发者必须先登录跳板机,再通过跳板机登录到应用服务器。
  • 跳板机属于内控堡垒机范畴,是一种用于单点登陆的主机应用系统。跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然后从这台服务器再登录到目标设备进行维护。但跳板机并没有实现对运维人员操作行为的控制和审计,此外,跳板机存在严重的安全风险,一旦跳板机系统被攻入,则将后端资源风险完全暴露无遗。
  • 缺点与优点:
    • 优势:集中式进行管理
    • 缺点:没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中还是会出现误操作,违规操作等导致的事故,一旦出现操作事故很难定位到原因和责任人。
  • 功能:
    • 跳板机不让操作人员直接登录服务器操作,而是通过跳板机作为媒介,在跳板机中进行对服务器的操作,在服务器中做了iptables的限制,类似于只有跳板机的ip才能允许,其他的ip不可以。

image-20231107214200004

堡垒机总结

  • 堡垒机就是跳板机的超级升级版本,不仅仅有跳板机的全部作用,同时具备了,对用户的管理,资产管理,权限控制,同时也具备审计功能,通过实时监控、录像回放等方式,也有效地解决了操作过程不透明的问题

JunpServer堡垒机

文档https://docs.jumpserver.org/zh/master/

运行方式

image-20231107213346461

主要组件:v2版本,现如今已经到达v4版本。

image-20231107221240093

lina组件:	
    前端的代码,提供美化的前端网页,也就是网页展示,前端进程
    是 JumpServer 的前端 UI 项目, 主要使用 Vue, Element UI 完成, 名字来源于 Dota 英雄 Lina
luna组件:
    实现网页办的命令行程序
    是 JumpServer Web Terminal 前端项目(网页命令行)

core:
    python的后端,处理用户的请求逻辑,运行的是django框架的代码,提供json数据,发给前端,前端解析json数据展示在页面上
    是 JumpServer 的核心组件,由 Django 二次开发而来。

coco/koko:
    基于golang开发的程序,实现client ssh > koko服务,也就是命令行登录的junmpserver入口
    是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。

guacamole:
    实现vnc远程桌面的服务器,与阿里云vnc远程连接与腾讯云的vnc远程连接类似,防止服务器ssh服务器挂了,无法登录服务器
    使用了 Apache 软件基金会的开源项目 Guacamole,JumpServer 使用 Golang 和 Vue 重构了 Guacamole 实现 RDP/VNC 协议跳板机功能。

每个组件就是一个进程,只有运行成功后还需要进行整合起来,整合成为一个可以访问的同意入口,这个里就使用到了nginx

架构图

image-20231107221339313

说明

安装的说明文档:https://docs.jumpserver.org/zh/v2/dev/build/#_17
注意:
    这种开源工具,没必要追求太新的,功能太多,用不上,且部署繁琐
选择的版本:v2
相关变量说明:https://docs.jumpserver.org/zh/v3/guide/env/

1.安装Mysql

# 要求数据库版本为mysql大于等于5.7
1.装mysql的yum的仓库源
    yum -y localinstall http://mirrors.ustc.edu.cn/mysql-repo/mysql57-community-release-el7.rpm

2.关闭秘钥检查
    sed -i '/gpgcheck=/ s#1#0#' /etc/yum.repos.d/mysql-community*

3.重置yum的缓存
    yum clean all && yum makecache
    
4.安装mysql
    yum install -y mysql-community-server

6.启动mysql,查看默认密码
    密码的说明文档:https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
    systemctl start mysqld	
    sudo grep 'temporary password' /var/log/mysqld.log # 默认密码
    登录后执行:
        set global validate_password_policy=LOW; # 让mysql支持弱密码
        ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';# 进去重置密码


8.设置授权密码
    mysql -uroot -p12345678 -e "create database jumpserver default charset 'utf8';" # 创建一个数据库支持中文
    mysql -uroot -p12345678 -e "create user 'jumpserver'@'%' identified by 'jumpserver';" # 设置远程授权账户
    mysql -uroot -p12345678 -e "grant all privileges on jumpserver.* to 'jumpserver'@'%';" # 设置当前用户可以访问的权限
    mysql -uroot -p12345678 -e "flush privileges;" # 刷新权限表

9.通过新创建的账户进行验证
    mysql -ujumpserver -pjumpserver -e "show databases;"

image-20250514225641151


2.安装Redis

# redis大于等于5.0

1.安装编译依赖
    yum -y install epel-release wget make gcc-c++

2.下载源码包
    wget -P /opt https://download.redis.io/releases/redis-6.2.4.tar.gz

3.解压进入目录
    tar -xzvf redis-6.2.4.tar.gz && cd redis-6.2.4
    
4.编译安装
    # 没有就生成makefile文件
    ./configure 
    make && make install
    ln -s /opt/redis-6.2.4/src/ /opt/redis

6.修改配置文件
    cp /opt/redis-6.2.4/redis.conf /opt/redis
    sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /opt/redis/redis.conf # 设置往外可以访问
    sed -i "s/daemonize no/daemonize yes/g" /opt/redis/redis.conf # 守护进程执行,后台执行
    sed -i "561i maxmemory-policy allkeys-lru" /opt/redis/redis.conf # 内存优化
    sed -i "481i requirepass jumpserver" /opt/redis/redis.conf # 修改密码
    

7.配置systemctl 命令启动脚本
    vim /etc/systemd/system/redis.service
    [Unit]
    Description=Redis persistent key-value database
    After=network.target
    After=network-online.target
    Wants=network-online.target

    [Service]
    Type=forking
    PIDFile=/var/run/redis_6379.pid
    ExecStart=/opt/redis/redis-server /opt/redis/redis.conf # 启动
    ExecReload=/bin/kill -s HUP $MAINPID # 重启
    ExecStop=/bin/kill -s QUIT $MAINPID # 停止的

    [Install]
    WantedBy=multi-user.target

 
8.重载并启动reids,添加环境变量
    systemctl daemon-reload
    systemctl start redis
    
    vim /etc/profile
    PATH=$PATH:$HOME/bin:/opt/redis/
    source /etc/profile # 重载

image-20250514231521538


3.配置基础环境

1.关闭防火墙,防止防火导致各个组件之间不同信。
    systemctl stop firewalld # 
    iptables -F
    sed -i '/^SELINUX=/ s#enforcing#disabled#' /etc/selinux/config # 关闭selinux防火墙

2.配置数据源
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

3.基础软件安装
    yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate  openldap-devel gcc gcc-c++
    yum -y install git python-pip  automake autoconf python-devel vim sshpass lrzsz readline-devel  zlib zlib-devel openssl openssl-devel

4.配置字符集
    echo 'LANG="en_US.UTF-8"' > /etc/locale.conf

4.安装Core

image-20231108212402180


4-1.安装Python环境

# 当前是2.12.0 版本需要使用到 3.6的python环境

1.安装python3的编译依赖
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y


2.下载源码文件包
    wget -P /opt https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
    tar xzf Python-3.6.9.tgz && cd Python-3.6.9

3.编译安装
    ./configure --prefix=/opt/python3.6.9 
    make && make install

4.添加环境变量
    vim /etc/profile
    PATH=$PATH:$HOME/bin:/opt/python3.6.9/bin/
    source /etc/profile

image-20250514235624471


4-2.安装Core

1.下载Core源码
    wget -O /opt/jumpserver-v2.12.0.tar.gz https://github.com/jumpserver/jumpserver/archive/refs/tags/v2.12.0.tar.gz

2.解压,安装依赖
    # 依赖在:
        requirements/rpm_requirements.txt 文件中
    cd /opt/ && tar xzf jumpserver-v2.12.0.tar.gz && yum install -y `cat /opt/jumpserver-2.12.0/requirements/rpm_requirements.txt `


3.配置虚拟环境,进如虚拟环境
    python3 -m venv jumpser_venv
    source jumpser_venv/bin/activate # 进入环境
    deactivate # 退出环境
    
4.安装环境依赖
    pip3 install -r /opt/jumpserver-2.12.0/requirements/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

5.为了方便进入虚拟环境,配置环境变量
    vim /etc/profile
    PATH=$PATH:$HOME/bin:/opt/jumpserver-2.12.0/jumpserver_venv/bin/
    source /etc/profile

6.编写生成秘钥脚本
    vim key.sh
    #! /bin/bash
    if [ "$SECRET_KEY" = "" ]; 
    then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; 
    echo "SECRET_KEY=$SECRET_KEY" >> /ect/profile; echo $SECRET_KEY;
    else echo $SECRET_KEY; 
    fi

    if [ "$BOOTSTRAP_TOKEN" = "" ]; 
    then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; 
    echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> /ect/profile; 
    echo $BOOTSTRAP_TOKEN; 
    else echo $BOOTSTRAP_TOKEN; 
    fi
    
    bash key.sh # 生成秘钥,写入到 /ect/profile 文件中

image-20250515001041498


4-3.配置Core文件

# 配置路径:
     /opt/jumpserver-2.12.0/config_example.yml
     cp config_example.yml config.yml # 需要先进行拷贝一份,因为读取的文件名称时config.yml

SECRET_KEY: "$SECRET_KEY"
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
DEBUG: true                   # 开发建议打开 DEBUG, 生产环境应该关闭
LOG_LEVEL: DEBUG              # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
SESSION_EXPIRE_AT_BROWSER_CLOSE: true  # 浏览器关闭 session 过期
DB_ENGINE: mysql  #使用的数据库
DB_HOST: 127.0.0.1  # 数据库ip
DB_PORT: 3306 #数据库端口
DB_USER: jumpserver # 登录用户
DB_PASSWORD: jumpserver # 数据库密码
DB_NAME: jumpserver # 创建的数据库
HTTP_BIND_HOST: 0.0.0.0 # 运行时的ip
HTTP_LISTEN_PORT: 8080 # 运行时的端口
WS_LISTEN_PORT: 8070 # 后端 websetock 端口
REDIS_HOST: 127.0.0.1 # redisip
REDIS_PORT: 6379  # redis 端口
REDIS_PASSWORD: jumpserver # redis密码


1.数据库转移 # 需要再虚拟环境中进行
    python3 /opt/jumpserver/jumpserver-2.12.0/apps/manage.py makemigrations
    python3 /opt/jumpserver/jumpserver-2.12.0/apps/manage.py migrate

2.查看验证
    mysql -ujumpserver -pjumpserver -e 'show tables from jumpserver;'

image-20250515001903320


4-4.启动Core服务,登录

# 项目依赖在虚拟环境中,在非虚拟环境中执行,在虚拟环境中运行。

1.启动与关闭
    /opt/jumpserver-2.12.0/jms start # 启动,使用-d 后台运行不占用窗口
    /opt/jumpserver-2.12.0/jms stop # 关闭
    /opt/jumpserver-2.12.0/jms status # 查看状态

2.访问 ip:8080 第一访问需要进行重置密码
    默认账户密码:admin admin
    新密码:jumpserver

image-20250515230306783


5.安装Luna

是什么:Luna 是 JumpServer 的前端 UI 项目, 主要使用 Angular CLI 完成。
作用:提供网页版命令行,也是基于前端vue的前后端交互的网页版命令行。

image-20231111214706450


5-1.下载Luna源码

1.下载源码
    wget -O /opt/luna-v2.12.0.tar.gz https://github.com/jumpserver/luna/archive/refs/tags/v2.12.0.tar.gz

3.解压到指定目录下
    -C 指定解压的目录
    --strip-components 1  直解压引导部分,第一层不要
    tar -xf /opt/luna-v2.12.0.tar.gz -C /opt/

5-2.安装Node环境

# 需要nodejs 10.以上的版本,最好是版本高一些

1.下nodejs(2进制包,下载解压就可以用)
    wget https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.gz
    
2.解压到指定目录中
    tar -xf /opt/node-v14.16.1-linux-x64.tar.gz  -C  /opt/

4.因为是2进制包,解压即用,直接设置环境变量
    vim /etc/profile
    PATH=$PATH:$HOME/bin:/opt/node-v14.16.1-linux-x64/bin/
    source /etc/profile  # 重置生效环境变量文件

5.查看当前的版本 nodejs 与 npm(与python pip作用一样负责安装依赖包) <图-1> 
    node -v && npm -v
    

image-20250516000518415


5-3.安装Luna依赖

1.配置npm加速源
    npm config set registry https://mirrors.cloud.tencent.com/npm/ # 配置加速源
    npm config get registry # 查看加速源

2.安装yarn工具
    npm install -g yarn # 安装yarn工具

3.安装luna的依赖
    cd /opt/luna-2.12.0 && yarn install

5-4.修改Luna配置文件运行

# 不同的版本,luna配置文件可以能不同,请按照官方文档进行操作
1.打开配置文件
    vim /opt/luna-2.12.0/proxy.conf.json

2.按照要求进行修改
    {
  "/koko": {
    "target": "http://localhost:5000",  # KoKo 地址
    "secure": false,
    "ws": true
  },
  "/media/": {
    "target": "http://localhost:8080",  # Core 地址
    "secure": false,
    "changeOrigin": true
  },
  "/api/": {
    "target": "http://localhost:8080",  # Core 地址
    "secure": false,                    # https ssl 需要开启
    "changeOrigin": true
  },
  "/core": {
    "target": "http://localhost:8080",  # Core 地址
    "secure": false,
    "changeOrigin": true
  },
  "/static": {
    "target": "http://localhost:8080",  # Core 地址
    "secure": false,
    "changeOrigin": true
  },
  "/lion": {
    "target": "http://localhost:9529",  # Lion 地址
    "secure": false,
    "pathRewrite": {
      "^/lion/monitor": "/monitor"
    },
    "ws": true,
    "changeOrigin": true
  },
  "/omnidb": {
    "target": "http://localhost:8082",
    "secure": false,
    "ws": true,
    "changeOrigin": true
  }
}

3.运行
    yarn start

4.安装ng启动
    1.安装ng命令
        npm install -g @angular/cli@1.3.2
        原因:
            npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody 的用户来运行,而这个用户几乎没有任何权限[只有在旧的版本中才有这种,新版本已经移除]
        使用参数 --unsafe-perm
        
        npm install -g @angular/cli@1.3.2 --unsafe-perm


    2.查看安装成功
        ng --version 


    3.运行
        ng serve --proxy-config proxy.conf.json --host 0.0.0.0  

image-20250516002649130


6.安装Lina

Lina 是 JumpServer 的前端 UI 项目,主要使用 Vue, Element UI 完成。

image-20231110200429085


6-1.下载Lina源码

1.下载源码
    wget -O /opt/lina-v2.12.0.tar.gz https://github.com/jumpserver/lina/archive/refs/tags/v2.12.0.tar.gz
    
2.解压到指定目录下
    tar -xf /opt/lina-v2.12.0.tar.gz -C /opt/

# 因为是一个前端项目,需要使用node,版本需要10.以上,直接使用Luna的node环境即可。

6-2.安装环境修改配置启动

1.安装环境
    cd /opt/lina-2.12.0/ && yarn install 
    # 如果安装是出现,证书过期使用:
        yarn config set strict-ssl false
    # 如果是使用npm使用:
        npm config set strict-ssl false

2.配置
    vim /opt/lina-2.12.0/.env.development
    VUE_APP_CORE_HOST = 'http://localhost:8080' # 修改后端Core地址

3.启动访问
    yarn serve

image-20250516223648996


7.安装Koko

Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。

Koko组件用于基于ssh的跳板机登录,统一管理。 
当前2.12.0所需要的go语言版本 	1.15,最新请查看官方文档进行指定部署 

image-20231111225409277


7-1.安装go环境

安装go版本为	1.15


1.下载go 下在二进制版本
    wget -O /opt/go1.15.linux-amd64.tar.gz https://golang.google.cn/dl/go1.15.linux-amd64.tar.gz

2.解压
    tar -xzf /opt/go1.15.linux-amd64.tar.gz -C /opt

3.配置环境变量
    vim /etc/profile
    PATH=$PATH:$HOME/bin:/opt/go/bin/
    source /etc/profile

image-20250516224312243


7-2.下载koko源码

1.下载安装程序 (是编译过的go二进制程序)
    wget -O /opt/koko-v2.12.0-linux-amd64.tar.gz https://github.com/jumpserver/koko/releases/download/v2.12.0/koko-v2.12.0-linux-amd64.tar.gz

3.解压进入文件夹 
    mkdir /opt/koko-2.12.0 && tar -xf koko-v2.12.0-linux-amd64.tar.gz  -C /opt/koko-2.12.0  --strip-components 1 

7-2.修改配置文件,启动

1.复制配置文件
    cp config_example.yml config.yml

2.修改配置文件
    CORE_HOST: http://127.0.0.1:8080   # Core 的地址
    BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
        1.当前这个参数第一次运行时,koko会将这个值,注册到当前机器的jumpserver信息中,证明这个机器时当作跳板级,安全验证
        2.第二次运行,这个参数就给删除即可,否则反复注册,会出现问题
    BIND_HOST: 0.0.0.0 # 绑定在0.0.0.0 绑定当前机器的全部网卡
    SSHD_PORT: 2222            # 使用 0.0.0.0:2222
        可以基于ssh协议链接koko服务 用法 ssh root@10.0.0.111 -p 2222 链接,链接 22 端口就是链接 sshd服务,2222端口时koko服务。
    HTTPD_PORT: 5000           # 服务启动的端口,默认5000
    LOG_LEVEL: DEBUG           # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
    REDIS_PASSWORD: jumpserver # redis的密码

3.启动,访问
    ./koko  -f config.yml
     ssh admin@192.168.85.144 -p 2222 # 通过ssh进行访问查看,账户密码就是jumpserver的账户密码
     # 如果不支持ssh-rsa秘钥类型,服务端只支持ssh-rsa类型时。
     sudo  ssh -p 2222 -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa   admin@192.168.85.144 

image-20250516230324384


8.安装Lion

Lion 使用了 Apache 软件基金会的开源项目 Guacamole,JumpServer 使用 Golang 和 Vue 重构了 Guacamole 实现 RDP/VNC 协议跳板机功能。

目前,常用的远程管理协议有以下 4 种:
    RDP(remote desktop protocol)协议:远程桌面协议,大部分 Windows 系统都默认支持此协议,Windows 系统中的远程桌面管理就基于该协议。
    RFB(Remote FrameBuffer)协议:图形化远程管理协议,VNC 远程管理工具就基于此协议。
    Telnet:命令行界面远程管理协议,几乎所有的操作系统都默认支持此协议。此协议的特点是,在进行数据传送时使用明文传输的方式,也就是不对数据进行加密。
    SSH(Secure Shell)协议:命令行界面远程管理协议,几乎所有操作系统都默认支持此协议。和 Telnet 不同,该协议在数据传输时会对数据进行加密并压缩,因此使用此协议传输数据既安全速度又快。

image-20231111235112167


8-1.安装guacamole让服务器支持vnc协议

jumpserver 是基于 guacamole 实现的远程链接

1.下载guacamole
    wget http://download.jumpserver.org/public/guacamole-server-1.3.0.tar.gz

2.解压
    tar -xzf guacamole-server-1.3.0.tar.gz ; cd guacamole-server-1.3.0

3.安装依赖源
    yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel

4.安装程序
    ./configure --with-init-dir=/etc/init.d
    make && make install 
    ldconfig # 让你的linux 更新底层驱动加载远程桌面,支持guacamole协议

8-2.安装Lion源码

1.下载
    wget https://github.com/jumpserver/lion-release/releases/download/v2.12.0/lion-v2.12.0-linux-amd64.tar.gz

2.解压
    tar -xf lion-v2.12.0-linux-amd64.tar.gz -C /opt/ && mv /opt/lion-v2.12.0-linux-amd64 /opt/lion-2.12.0

3.复制配置文件
    cp config_example.yml config.yml

4.配置参数,单机部署配置这个一个参数即可
    BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN" #  请和jumpserver 配置文件中保持一致,注册完成后可以删除,与koko服务一样

8-3.启动Lion服务

1.启动guacd
    /etc/init.d/guacd start
 
2.启动lion服务 <图-1> 默认启动到8081端口(没有修改的情况下)
    -f 指定配置文件
    ./lion -f config.yml
    nohup ./lion -f config.yml &

3.查看端口情况

image-20250516231149050


9.配置nginx服务合并

image-20231112002503870

9-1.配置文件

1.配置:
    server {
      listen 80;
      client_max_body_size 5000m; # 文件大小限制
      # Luna 配置
      location /luna/ {
        proxy_pass http://192.168.85.144:4200/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;
      }

      # Core data 静态资源
      location /media/replay/ {
        add_header Content-Encoding gzip;
        root /opt/jumpserver-2.12.0/data/;
      }

      location /media/ {
        root /opt/jumpserver-2.12.0/data/;
      }

      location /static/ {
        root /opt/jumpserver-2.12.0/data/;
      }

      # KoKo Lion 配置
      location /koko/ {
        proxy_pass       http://192.168.85.144:5000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
      }

      # lion 配置
      location /lion/ {
        proxy_pass http://192.168.85.144:8081;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        proxy_ignore_client_abort on;
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 6000;
      }

      # Core 配置
      location /ws/ {
        proxy_pass http://192.168.85.144:8070;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
      }

      location /api/ {
        proxy_pass http://192.168.85.144:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }

      location /core/ {
        proxy_pass http://192.168.85.144:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }

      # 前端 Lina
      location /ui/ {
        proxy_pass http://192.168.85.144:9528;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
      # 首页访问,使用rewrite last 向下匹配指定location
      # 比如访问 ip:port/asdasdsadsa 没有匹配到loction匹配,还是访问到ip:port/ui/
      location / {  
        rewrite ^/(.*)$ /ui/$1 last;
      }
    }

2.启动
    sudo systemctl start nginx

10.使用

10-1.个人用户设置

个人信息

image-20250518223428976


10-2.部署后修改站点

上线后部署到nginx上,需要设置当前站点url,堡垒机的入口与nginx域名与端口

image-20250518223725382

10-3.邮箱设置

image-20231112164434684


需要设置堡垒机的发件人信息
填写发件人信息,堡垒机使用该信心,给其他的客户端发送邮件
当前版本出现 EMAIL_FROM 不能null 问题,需要更新到2.28.0版本

image-20250518223903109


10-4.用户设置

# 注意:
    创建的用户可以登录上koko服务,网页版的堡垒机也是走的koko服务,堡垒机的走的都是同一套用户系统
    
# 在jumpserver中的用户
    1.管理用户 # 权限用户
    2.普通用户 # 普通用户

# 在linux中的用户
    1.特权用户
    2.普通不用

jumpserver 将用户进行创建(创建jumpserver系统内的用户),然后将linux的登录用户进行绑定,这样就可以通过系统内的用户管理linux服务器。


堡垒机中的用户系统 
    1.堡垒自带的用户(登录到jumpserver的用户
    2.资产用户(linux实际操作的用户)
        # 登录目标机器要有系统上的用户
        普通用户:ssh bob01@10.0.0.111 -p22 
        特权用户:ssh bob01@10.0.0.111 -p22  # 可以使用sudo进行提权

资产用户
    (就是linux机器上具体的用户 /etc/passwd) 最终登录到目标服务器,进行基本linux用户操作
    ssh ops01@10.0.0.111 -p 22 #链接 sshd服务
    ssh ops01@10.0.0.111 -p 2222 # 链接的时 jumpserver 的koko服务

image-20250518225546248


10-4-1.创建用户(系统用户)

用户管理 -> 用户列表 -> 创建用户

image-20250518230102908


10-4-2.添加用户(资产用户)

资产管理 -> 创建(SSH) -> 填写资料

# 这个用户用来实际登录linux服务器的用户(普通用户基本操作,特权用户root或者sudo的用户)

image-20250518231511959


10-5.资产设置

10-5-1.创建资产节点

资产管理 -> 资产列表 

image-20250518231712986


10-5-2.添加资产

资产管理 -> 资产列表 -> 选中节点 -> 点击创建 # 添加管理的服务器

image-20250518232047893


10-6.授权管理

将资产授权给jumpserver的用户或者用户组

10-6-1.资产授权

权限管理 -> 资产授权 -> 创建

image-20250518233239834


10-6-2.操作机器

用户名称 -> 用户页面 -> 我的资产 -> 连接机器

image-20250519000939441


10-6-3.实时会话

会话管理 -> 会话管理 -> 在线会话或者历史会话

image-20250519001805062


10-7.补充

用什么用户登录jumpsserver
登录后用什么用户ssh链接机器
jumpserver 的登录用户是登录用户
jumpserver资产管理中得系统用户是 linux系统用户 
比如:
    abc123 登录到jumpserve中想要链接linux服务器中得 web8,那么必须要有web8机器中得特权用户进行ssh链接
# 一定要注意,登录是登录到jumpserver网站中得,链接则是使用的时linux服务器的/etc/passwd内创建的用户

# 注意:
    除了以上的功能,还有自行测试,命令记录,批量执行命令等等操作,可以使用最新版本,按照更为方便。