堡垒机(python产品)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堡垒机(python产品)相关的知识,希望对你有一定的参考价值。

为什么使用堡垒机

堡垒机(python产品)_python

堡垒机图解

堡垒机(python产品)_mysql_02

堡垒机的理念起于跳板机;

人们逐渐认识到跳板机的不足,需要更新、更好的安全技术理念来实现运维操作管理,需要一种能满足角色管理与授权审批、信息资源访问控制、操作记录和审计、系统变更和维护控制要求,并生成一些统计报表配合管理规范来不断提升IT内控的合规性的产品。

2005年前后,运维堡垒机开始以一个独立的产品形态被广泛部署,有效地降低了运维操作风险,使得运维操作管理变得更简单、更安全。

2005年齐治科技研发出世界第一台运维堡垒机;

堡垒机作用

1)核心系统运维和安全审计管控;

2)过滤和拦截非法访问、恶意攻击,阻断不合法命令,审计监控、报警、责任追踪;

3)报警、记录、分析、处理;

堡垒机核心功能

1)单点登录功能

支持对X11、Linux、Unix、数据库、网络设备、安全设备等一系列授权账号进行密码的自动化周期更改,简化密码管理,让使用者无需记忆众多系统密码,即可实现自动登录目标设备,便捷安全;

2)账号管理

设备支持统一账户管理策略,能够实现对所有服务器、网路设备、安全设备等账号进行集中管理,完成对账号整个生命周期的监控,并且可以对设备进行特殊角

设置,如:审计巡检员、运维操作员、设备管理员等自定义,以满足审计需求;

3)身份认证

设备提供统一的认证接口,对用户进行认证,支持身份认证模式包括动态口令、静态密码、硬件key、生物特征等多种认证方式,设备具有灵活的定制接口,可以与其他第三方认证服务器直接结合;

安全的认证模式,有效提高了认证的安全性和可靠性;

4)资源授权

设备提供基于用户、目标设备、时间、协议类型IP、行为等要素实现细粒度的操作授权,最大限度保护用户资源的安全;

5)访问控制

设备支持对不同用户进行不同策略的制定,细粒度的访问控制能够最大限度的

保护用户资源的安全,严防非法、越权访问事件的发生;

6)操作审计

设备能够对字符串、图形、文件传输、数据库等安全操作进行行为审计;通过设备录像方式监控运维人员对操作系统、安全设备、网络设备、数据库等进行的各种操作,对违规行为进行事中控制;对终端指令信息能够进行精确搜索,进行录像精确定位;

堡垒机应用场景

1)多个用户使用同一账号

多出现在同一工作组中,由于工作需要,同时系统管理员账号唯一,因此只能多用户共享同一账号;如果发生安全事故,不仅难以定位账号的实际使用者和责任人,而且无法对账号的使用范围进行有效控制,存在较大的安全风险和隐患;

2)一个用户使用多个账号。

目前一个维护人员使用多个账号时较为普遍的情况,用户需要记忆多套口令同时在多套主机系统、网络设备之间切换,降低工作效率,增加工作复杂度;

3)缺少统一的权限管理平台,难以实现更细粒度的命令权限控制。

维护人员的权限大多是粗放管理,无基于最小权限分配原则的用户权限管理,难以实现更细粒度的命令权限控制,系统安全性无法充分保证;

4)无法制定统一的访问审计策略,审计粒度粗。

各个网络设备、主机系统、数据库是分别单独审计记录访问行为,由于没有统一审计策略,而且各系统自身审计日志内容深浅不一,难以及时通过系统自身审计发现违规操作行为和追查取证;

5)传统的网路安全审计系统无法对维护人员经常使用的SSH、RDP等加密、图形操作协议进行内容审计。

堡垒机部署

​部署文档:https://docs.jumpserver.org/zh/master/​

堡垒机(python产品)_redis_03

基础组件

堡垒机(python产品)_mysql_04

组件架构图

堡垒机(python产品)_python_05

Lina 是 JumpServer 的前端 UI 项目, 主要使用 Vue, Element UI 完成, 名字来源于 Dota 英雄 Lina

Luna 是 JumpServer Web Terminal 前端项目(网页命令行)

Core 是 JumpServer 的核心组件,由 Django 二次开发而来。

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


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

通过负载均衡组件,即可得知需要部署的所有组件的版本

JumpServer 分为多个组件,大致的架构如上图所示。其中 ​​Lina​​​ 和 ​​Luna​​​ 为纯静态文件,最终由 ​​nginx​​ 整合。

基础环境部署

1.环境准备
centos7
关闭防火墙 firewalld selinux

iptables -F
systemctl stop firewalld
systemctl disable firewalld

# 企业非容器化服务器,iptables也是关闭
# 外部走硬件防火墙。


# yum源配置
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

# 清华源,更快
cd /etc/pki/rpm-gpg
wget https://archive.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7

# 基础环境安装
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

2.第一个里程:需要部署跳板机依赖软件,重要
yum -y install git python-pip gcc automake autoconf python-devel vim sshpass lrzsz readline-devel zlib zlib-devel openssl openssl-devel

# 安装时间较长,如果能做好离线rpm包,速度会很快



git --- 用于下载jumpserver软件程序
python-pip --- 用于安装python软件
gcc --- 解析代码中C语言信息(解释器)
automake --- 实现软件自动编译过程
autoconf --- 实现软件自动配置过程
python-devel --- 系统中需要有python依赖
readline-devel --- 在操作python命令信息时,实现补全功能


3.修改系统字符集为中文
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

# 写入配置文件,永久生效
echo LANG="zh_CN.UTF-8" > /etc/locale.conf

# 检查系统字符集
[root@master-61 ~]#export LC_ALL=zh_CN.UTF-8
[root@master-61 ~]#
[root@master-61 ~]#locale
LANG=en_US.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8

#安装加速源提示
## 装python项目的依赖环境,因此配置pip源
## 装前端nodejs的项目,配置npm源

pip和npm安装依赖包,速度都比较慢,分别可以设置加速源

cat > ~/.pip.conf <<EOF
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF

# 得装nodejs才行

npm config set registry https://registry.npm.taobao.org
npm config get registry

部署mysql5.7

提示:如果你的数据库密码是 "123456"这样的纯数字,

在config.yml里面填入的DB_PASSWORD: "123456" 需要像这样,添加引号,否则报错。


https://docs.jumpserver.org/zh/v2.12.0/install/setup_by_fast/

该2.12.0版本要求数据库版本高于 mysql >=5.7

设置 Repo
yum -y localinstall http://mirrors.ustc.edu.cn/mysql-repo/mysql57-community-release-el7.rpm


关闭秘钥检查
[root@db-52 /etc/yum.repos.d]#sed -i /gpgcheck=1/c gpgcheck=0 /etc/yum.repos.d/mysql-community*


安装 MySQL
yum clean all
yum install -y mysql-community-server


# 数据库参数解释
使用--initialize-insecure,不会root生成密码。这是不安全的;假设您在将服务器投入生产使用之前及时为帐户分配了密码。
https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization.html



配置 MySQL
if [ ! "$(cat /usr/bin/mysqld_pre_systemd | grep -v ^\\# | grep initialize-insecure )" ]; then
sed -i "s@--initialize @--initialize-insecure @g" /usr/bin/mysqld_pre_systemd
fi


启动 MySQL
systemctl enable mysqld
systemctl start mysqld

数据库授权,改密码
jumpserver 库,账户,密码


[root@db-52 /etc/yum.repos.d]#mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 3
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type help; or \\h for help. Type \\c to clear the current input statement.

mysql> create database jumpserver default charset utf8;
Query OK, 1 row affected (0.00 sec)

mysql> set global validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)


mysql> create user jumpserver@% identified by www.yuchaoit.cn;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on jumpserver.* to jumpserver@%;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>

部署redis-6.2.4

# 下载源码
yum -y install epel-release wget make gcc-c++
cd /opt
wget https://download.redis.io/releases/redis-6.2.4.tar.gz

# 安装redis
tar -xf redis-6.2.4.tar.gz
cd redis-6.2.4
make -j && make install PREFIX=/usr/local/redis

# 配置redis
cp redis.conf /etc/redis.conf
sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf
sed -i "s/daemonize no/daemonize yes/g" /etc/redis.conf
sed -i "561i maxmemory-policy allkeys-lru" /etc/redis.conf
sed -i "481i requirepass www.yuchaoit.cn" /etc/redis.conf


# 配置启动脚本
cat >/etc/systemd/system/redis.service <<EOF
[Unit]
Descriptinotallow=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=/usr/local/redis/bin/redis-server /etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target
EOF


# 启动redis
systemctl enable redis
systemctl start redis

# 测试redis
[root@db-52 /opt/redis-6.2.4]#/usr/local/redis/bin/redis-cli --version
redis-cli 6.2.4

# redis6之后,有加入了ACL,账号密码了新功能。


[root@server01 /opt/redis-6.2.4]#/usr/local/redis/bin/redis-cli
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth default www.yuchaoit.cn
OK
127.0.0.1:6379>

部署core

​Core​​​ 是 JumpServer 的核心组件,由 ​​Django​​​ 二次开发而来, 内置了 ​​Lion​​​ ​​Celery​​​ Beat ​​Flower​​​ ​​Daphne​​ 服务。

环境要求

Name

Core

Python

MySQL

MariaDB

Redis

Version

v2.12.0

>= 3.6

>= 5.7

>= 10.2

>= 6

可以从 Github 网站上获取最新的 Release 副本。这些版本是最新代码的稳定快照,从项目网站下载的源将采用 .tar.gz 存档的形式,通过命令行中提取该存档:

mkdir /opt/jumpserver-v2.12.0
wget -O /opt/jumpserver-v2.12.0.tar.gz https://github.com/jumpserver/jumpserver/archive/refs/tags/v2.12.0.tar.gz

# 去除解压目录的一级目录
tar -xf jumpserver-2.12.0.tar.gz -C /opt/jumpserver-v2.12.0 --strip-components 1

# 安装该项目依赖的linux依赖
[root@master-61 /opt/jumpserver-v2.12.0]#ll /opt/jumpserver-v2.12.0/requirements/
总用量 28
requirements/ # 对应操作系统需要的依赖包
├── alpine_requirements.txt # Alpine
├── deb_buster_requirements.txt # Debian 10
├── deb_requirements.txt # 基于 Debian 的发行版(如: Ubuntu)
├── issues.txt # macOS 一些问题及解决方案
├── mac_requirements.txt # macOS
├── requirements.txt # python
└── rpm_requirements.txt # 基于 RedHat 的发行版(如: CentOS)

# 安装命令
yum install -y $(cat /opt/jumpserver-v2.12.0/requirements/rpm_requirements.txt)

安装python3

从 Python 网站获取部署 Python3 的方法,请根据 环境要求,通过命令行中判断是否安装完成。

1.当前机器只有python2
[root@master-61 /opt/jumpserver-v2.12.0]#python
python python2 python2.7 python2.7-config python2-config python-config

2.编译安装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

下载源码,且编译安装
cd /opt && wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar -zxf Python-3.6.9.tgz
cd Python-3.6.9/
./configure --prefix=/opt/python369
make && make install

设置环境变量
echo export PATH=$PATH:/opt/python369/bin/ >> /etc/profile
source /etc/profile

查看版本
[root@master-61 /opt/Python-3.6.9]#python3 -V
Python 3.6.9

[root@server01 ~]#yum install python3 python3-devel -y

安装python虚拟环境

python的项目管理方式,在线上要基于虚拟环境部署,便于管理多项目,防止依赖冲突。

这里需要对python开发的模块依赖管理有一定的认识,方可理解;

python开发解释器

pip给python装第三方模块的工具,配置快速源,加速下载

python3 -m pip    install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install -U pip


1.创建虚拟环境
cd /opt && python3 -m venv /opt/py3

2. 激活虚拟环境,通过PATH即可理解原理
[root@master-61 /opt]#source /opt/py3/bin/activate
(py3) [root@master-61 /opt]#
(py3) [root@master-61 /opt]#echo $PATH
/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/python369/bin/

安装core后端的项目依赖(大坑)

虚拟环境,必须每次都要激活后,方可使用该python解释器。

1. 先升级pip版本

pip install --upgrade pip

2. 提前安装该模块
pip install pyopenssl


3. 再去安装完整的依赖
pip install -r requirements/requirements.txt

4.务必确保不要有错误,才能正确使用。
(py3) [root@server01 /opt/jumpserver-v2.12.0]#pip list|wc -l
198

(py3) [root@master-61 /opt]#cd /opt/jumpserver-v2.12.0/requirements/
(py3) [root@master-61 /opt/jumpserver-v2.12.0/requirements]#ls
alpine_requirements.txt deb_requirements.txt mac_requirements.txt rpm_requirements.txt
deb_buster_requirements.txt issues.txt requirements.txt
(py3) [root@master-61 /opt/jumpserver-v2.12.0/requirements]#pip install -r requirements.txt
检查解释器的模块依赖
安装的模块依赖大约这么多,不一定完全一样
(py3) [root@master-61 /opt/jumpserver-v2.12.0/requirements]#pip list | wc -l
198
修改core配置文件
这里需要对整个jumpserver后端进行配置修改
(py3) [root@master-61 /opt/jumpserver-v2.12.0]#cp config_example.yml config.yml

生成服务运行需要的随机密钥,自动创建即可
内部组件通信,都得加密的随机密钥,为了安全通信。

if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; 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" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi

检查2个随机密钥的值
(py3) [root@master-61 /opt/jumpserver-v2.12.0]#tail -2 ~/.bashrc
SECRET_KEY=WRqzELX3kmZ7IYtQllNuSAECWJgNY2iB687EgvWiX4RmEJdYcZ
BOOTSTRAP_TOKEN=JAd0p9VKrz4Y7sJT

配置文件,使用该变量。

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: 10.0.0.80 # 自行配置 数据库相关
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: www.yuchaoit.cn
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 10.0.0.80 # 自行配置 Redis 相关
REDIS_PORT: 6379
REDIS_PASSWORD: www.yuchaoit.cn
数据库迁移,生成数据表
(py3) [root@master-61 /opt/jumpserver-v2.12.0/apps]#python manage.py makemigrations

(py3) [root@master-61 /opt/jumpserver-v2.12.0/apps]#python manage.py migrate

启动后端core服务

请注意,所有python相关操作都是在py3虚拟环境下执行
(py3) [root@master-61 /opt/jumpserver-v2.12.0]#./jms start all -d

- Start Flower as Task Monitor

- Start Daphne ASGI WS Server

- Start Celery as Distributed Task Queue: Ansible

- Start Celery as Distributed Task Queue: Celery

- Start Beat as Periodic Task Scheduler
gunicorn is running: 23390
flower is running: 23405
daphne is running: 23544
celery_ansible is running: 23784
celery_default is running: 23950
beat is running: 24042

至此你的后端服务core以及部署好了

访问core后台

默认账密
admin
admin

首次登录提示你要改密码
linux123

部署前端lina

Lina

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

环境要求⚓︎

Name

Lina

Node

Version

v2.12.0

10

下载源代码​​⚓︎​

可以从 ​​Github​​​ 网站上获取最新的 ​​Release​​ 副本。这些版本是最新代码的稳定快照,从项目网站下载 Source code.tar.gz 源代码,通过命令行中提取该存档:

mkdir -p /opt/lina-v2.12.0
wget -O /opt/lina-v2.12.0.tar.gz https://github.com/jumpserver/lina/archive/refs/tags/v2.12.0.tar.gz

tar -xf lina-2.12.0.tar.gz -C /opt/lina-v2.12.0 --strip-components 1

部署nodejs开发环境

安装 Node​​⚓︎​

从 ​​Node​​​ 官方网站参考文档部署 Node.js,请根据 ​​环境要求​​,通过命令行中判断是否安装完成:

mkdir -p /opt/node-v10.24.1 && cd /opt/node-v10.24.1 && wget https://nodejs.org/dist/v10.24.1/node-v10.24.1-linux-x64.tar.gz

tar -xf node-v10.24.1-linux-x64.tar.gz --strip-components 1

tail -1 /etc/profile
export PATH=$PATH:/opt/python369/bin/:/opt/node-v10.24.1/bin

[root@master-61 ~]#node -v
v10.24.1
安装前端依赖
[root@master-61 ~]#npm -v
6.14.12
# 配置npm加速源
npm config set registry https://registry.npm.taobao.org


# 完全是前端开发工程师,发给你的文档,不理解就问前端就好
npm install -g yarn
yarn config set registry https://registry.npm.taobao.org

[root@master-61 ~]#cd /opt/lina-v2.12.0/
[root@master-61 /opt/lina-v2.12.0]#ls
alias.config.js build dump.rdb jsconfig.json lina-v2.12.0.tar.gz nginx.conf postcss.config.js README.md tests vue.config.js
babel.config.js Dockerfile jest.config.js LICENSE mock package.json public src utils yarn.lock
[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#npm install -g yarn
[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#yarn install
yarn install v1.22.18
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
warning url-loader@1.1.2: Invalid bin field for "url-loader".
[4/5] Linking dependencies...
warning " > less-loader@5.0.0" has unmet peer dependency "webpack@^2.0.0 || ^3.0.0 || ^4.0.0".
warning " > html-webpack-plugin@3.2.0" has unmet peer dependency "webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0".
warning " > compression-webpack-plugin@6.1.1" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning " > sass-loader@7.3.1" has unmet peer dependency "webpack@^3.0.0 || ^4.0.0".
warning " > script-ext-html-webpack-plugin@2.1.3" has unmet peer dependency "webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0".
[5/5] Building fresh packages...
success Saved lockfile.
warning Your current version of Yarn is out of date. The latest version is "1.22.19", while youre on "1.22.18".
info To upgrade, run the following command:
$ curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
Done in 81.81s.
修改前端配置文件

以生产环境下的做法,这里需要填写后端IP地址。

vi .env.development

# 全局环境变量 请勿随意改动
ENV = development

# base api
VUE_APP_BASE_API =
VUE_APP_PUBLIC_PATH = /ui/

# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
# It only does one thing by converting all import() to require().
# This configuration can significantly increase the speed of hot updates,
# when you have a large number of pages.
# Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js

VUE_CLI_BABEL_TRANSPILE_MODULES = true

# External auth
VUE_APP_LOGIN_PATH = /core/auth/login/
VUE_APP_LOGOUT_PATH = /core/auth/logout/

# Dev server for core proxy
VUE_APP_CORE_HOST = http://localhost:8080 # 修改成 Core 的 url 地址
VUE_APP_ENV = development
运行前端(后台运行)
执行 yarn serve


5 warnings found.

You may use special comments to disable some warnings.
Use // eslint-disable-next-line to ignore the next line.
Use /* eslint-disable */ to ignore all warnings in a file.
App running at:
- Local: http://localhost:9528/ui/
- Network: http://10.0.0.61:9528/ui/

Note that the development build is not optimized.
To create a production build, run yarn build.


# 后台运行
[root@master-61 /opt/lina-v2.12.0]#nohup yarn serve &
[1] 16518
[root@master-61 /opt/lina-v2.12.0]#nohup: ignoring input and appending output to ‘nohup.out’

[root@master-61 /opt/lina-v2.12.0]#jobs
[1]+ Running nohup yarn serve &


# 检查端口
[root@master-61 /opt/lina-v2.12.0]#netstat -tunlp |grep 9528
tcp 0 0 0.0.0.0:9528 0.0.0.0:* LISTEN 16529/node
构建前端生成静态页面交给nginx
上面这个命令,用于前端工程师,测试网页是否正常,线上是build之后,发给运维,生成静态网页。

[root@master-61 /opt/lina-v2.12.0]#yarn build:stage
Images and other types of assets omitted.

DONE Build complete. The lina directory is ready to be deployed.
INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html

Done in 32.00s.

查看打包后的静态文件

[root@master-61 /opt/lina-v2.12.0]#ls lina -l
total 12
drwxr-xr-x 6 root root 51 May 21 21:12 assets
-rw-r--r-- 1 root root 12126 May 21 21:12 index.html

至此,前端静态页部署结束,可以交给nginx展示了,后续要设置nginx的虚拟主机即可。

luna部署

Luna](​​https://github.com/jumpserver/luna/​​​) 是 JumpServer 的前端 UI 项目, 主要使用 ​​Angular CLI​​ 完成。

其中 ​​Lina​​​ 和 ​​Luna​​​ 为纯静态文件,最终由 ​​nginx​​ 整合。

mkdir /opt/luna-v2.12.0
wget -O /opt/luna-v2.12.0.tar.gz https://github.com/jumpserver/luna/archive/refs/tags/v2.12.0.tar.gz
tar -xf luna-2.12.0.tar.gz -C /opt/luna-v2.12.0 --strip-components 1
cd luna-v2.12.0


安装依赖前端依赖

yum -y install gcc gcc-c++

# 必须安装对应版本的 node-sass依赖,否则又是一堆报错。

SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/

npm install node-sass@4.13.0 --unsafe-perm=true --allow-root

npm install

修改配置文件

这里,我们是将jumpserver前后端放在同一台机器了,因此localhost没问题。

否则需要填写后端服务器的IP。

[root@master-61 /opt/luna-v2.12.0]#cat proxy.conf.json 

"/koko":
"target": "http://localhost:5000",
"secure": false,
"ws": true
,
"/media/":
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
,
"/api/":
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
,
"/core":
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
,
"/static":
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
,
"/lion":
"target": "http://localhost:9529",
"secure": false,
"pathRewrite":
"^/lion/monitor": "/monitor"
,
"ws": true,
"changeOrigin": true

启动luna(后台运行)

# 安装ng命令,用于启动前端服务器,注意,必须是这个版本(再次吐槽,官网文档,就不能用心点写吗?一堆烂坑)
npm install -g @angular/cli@1.3.2 --unsafe-perm=true --allow-root

结果如下
+ @angular/cli@1.3.2
added 903 packages from 681 contributors, removed 97 packages and updated 51 packages in 40.214s



# 后台运行命令如下,必须运行在0.0.0.0地址上,否则不通。
[root@master-61 /opt/luna-v2.12.0]#nohup ng serve --proxy-config proxy.conf.json --host 0.0.0.0 &

# 检查端口
[root@master-61 /opt/luna-v2.12.0]#netstat -tunlp|grep 4200
tcp 0 0 0.0.0.0:4200 0.0.0.0:* LISTEN 7155/@angular/cli

编译静态文件

ng build

部署Koko

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

Koko组件用于基于ssh的跳板机登录,统一管理。

环境要求

Name

KoKo

Go

Version

v2.12.0

1.15

下载koko二进制命令

不用自己再编译了

mkdir /opt/koko-v2.12.0
cd /opt
wget https://github.com/jumpserver/koko/releases/download/v2.12.0/koko-v2.12.0-linux-amd64.tar.gz


tar -xf koko-v2.12.0-linux-amd64.tar.gz -C /opt/koko-v2.12.0 --strip-components 1

cd koko-v2.12.0

修改koko配置文件

[root@master-61 /opt/koko-v2.12.0]#cp config_example.yml config.yml

# 修改配置文件
vi config.yml


[root@master-61 /opt/koko-v2.12.0]#grep -Ev ^(#|$) config.yml
CORE_HOST: http://127.0.0.1:8080 # Core 的地址
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
BIND_HOST: 0.0.0.0
SSHD_PORT: 2222 # 使用 0.0.0.0:2222
HTTPD_PORT: 5000 # 使用 0.0.0.0:5000
LOG_LEVEL: DEBUG # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR



[root@master-61 /opt/koko-v2.12.0]#./koko -f config.yml -d


[root@master-61 /opt/koko-v2.12.0]#netstat -tunlp |grep koko
tcp6 0 0 :::5000 :::* LISTEN 8550/./koko
tcp6 0 0 :::2222 :::* LISTEN 8550/./koko

部署Nginx

主配置文件

至少是1.18.0版本以上
[root@master-61 /opt/lion-v2.12.0-linux-amd64]#nginx -v
nginx version: nginx/1.20.1


[root@master-61 /etc/nginx]#grep -Ev ^$|# nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events
worker_connections 1024;

http
log_format main $remote_addr - $remote_user [$time_local] "$request"
$status $body_bytes_sent "$http_referer"
"$http_user_agent" "$http_x_forwarded_for";
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;

jumpserver.conf

做好dns解析
[root@master-61 /opt/luna-v2.12.0]#tail -1 /etc/hosts
10.0.0.80 luna koko lion core lina


server
listen 80;
# server_name www.yuchaoit.cn;

client_max_body_size 5000m; #文件大小限制

# Luna 配置
# 经过实测,这个v12版本,只能http://10.0.0.61:4200/luna/这样去访问,前端这里有点难处理。

location /luna/
proxy_pass http://luna:4200;


# Core data 静态资源
location /media/replay/
add_header Content-Encoding gzip;
root /opt/jumpserver-v2.12.0/data/;


location /media/
root /opt/jumpserver-v2.12.0/data/;


location /static/
root /opt/jumpserver-v2.12.0/data/;


# KoKo Lion 配置
location /koko/
proxy_pass http://koko: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://lion: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://core: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://core: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://core: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://lina: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;


location /
rewrite ^/(.*)$ /ui/$1 last;

以上是关于堡垒机(python产品)的主要内容,如果未能解决你的问题,请参考以下文章

目前堡垒机做的最强的是哪家公司,他们的产品有啥优势?

我们在选择堡垒机产品,有谁用过碉堡堡垒机与齐治堡垒机,对比起来怎么样?

运维安全审计系统与堡垒机什么关系?

整理归纳行云管家堡垒机的产品优势

数据安全产品之堡垒机详细介绍-行云管家

堡垒机世界的征战之尚思卓越堡垒机VS齐治堡垒机