一、跳板机详解
跳板机的概念
跳板机就是一台服务器而已,运维人员在使用管理服务器的时候,必须先连上跳板机,然后才能操控内网中的服务器,才能登录到目标设备上进行维护和操作。
开发 --> 登录跳板机 --> 再登录到开发服务器
测试 --> 登录跳板机 --> 再登录到测试服务器
跳板机的优缺点
优点:实现了服务器登录安全,集中式对服务器进行管理
缺点:没有实现对于运维人员的行为操作监控和审计,使用跳板机的过程中,还有可能在服务器上进行错误操作,一旦出现错误就很难定位到实施人。
二、堡垒机详解
堡垒机运维思想
- 审计只是事后的行为,审计能够发现问题以及责任人,但是无法防止问题的发生。
- 只有实现了事先的严格监控,才能够从源头上解决服务器无操作的行为事故。
- 堡垒机能够创建系统账号,该系统账号功能属于角色区分的作用,但也无法确认该账号的执行人。
堡垒机作用
由于跳板机的不足,企业需要更新,更安全,更好的技术理念去管理服务器的运维操作,需要一种能够满足角色管理,角色授权,信息资源访问控制,操作记录和审计,系统方便维护和控制等需求,却还能生成服务器资产统计报表等功能的一个IT堡垒机。
- 核心系统运维和安全审计管理。
- 过滤和拦截非法请求访问,恶意攻击,拒绝不合法命令,进行审计监控,报警和责任追踪。
- 报警,记录,分析,处理。
堡垒机核心功能
- 单点登录功能
- 账户管理
- 身份认证
- 资源授权
- 访问控制
- 操作审计
堡垒机应用场景
- 多个用户使用同个账户
- 一个用户使用多个账号
- 缺少统一的权限管理平台,难以实现高粒度的命令权限控制
- 对于传统的网络设备无法对运维人员的远程连接命令进行加密和审计
企业角度看堡垒机
通过更加细致的粒度对企业IT资产设备进行管理,保证企业的IT设备资产安全,可靠运行,降低人为操作的风险,避免风险性,保证企业的资源资金安全。
管理角度看堡垒机
运维人员只需记录堡垒机的账户密码,一次登录,即可快捷访问多个管理设备,无需记忆多个账号密码,提高工作效率,却能够对服务器最大化的安全行操作。
企业真实堡垒机案例
- 运维管理人员手段落后,导致难以发现问题的因素,以及问题的责任制。
- 设备的账户管理缺失,每一个运维人员都能够直接操作所有的服务器,账号密码是极其不安全的,一套完整的信息管理系统,一般需要多个运维人员去管理,因此也就存在多个账号密码信息,因此存在些问题隐患,比如密码丢失,密码忘记,密码被破解等等,还有就是第三方运维人员。对于服务器的操作,需要有限的进行账号管理,以及账号监控
简单的总结堡垒机
就是解决运维权限混乱,操作无审计。
三、jumpserver堡垒机服务搭建
五大组件
- LINA:新的前端模块,负责页面展现。
- Luna:现在是web terminal前端,计划前端页面都由该项目提供,jumpserver只提供API,不再负责后台渲染HTML等。
- CORE:现在指jumpserver管理后台,是核心组件(core),使用Django Class Based View风格开发,支持Restful API。
- CoCo/KoKo:实现ssh server 和web terminal server的组件,提供ssh和websocket接口,使用paramiko和flask开发。
- Guacamole:Apache跳板机项目,jumpserver使用其组件实现RDP功能,jumpserver并没有修改其代码而是添加了额外的插件,支持jumpserver调用。
四、堡垒机jumpserver服务部署
jumpserver概述
Jumpserver是一款开源的堡垒机,可使系统的管理员和开发人员安全的连接到企业内部服务器上执行操作,并且支持大部分操作系统,是一款非常安全的远程连接工具。
常见支持的系统:
CentOS,RedHat,Fedora,Amazon LinuxDebianSUSE,UbuntuFreeBSD其他ssh协议硬件设备。
Linux服务器准备
| 2核CPU | 4G内存 | 50G硬盘 |
运行jumpserver需要软件
python2解释器
Linux的命令、bash解释器
jumpserver是由python编程语言开发的,旧的jumpserver是由python2开发的,新版本是由Python3开发的
准备以下版本:
python = 3.6.x
mysql server 版本>=5.6
mariadb 版本>=5.6 ,在centos 7系统上,Mysql由于收费了,开源社区就诞生了mariadb数据库,是开源的
redis 缓存数据库
部署jumpserver实践
环境初始化
环境准备,关闭防火墙
[root@localhost ~]# iptables -F
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# getenforce
会显示
Disable
配置yum源
#准备好yum源直接以运行配置就行
[root@localhost ~]# wget -o /etc/yum.repos.d/Centos-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# wget -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#清空yum缓存
[root@localhost ~]# yum clean all
#重新生成新的缓存
[root@localhost ~]# yum makecache
(按需安装)安装系统初始化所需的软件
[root@localhost ~]# yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel gcc
安装jumpserver运行所需的依赖环境
[root@localhost ~]# yum install -y git python-pip gcc automake autoconf python-devel vim sshpass lrzsz readline-devel zlib zlib-devel openssl openssl-devel
修改系统字符集,改为中文显示
[root@localhost ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
#直接执行临时生效
[root@localhost ~]# export LC_ALL=zh_CN.UTF-8
#永久生效需要写入配置文件
[root@localhost ~]# echo 'LANG=“zh_CN.UTF-8” ’ > /etc/loacle.conf
#检查是否成功修改
[root@localhost ~]# locale
LANG=zh_CN.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=
#显示中文就证明可以了
[root@localhost ~]# ls --help
用法:ls [选项]... [文件]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all 不隐藏任何以. 开始的项目
-A, --almost-all 列出除. 及.. 以外的任何项目
--author 与-l 同时使用时列出每个文件的作者
-b, --escape 以八进制溢出序列表示不可打印的字符
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
···
部署数据库MySQL5.6
获取MySQL5.6安装包
#创建一个文件夹存放
[root@localhost ~]# mkdir jump
[root@localhost ~]# cd /jump/
[root@localhost jump]# wget https://cdn.mysql.com//Downloads/MySQL-5.6/MySQL-5.6.49-1.e17.x86_64.rpm-bundle.tar
解压缩MySQL压缩包
[root@localhost jump]# mkdir mysql
[root@localhost jump]#
[root@localhost jump]# tar -zxvf MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar -C ./mysql/
使用yum命令安装一些MySQL的rpm包
[root@localhost jump]# cd mysql
[root@localhost mysql]#
[root@localhost mysql]# yum localinstall ./*
安装完毕后,检查MySQL的配置文件,需要修改
[root@localhost mysql]# cat /etc/my.cnf
[root@localhost mysql]# vim /etc/my.cnf
[mysql]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#注意这里修改成如下这两行配置(mariadb改成mysql)
[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid
#
# include all files from the config disrectory
#
!includedir /etc/my.cnf.d
启动mysql服务端
[root@localhost mysql]# systemctl start mysql
[root@localhost mysql]#
[root@localhost mysql]# netstat -lntup
#会显示3306端口运行着mysql
修改mysql默认密码
#默认密码查看
[root@localhost mysql]# cat ~/.mysql_secret
#修改默认密码为自己需要的密码
[root@localhost mysql]# mysqladmin -uroot -p原默认密码 pasword 新密码
注意:这样子操作修改密码是会出现在history命令行里显示,不安全
#更安全的修改密码办法
#进入数据库
[root@localhost mysql]# mysql -uroot -p
mysql> update mysql.user set password=password(‘新密码’) where user=‘root’;
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
测试新密码登录
[root@localhost mysql]# mysql -uroot -p
#然后输入刚刚设置的密码
创建运行jumpserver所需的用户信息
mysql> create database jumpserver default charset 'utf8' collate 'utf8_bin';
Query OK, 1 rows affected (0.00 sec)
#创建完毕数据库后在创建用户,且设置密码
mysql> create user 'jumpserver'@'%' IDENTIFIED BY '密码';
Query OK, 0 rows affected (0.00 sec)
#给该用户授权访问数据库权限
mysql> grant all privileges on jumpserver.* to 'jumpserver'@'%' IDENTIFIED BY '密码';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
部署Python3.6
下载Python3.6的源代码
[root@localhost mysql]# cd /jump/
#可在线下载也可window上下载好再上传上去
[root@localhost jump]# wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
[root@localhost jump]# tar -zxvf Python-3.6.10.tgz
#进入解压缩后目录
[root@localhost jump]# cd Python-3.6.10
#指定python3.6的安装目录
[root@localhost Python-3.6.10]# ./configure --prefix=/jump/python3.6.10/
#如果出错可能是上面按需安装的系统初始化那步安装缺失了那个软件和工具
[root@localhost Python-3.6.10]# make && make install
运行Python3的两种方式
方式一:使用安装的绝对路径启动
[root@localhost jump]# /jump/python-3.6.10/bin/python3
方式二:使用环境变量,就可直接使用
[root@localhost jump]# vim /etc/profile
在最后一行添加
PATH="/jump/python-3.6.10/bin:$PATH"
[root@localhost jump]# source /etc/profile
[root@localhost jump]# echo $PATH
会出现相应的环境变量
然后直接命令行输入相应的python版本就可进入
[root@localhost jump]# python2
[root@localhost jump]# python3
Python3创建虚拟环境并下载虚拟环境工具(virtualenv)
为了不搞混环境变量,我们需要创建虚拟环境
[root@localhost jump]# pip3 install virtualenv
如果出现报错
直接下载virtualenv可能有点慢,需要更新一下pip3的下载源
[root@localhost jump]# mkdir ~/.pip
[root@localhost jump]# touch ~/ .pip/pip.conf
[root@localhost jump]# vim ~/.pip/pip.conf
# 写入以下内容就行
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
然后在进行下载速度就变很快了
[root@localhost jump]# pip3 install virtualenv
如果出现报错,可能是少了一些工具一开始没有安装好,需要重新删除python-3.6.10等二级制所有文件夹和文件,再重新解压安装
使用虚拟环境工具,再创建个python3解释器
[root@localhost jump]# vritualenv --python=python3 jump_venv1
# python3是制定python3的版本,jump_venv1是给虚拟环境取个名字
然后这个虚拟环境的解释器路径是/jump/jump_venv1/bin/python3
激活虚拟环境,其实是默认修改了环境变量
[root@localhost jump]# source /jump/jump_venv1/bin/ativate
成功进入显示如下
(jump_venv1)[root@localhost jump]#
(jump_venv1)[root@localhost jump]#
(jump_venv1)[root@localhost jump]#
(jump_venv1)[root@localhost jump]# which python3
/jump/jump_venv=1/bin/python3
退出虚拟环境命令
(jump_venv1)[root@localhost jump]# deactivate
部署redis数据库
yum自动化安装redis
[root@localhost jump]# yum install redis -y
[root@localhost jump]# systemctl start redis
[root@localhost jump]# netstat -lntup | grep 6379
部署jumpserver服务
获取jumpserver程序代码
[root@localhost jump]# wget https://github.com/jumpserver/jumpserver/releases/download/v2.1.0/jumpserver-v2.1.0.tar.gz
#解压缩源码
[root@localhost jump]# tar -zxvf jumpserver-v2.1.0.tar.gz
[root@localhost jump]# cd jumpserver-v2.1.0/
#也可以制作软连接:
[root@localhost jump]# ln -s /jump/jumpserver-v2.1.0 /jump/jumpserver
安装依赖
[root@localhost jump]# 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
安装运行jumpserver所需要的模块(由python开发的程序,必须安装该程序使用到的一些模块,才能正常运行)
注意
注意
注意
安装jumpserver模块,必须先激活虚拟环境,然后在安装
[root@localhost jump]# source /jump/jump_venv1/bin/activeate
(jump_venv1)[root@localhost jump]# pip3 install -r /jump/jumpserver/requirements/requirements.txt
(jump_venv1)[root@localhost jump]# pip3 list
会全部列出虚拟环境中安装的模块
修改jumpserver运行的配置文件
(jump_venv1)[root@localhost jump] cp config_example.yml config.yml
(jump_venv1)[root@localhost jump]
# 过滤一下查询文件内容
(jump_venv1)[root@localhost jump] grep -Ev '^#^$' config.yml
SECRET KEY:
BOOTSTRAP TOKEN:
DB ENGINE:sq1
DB HOST:127.0.0.1
DB PORT:3306
DB USER:jumpserver
DB PASSWORD:
DB NAME:jumpserver
HTTP BIND HOST:0.0.0.0HTTP LISTEN PORT:8080WS LISTEN PORT:8070
REDIS HOST:127.0.0.1
REDIS PORT:6379
#需要修改添加的是 SECRET KEY: BOOTSTRAP TOKEN: DB PASSWORD:
# 生成key
(jump_venv1)[root@localhost jump] if [ "$SECRET KEY" = "" ]; then SECRET KEY=`cat /dev/urandon | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi
然后会随机生成一段key
#生成token
(jump_venv1)[root@localhost jump] 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
然后会随机生成一段token
# 然后把key,token和数据库密码写入配置文件
(jump_venv1)[root@localhost jump] vim config.yml
# 再次查看是否已添加修改
(jump_venv1)[root@localhost jump] grep -Ev '^#^$' config.yml
对python程序进行数据库迁移
jumpserver这个程序是由python的web框架django开发而来,必须先进行数据库迁移,生成表的信息,才能运行程序。
(jump_venv1)[root@localhost jump]
# 进入数据库
(jump_venv1)[root@localhost jump] mysql -uroot -p
# 查看数据库
mysql> show database;
会出现jumpserver的数据库
mysql> use jumpserver;
mysql> show tables;
发现这个数据库都是空的啥都没有,所以需要数据库迁移
(jump_venv1)[root@localhost jump] find . -name manage.py
./apps/manage.py
(jump_venv1)[root@localhost jump] cd apps/
# 迁移命令1
(jump_venv1)[root@localhost apps] python3 /jump/jumpserver/apps/manage.py makemigrations
# 迁移命令2
(jump_venv1)[root@localhost apps] python3 /jump/jumpserver/apps/manage.py migrate
# 然后再加入数据库查看是否已经迁移过来了
(jump_venv1)[root@localhost jump] mysql -uroot -p
mysql> use jumpserver;
mysql> show tables;
启动jms
启动命令:
(jump_venv1)[root@localhost jump] /jump/jumpserver/jms start -d
验证启动
在浏览器测试输入:服务器ip:8080
部署koko组件
koko是用golang编程语言开发的一个组件,和之前的CoCo组件(python语言开发)相比而言,性能,效率,系统资源利用率都要更高。
下载koko源代码
# 可直接下载,也可再window上下载再传到服务器
(jump_venv1)[root@localhost jump] wget https://github.com/jumpserver/koko/releases/download/v2.1.0/koko-v2.1.0-linux-amd64.tar.gz
# 解压缩koko配置文件
(jump_venv1)[root@localhost jump] tar -zxvf koko-v2.1.0-linux-amd64.tar.gz
(jump_venv1)[root@localhost jump]
(jump_venv1)[root@localhost jump] chown -R root:root koko-v2.1.0-linux-amd64
(jump_venv1)[root@localhost jump]
(jump_venv1)[root@localhost jump]
(jump_venv1)[root@localhost jump] ln -s /jump/koko-v2.1.0-linux-amd64 /jump/koko
修改配置文件
(jump_venv1)[root@localhost jump] cd koko
(jump_venv1)[root@localhost koko]
(jump_venv1)[root@localhost koko] cp config_example.yml config.yml
# 修改添加
(jump_venv1)[root@localhost koko] vim config.yml
# 注意修改以下内容:
CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN:
LOG_LEVEL: INFO
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD:
REDIS_CLUSTERS:
REDIS_DB ROOM:
启动程序
启动命令:
(jump_venv1)[root@localhost koko] /jump/koko/koko -d
# 查看进程是否启动
(jump_venv1)[root@localhost koko] ps -ef | grep koko
# 可查看日志,检查是否正常启动
(jump_venv1)[root@localhost koko] tail /jump/koko/data/logs/koko.log
部署guacamole
下载guacamole源代码
# 直接下载,也可window上下载后再传上服务器上
(jump_venv1)[root@localhost jump] wget https://github.com/jumpserver/docker-guacamole/archive/master.tar.gz
# 解压缩
(jump_venv1)[root@localhost jump] tar -zxvf docker-guacamole-master.tar.gz
# 改个名字
(jump_venv1)[root@localhost jump] mv docker-guacamole-master-2.1.0/ guacamole
(jump_venv1)[root@localhost jump] cd guacamole
(jump_venv1)[root@localhost guacamole] ls
发现里面还有一些工具.gz包还需要解压缩
(jump_venv1)[root@localhost guacamole] tar -zxvf guacamole-server-1.2.0.tar.gz
(jump_venv1)[root@localhost guacamole] tar -zxvf ssh-forward.tar.gz
编译安装该软件程序
(jump_venv1)[root@localhost guacamole]
(jump_venv1)[root@localhost guacamole] cd guacamole-server-1.2.0/
(jump_venv1)[root@localhost guacamole-server-1.2.0] ls
# 编译软件之前,基本上都要把编译环境准备好
(jump_venv1)[root@localhost guacamole-server-1.2.0] yum install cairo-devel libjpeg-turbo-devel libtool uuid-devel libjpeg-devel libpng-devel -y
(jump_venv1)[root@localhost guacamole-server-1.2.0]
安装FFmpeg工具
(jump_venv1)[root@localhost guacamole-server-1.2.0] yum install epel-release -y
(jump_venv1)[root@localhost guacamole-server-1.2.0] rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
(jump_venv1)[root@localhost guacamole-server-1.2.0] rpm -Uvh http://li.nux.ro/download/nux/dextop/e17/x86_64/nux-dextop-release-0-5.e17.nux.noarch.rpm
(jump_venv1)[root@localhost guacamole-server-1.2.0] yum install ffmpeg ffmpeg-devell -y
验证安装
(jump_venv1)[root@localhost guacamole-server-1.2.0] ffmpeg -version
会出现ffmpeg 的一些信息
编译安装guacamole
(jump_venv1)[root@localhost guacamole-server-1.2.0] ./configure --with-init-dir=/etc/init.d
(jump_venv1)[root@localhost guacamole-server-1.2.0] make && make install
部署java开发环境(因为guacamole是java开发的)
(jump_venv1)[root@localhost guacamole-server-1.2.0] cd
(jump_venv1)[root@localhost ~] yum install -y java-1.8.0-openjdk
创建运行guacamole所需的文件夹
mkdir -p/config/guacamole /config/guacamole/extensions /config/guacamole/record/config/guacamole/drive && \
chown daemon:daemon /config/guacamole/record /config/guacamole/drive && \
cd /config
下载tomcat工具(用于运行java项目)
cd /opt && \
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz
部署guacamole和tomcat工具的结合,需要修改他们的配置文件
cd /opt && \
tar -xf apache-tomcat-9.0.36.tar.gz && \
mv apache-tomcat-9.0.36 tomcat9 && \
rm -rf /opt/tomcat9/webapps/* && \
sed -i 's/Connector port="8080"/Connector port="8081"/g'
/opt/tomcat9/conf/server.xml && \
echo "java.util.logging.ConsoleHandler.encoding = UTF-8 >> /opt/tomcat9/conf/logging.properties && \
ln -sf /jump/guacamole/guacamole-1.0.0.war /opt/tomcat9/webapps/ROoT.war && \
ln- sf /jump/guacamole/guacamole-auth-jumpserver-1.0.0.jar
/config/guacamole/extensions/guacamole-auth-jumpserver-1.0.0.jar && \
ln -sf /jump/guacamole/root/app/guacamole/guacamole.properties
/config/guacamole/guacamole.properties
# 设置guacamole的运行环境变量(修改成自己的token等信息)
export JUMPSERVER_SERVER=http://127.0.0.1:8080
echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc
export BOOTSTRAP_TOKEN=自己的token
echo "export BOOTSTRAP_TOKEN=自己的token" >> ~/.bashrc
export JUMPSERVER_KEY_DIR=/config/guacamole/keys
echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc
export GUACAMOLE_HOME=/config/guacamole
echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc
export GUACAMOLE_LOG_LEVEL=ERROR
echo "export GUACAMOLE_LOG_LEVEL=ERROR" >> ~/.bashrc
export JUMPSERVER_ENABLE_DRIVE=true
echo "export JUMPSERVER_ENABLE_DRIVE=true" >> ~/.bashrc
参数解释
JUMPSERVER_SERVER指core访问地址
BOOTSTRAP_TOKEN为Jumpserver/ionfig.yml里面的 BOOTSTRAP_TOKEN 值
JUMPSERVER_KEY_DIR 认证成功后 key 存放目录
GUACAMOLE_HOME为guacamole.properties 配置文件所在目录
GUACAMOLE_LOG_LEVEL 为生成日志的等级
JUMPSERVER_ENABLE_DRIVE为rdp协议挂载共享盘
启动服务
(jump_venv1)[root@localhost opt] /etc/init.d/guacd start
(jump_venv1)[root@localhost opt] sh /opt/tomcat9/bin/startup.sh
部署Lina组件
获取lina源代码
(jump_venv1)[root@localhost opt] cd /jump/
(jump_venv1)[root@localhost jump] wget https://github.com/jumpserver/lina/releases/download/v2.1.0/lina-v2.1.0.tar.gz
也要准备好nginx
(jump_venv1)[root@localhost jump] yum install nginx -y
(jump_venv1)[root@localhost jump]
(jump_venv1)[root@localhost jump]
解压缩lina
(jump_venv1)[root@localhost jump] tar -zxvf lina-v2.1.0.tar.gz
(jump_venv1)[root@localhost jump] cd lina-v2.1.0
(jump_venv1)[root@localhost lina-v2.1.0] mv lina-v2.1.0 lina
(jump_venv1)[root@localhost lina-v2.1.0] cd ..
(jump_venv1)[root@localhost jump] chown -R nginx:nginx lina
部署Luna组件
获取Luna源代码
(jump_venv1)[root@localhost jump]
(jump_venv1)[root@localhost jump] wget https://github.com/jumpserver/luna/releases/download/v2.1.1/luna-v2.1.1.tar.gz
(jump_venv1)[root@localhost jump] tar -zxvf luna-v2.1.1.tar.gz
(jump_venv1)[root@localhost jump] mv luna-v2.1.1 luna
(jump_venv1)[root@localhost jump] chown -R root:root luna
(jump_venv1)[root@localhost jump]
(jump_venv1)[root@localhost jump]
(jump_venv1)[root@localhost jump]
部署nginx
nginx作用在处理静态文件,以及用于对jumpserver后台程序的反向代理
前面已经yum install nginx -y过了,下面直接修改nginx配置就行
(jump_venv1)[root@localhost jump] sed -i '38,58d' /etc/nginx/nginx.conf
意思是删除旧的主机配置
加入新的虚拟主机配置如下:
(jump_venv1)[root@localhost jump] vim /etc/nginx/nginx.conf
server{
listen 80;
#录像及文件上传大小限制
client max body size 100m;
location ui/{
try files $uri / /index.html;
alias /jump/lina/;
}
location /luna/{
try files $uri / /index.html;
alias /jump/luna/;#luna 路径,如果修改安装目录,此处需要修改
}
location /media/{
add header Content-Encoding gzip;
root /jump/data/; # 录像位置,如果修改安装目录,此处需要修改
}
location /static/{
root /jump/data/; # 静态资源,如果修改安装目录,此处需要修改
}
location /koko/{
proxy_pass http://localhost:5000;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add x forwarded for;
access log off;
}
location /guacamole/{
proxy_pass http//localhost:8081/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /ws/{
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_pass http://localhost:8070;
proxy_http_version 1.1;
proxy buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/{
proxy_pass http://localhost: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://localhost: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 /{
rewrite^/(.*)$/ui/$1 last;
}
}
启动nginx
(jump_venv1)[root@localhost jump] nginx -t
(jump_venv1)[root@localhost jump] nginx
五、最终测试
浏览器测试
浏览器输入IP地址(默认80端口,nginx转发给后端的8080端口)
账户密码默认是admin/admin


六、总结
通过本次Jumpserver堡垒机的完整部署实践,我们深入了解了企业级堡垒机的核心价值与实现原理。整个过程涵盖了从基础环境准备到各个核心组件的协同配置,体现了现代化运维安全体系的构建思路。
核心收获
1. 架构理解深入
-
掌握了Jumpserver五大组件(Core、Koko、Guacamole、Lina、Luna)的各自职责与协作机制。
-
理解了堡垒机相较于传统跳板机在权限控制、操作审计等方面的显著优势。
-
学习了多组件分布式架构的实际部署经验。
2. 技术栈全面实践
-
Python多版本环境管理与虚拟环境隔离。
-
数据库(MySQL)、缓存(Redis)的配置与集成。
-
Web服务(Nginx)的反向代理与静态资源服务。
-
前后端分离架构的实际应用部署。
3. 运维安全理念提升
-
实现了运维操作的全程审计与追溯。
-
建立了统一的权限管理体系。
-
掌握了会话录制、命令过滤等安全特性。
实践意义
本次部署不仅是一次技术实践,更是对企业运维安全体系的完整构建。Jumpserver的成功部署:
-
对企业而言:建立了安全的运维入口,实现了服务器访问的集中管控。
-
对运维团队而言:提高了工作效率,统一了操作入口,降低了安全风险。
-
对个人而言:积累了宝贵的开源堡垒机部署经验,提升了综合运维能力。
展望
随着企业规模的扩大,后续还可以考虑:
-
高可用架构部署,确保服务连续性。
-
与现有认证系统(如LDAP/AD)集成。
-
自动化运维流程的结合。
-
安全策略的进一步细化与优化。
堡垒机作为运维安全的核心基础设施,其价值将在未来的运维工作中持续体现。本次实践为构建更加安全、规范的运维体系奠定了坚实基础。
本次部署实践是根据B站,up主:云计算运维,超哥讲解来完整实践并记录了从零开始构建企业级堡垒机的全过程,希望对各位运维同仁有所启发和帮助。在实际生产环境中,请根据具体需求进行适当的调整和优化。
JumpServer堡垒机部署详解

被折叠的 条评论
为什么被折叠?



