欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Jumpserver堡垒机

程序员文章站 2022-07-12 11:37:14
...

Jumpserver简介:

跳板机概述:

跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。
跳板机缺点:
没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中还是会出现误操作、违规操作导致的事故,一旦出现操作事故很难快速定位到原因和责任人;

堡垒机概述:

堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。
堡垒机比跳板机多了实时收集、监控网络环境、集中报警等功能。

Jumpserver概述:

Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统。
Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。
Jumpserver 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。
为互联网企业提供了认证,授权,审计,自动化运维等功能。

Jumpserver实现的功能:

Jumpserver堡垒机
Jumpserver堡垒机
Jumpserver堡垒机
1、用户组/用户 :添加组方便进行授权,用户是授权和登陆的主体.
2、资产组/资产/IDC : 主机信息简洁完整,用户自定义备注登录,支持自动获取主页硬件信息.
3、Sudo/系统用户/授权规则 :支持sudo 授权,系统用户用于登陆客户端,授权是将用户、资产和系统用户关联起来.
4、在线/登录历史/命令记录/上传下载:在线实时监控用户操作,统计和录像回放用户操作内容,阻断控制,详细记录上传下载.
5、上传/下载 : 支持文件上传下载,实现 rzsz方式.
6、默认设置 : 默认管理用户,设置包括用户密码**,默认信息为了方便添加资产而设计.
官方网站
http://www.jumpserver.org
Jumpserver堡垒机

部署jumpserver堡垒机

Jumpserver 环境要求
硬件配置: 2个CPU核心, 4G内存, 50G 硬盘(最低)
操作系统: Linux 发行版 x86_64
Python = 3.6.x
Mysql Server ≥ 5.6
Mariadb Server ≥ 5.5.56
Redis

1、安装python

软件下载地址

https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tg我们下载的是python3.6.8

配置本地jumpserver的yum源

Jumpserver-packs包里包含了所有实验所需的rpm包。
[aaa@qq.com ~]# vim /etc/yum.repos.d/jumpserver.repo
[jumpserver]
name=CentOS7
baseurl=file:///root/jumpserver-packs
enable=1
gpgcheck=0
挂载光盘:mount /dev/cdrom /mnt

上传安装

[aaa@qq.com ~]# ls
anaconda-ks.cfg jumpserver.zip Python-3.6.8.tgz jumpserver-packs.tar.gz pip-packs.tar.gz
[aaa@qq.com ~]# tar -zxvf jumpserver-packs.tar.gz
[aaa@qq.com ~]# tar -zxvf pip-packs.tar.gz
[aaa@qq.com ~]# tar -zxvf Python-3.6.8.tgz -C /usr/local/src/
安装依赖包
[aaa@qq.com ~]# yum install -y gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
编译安装
[aaa@qq.com ~]# cd /usr/local/src/Python-3.6.8/
[aaa@qq.com Python-3.6.8]# ./configure --prefix=/usr/local/python #预编译
[aaa@qq.com Python-3.6.8]# make -j 4 #编译
[aaa@qq.com Python-3.6.8]# make install #安装
给python做软连接
[aaa@qq.com Python-3.6.8]# ln -s /usr/local/python/bin/* /usr/local/bin/
查看python版本
[aaa@qq.com Python-3.6.8]# python3 -V
Python 3.6.8
[aaa@qq.com Python-3.6.8]# pip3 -V
pip 18.1 from /usr/local/python/lib/python3.6/site-packages/pip (python 3.6)

配置python虚拟环境

因为 CentOS 6/7 自带的是 Python2,而Yum等工具依赖原来的 Python,为不扰乱原来的环境我们来使用 Python 虚拟环境
[aaa@qq.com Python-3.6.8]# cd
[aaa@qq.com ~]# python3.6 -m venv /opt/py3 #创建 py3 虚拟环境
[aaa@qq.com ~]# source /opt/py3/bin/activate #载入 py3 虚拟环境
看到下面的提示符代表成功,以后运行 Jumpserver 都要先运行以上 source 命令,以下所有命令均在该虚拟环境中运行
(py3) [aaa@qq.com ~]#
把python虚拟环境设为开机自启动
(py3) [aaa@qq.com ~]# echo “source /opt/py3/bin/activate” >> /root/.bashrc

2、安装jumpserver

解压代码

(py3) [aaa@qq.com ~]# yum install -y unzip
(py3) [aaa@qq.com ~]# unzip jumpserver-master.zip -d /opt/
(py3) [aaa@qq.com ~]# cd /opt/
(py3) [aaa@qq.com opt]# mv jumpserver-master/ jumpserver
(py3) [aaa@qq.com ~]# cd /opt/jumpserver/requirements/

安装rpm依赖

直接安装rpm_requirements.txt文件中所有的软件(是什么系统装什么文件内容)
Jumpserver堡垒机
(py3) [aaa@qq.com requirements]# yum -y install $(cat rpm_requirements.txt)

安装 Python 库依赖

方法一:使用pip离线包安装pip软件包==(本实验做的是这个)(没有网络)==
(py3) [aaa@qq.com requirements]# pip install --no-index --find-links=/root/pip-packs/ pyasn1 six cffi pytest-runner #请先安装这几个依赖包,不然会报错
(py3) [aaa@qq.com requirements]# pip install --no-index --find-links=/root/pip-packs/ -r requirements.txt
扩展知识:缓存pip安装的软件包==(这块本实验不做)==
将pip已经安装的包生成文件
(py3) [aaa@qq.com ~]# pip list #查看安装的包
(py3) [aaa@qq.com ~]# pip freeze > requirements.txt #将已经通过pip安装的包的 名称记录到 requirements.txt文件中
缓存pip下载的包==(这块本实验不做)==
(py3) [aaa@qq.com ~]# pip download -d /root/pip-packs/ -r requirements.txt
-d 指定缓存的目录
-r 指定缓存的软件目录
方法二:安装 Python 库依赖(有网)(这块本实验不做)
修改pip安装加速
有时候我们pip下载特别慢,我们需要给pip指定国内的源来提升下载速度
(py3) [aaa@qq.com requirements]# mkdir /root/.pip
(py3) [aaa@qq.com requirements]# vim /root/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple #这个是清华源
[install]
trusted-host=mirrors.aliyun.com
安装之前先更新pip版本,不然会报错
(py3) [aaa@qq.com requirements]# pip install --upgrade pip #更新pip
(py3) [aaa@qq.com requirements]# pip install -r requirements.txt

3、安装redis

Jumpserver使用Redis做cache和分布式任务队列,如果有搭建好的redis集群,可以不用搭建.也可以使用二进制包安装redis
(py3) [aaa@qq.com ~]# yum -y install redis
(py3) [aaa@qq.com ~]# systemctl start redis #启动redis
(py3) [aaa@qq.com ~]# systemctl enable redis #把redins添加开机启动

4、安装 MySQL

如果有mysql集群,可以不同搭建,centos7默认使用mariadb数据库,也可以源码安装mysql5.7
(py3) [aaa@qq.com ~]# yum -y install mariadb mariadb-devel mariadb-server
(py3) [aaa@qq.com ~]# systemctl start mariadb #启动mariadb
(py3) [aaa@qq.com ~]# systemctl enable mariadb
创建Jumpserver数据库并授权
(py3) [aaa@qq.com ~]# mysql
MariaDB [(none)]> create database jumpserver default charset ‘utf8’;
MariaDB [(none)]> grant all on jumpserver.* to ‘jumpserver’@‘127.0.0.1’ identified by ‘jumpserver’; #授权
MariaDB [(none)]> flush privileges; #刷新权限

5、jumpserver

生成**

生成随机**,等修改配置文件需要
(py3) [aaa@qq.com ~]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
cUBbafUeVjpsO9txGxKbYQhagezAzYaPfVNGQnI2AGYZIaNFL
(py3) [aaa@qq.com ~]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16
h8X7RRmkczrV3Dts

修改 Jumpserver 配置文件

(py3) [aaa@qq.com ~]# cd /opt/jumpserver/
(py3) [aaa@qq.com jumpserver]# cp config_example.yml config.yml
(py3) [aaa@qq.com jumpserver]# vim config.yml
注意: 配置文件是Python 格式,不要用TAB,而要用空格
#配置**
SECRET_KEY: cUBbafUeVjpsO9txGxKbYQhagezAzYaPfVNGQnI2AGYZIaNFL
BOOTSTRAP_TOKEN: h8X7RRmkczrV3Dts

#数据库设置
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: jumpserver #注意修改mysql账号、密码和IP地址
DB_NAME: jumpserver
#Redis配置
REDIS_HOST: 127.0.0.1 #这里可以修改redis配置,我们这里使用默认设置
REDIS_PORT: 6379
#REDIS_PASSWORD:

生成数据库表结构和初始化数据

(py3) [aaa@qq.com jumpserver]# cd /opt/jumpserver/utils/
(py3) [aaa@qq.com utils]# sh make_migrations.sh
Jumpserver堡垒机

运行Jumpserver

(py3) [aaa@qq.com utils]# cd /opt/jumpserver/(它这个会自动读取这个文件,把写到mysql里)
(py3) [aaa@qq.com jumpserver]# ./jms start all -d
#可以-d参数在后台运行 ./jms start all -d, 确保已经载入 py3 虚拟环境。echo $? 查看是否有错
设置service脚本
(py3) [aaa@qq.com ~]# vim /usr/lib/systemd/system/jms.service
[Unit]
Description=jms
After=network.target mariadb.service redis.service docker.service
Wants=mariadb.service redis.service docker.service

[Service]
Type=forking
Environment=“PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin”
ExecStart=/opt/jumpserver/jms start all -d
ExecRestart=/opt/jumpserver/jms restart all -d
ExecStop=/opt/jumpserver/jms stop

[Install]
WantedBy=multi-user.target
(py3) [aaa@qq.com ~]# systemctl daemon-reload
(py3) [aaa@qq.com ~]# systemctl restart jms

设置开机自启动

(py3) [aaa@qq.com ~]# systemctl enable jms

登陆

登陆jumpserver,默认账号:admin 密码:admin
http://192.168.1.13:8080
Jumpserver堡垒机

6、安装Web Terminal- koko组件

这里只是部署了Jumpserver, 没有 Web Terminal,所以访问 Web Terminal(web linux终端)会报错。
Jumpserver堡垒机
Jumpserver堡垒机

上传软件包,安装

(py3) [aaa@qq.com ~]# ls
anaconda-ks.cfg jumpserver-packs.tar.gz pip-packs requirements.txt
jumpserver.zip koko-master-6d4e69b-linux-amd64.tar.gz pip-packs.tar.gz wget-log
jumpserver-packs luna.tar.gz Python-3.6.8.tgz
kokoi项目下载地址
https://github.com/jumpserver/koko/releases/download/1.5.2/koko-master-9ab4ea6-linux-amd64.tar.gz
解压软件包
(py3) [aaa@qq.com ~]# tar -zxvf koko-master-6d4e69b-linux-amd64.tar.gz -C /opt/
修改文件权限
(py3) [aaa@qq.com opt]# chown -R root:root /opt/kokodir/

修改KOKO配置文件

(py3) [aaa@qq.com opt]# cd /opt/kokodir/
(py3) [aaa@qq.com kokodir]# cp config_example.yml config.yml
(py3) [aaa@qq.com kokodir]# vim config.yml #**要跟jumpserver的**一致
如果是分布式装的koko就要指定jumpserver的ip和端口
Jumpserver堡垒机
Jumpserver堡垒机

启动koko(注意:先启动jms,再启动koko

(py3) [aaa@qq.com kokodir]# ./koko & #&把程序调入后台运行
Jumpserver堡垒机

查看端口

(py3) [aaa@qq.com kokodir]# netstat -antup | grep 2222

把koko加入开机自启动

(py3) [aaa@qq.com kokodir]# echo " cd /opt/kokodir && ./koko & " >> /etc/rc.local
(py3) [aaa@qq.com kokodir]# chmod +x /etc/rc.local

在web后台查看终端

Jumpserver堡垒机
可以看见有个cong13的终端说明我们安装成功

使用ssh测试(在koko这个软件服务器上面可以随意登录哪个账号!)

(py3) [aaa@qq.com ~]# ssh aaa@qq.com -p 2222 #使用admin账号登陆,密码:admin
Jumpserver堡垒机
有了Web Terminal以后,我们可以远程堡垒机,然后通过堡垒机进行登录管理服务器。

7、部署luna 组件

解压文件,安装

(py3) [aaa@qq.com ~]# tar -zxvf luna.tar.gz -C /opt/
软件下载地址:
https://github.com/jumpserver/luna/releases/download/1.5.2/luna.tar.gz
设置权限
(py3) [aaa@qq.com ~]# chown -R root:root /opt/luna/

8、设置nginx 整合各组件

安装nginx

这里直接使用yum安装,也可以使用源码包安装
(py3) [aaa@qq.com ~]# yum install -y nginx

修改配置文件

Nginx主要提供反向代理功能,这里要修改主配置文件里的默认server端口
(py3) [aaa@qq.com ~]# vim /etc/nginx/nginx.conf #把80端口修改为808
server {
listen 808 default_server;
listen [::]:808 default_server;
include /etc/nginx/conf.d/*.conf; 注释:
这个文件自动引用/etc/nginx/conf.d/目录下所有以.conf结尾的文件。

创建jumpserver.conf配置文件

所有的jumpserver的服务都使用nginx来进行反向代理,开启nginx缓存
(py3) [aaa@qq.com ~]# vim /etc/nginx/conf.d/jumpserver.conf

 server {
listen 80;

client_max_body_size 100m;  # 录像及文件上传大小限制

location /luna/ {
    try_files $uri / /index.html;
    alias /opt/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改
}

location /media/ {
    add_header Content-Encoding gzip;
    root /opt/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改
}

location /static/ {
    root /opt/jumpserver/data/;  # 静态资源, 如果修改安装目录, 此处需要修改
}

location /socket.io/ {
    proxy_pass       http://localhost:5000/socket.io/;
    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 /coco/ {
    proxy_pass       http://localhost:5000/coco/;
    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 / {
    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;
}
}
录像存放位置:

Jumpserver堡垒机
测试配置文件
(py3) [aaa@qq.com ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
启动nginx
(py3) [aaa@qq.com ~]# systemctl start nginx
(py3) [aaa@qq.com ~]# systemctl enable nginx

登陆jumpserver

使用nginx做反向代理以后,就可以直接使用80端口来访问jumpserver
http://192.168.1.13
Jumpserver堡垒机

查看luna(做到这拍个快照

发现luna页面可以打开了(web终端)
Jumpserver堡垒机
(查看文件管理)
Jumpserver堡垒机
我们这里没有部署windows客户端组件guacamole,因为只能通过jumpserver的web客户端来连接windows服务器,不实用。windows服务器我们一般还是使用TeamViewer、vnc或者windows远程连接。

jumpserver使用

创建登录用户

修改当前站点的URL为本机IP或者jumpserver的域名,不然新建用户发送过去的邮件修改不了密码。
Jumpserver堡垒机
设置jumpserver邮箱
设置jumpserver发件邮箱,用来给用户发送通知邮件,设置完了以后测试一下邮箱联通。
Jumpserver堡垒机
创建用户
创建用户(你当前环境有网才能正常收发邮件)
这里创建的用户是登陆jumpserver的用户,这个用户可以登陆jumpserver,然后通过jumpserver去连接被管理的服务器,最后登陆到被管理的服务器进行命令操作。当然,这里创建的用户也可以提权来管理jumpserver的后台。
Jumpserver堡垒机
Jumpserver堡垒机
邮箱设置
Jumpserver堡垒机
新注册的sina邮箱需要更改SMTP服务并设定密码,需要保证虚拟机能够正常联网才能收到邮件。
查看邮件
这是使用的是通过邮件发送用户密码,第一次登陆必须需修改密码。
Jumpserver堡垒机
修改密码
Jumpserver堡垒机
设置成功后,退出admin账号,登录刚刚新建账号Jumpserver堡垒机
Jumpserver堡垒机

创建用户组

Jumpserver堡垒机Jumpserver堡垒机

添加资产

开启虚拟机cong11
添加被管理端root账号
管理用户是资产(被控服务器)上的 root,或拥有 NOPASSWD: ALL sudo 权限的用户, Jumpserver 使用该用户来 推送系统用户、获取资产硬件信息等。
Jumpserver堡垒机blog.csdnimg.cn/20200324212355419.png)
就是你要添加的资产,新开的那个主机的,用户名和密码
Jumpserver堡垒机
添加资产Jumpserver堡垒机Jumpserver堡垒机Jumpserver堡垒机

创建命令过滤器

系统用户可以绑定一些命令过滤器,一个过滤器可以定义一些规则 当用户使用这个系统用户登录资产,然后执行一个命令 这个命令需要被绑定过滤器的所有规则匹配,高优先级先被匹配, 当一个规则匹配到了,如果规则的动作是允许,这个命令会被放行, 如果规则的动作是禁止,命令将会被禁止执行, 否则就匹配下一个规则,如果最后没有匹配到规则,则允许执行Jumpserver堡垒机Jumpserver堡垒机

创建过滤器规则

过滤器规则里面所写的命令可以选择允许或者拒绝。Jumpserver堡垒机Jumpserver堡垒机Jumpserver堡垒机

创建系统用户

系统用户是 Jumpserver 跳转登录被管理服务器时使用的用户,而不是使用某个用户的用户名跳转登录服务器(ssh aaa@qq.com); 简单来说是用户使用自己的用户名登录 Jumpserver,Jumpserver 使用系统用户登录资产。 系统用户创建时,如果选择了自动推送,Jumpserver 会使用 Ansible 自动推送系统用户到资产中,如果资产(交换机)不支持 Ansible,请手动填写账号密码。当前环境不用管密码
Jumpserver堡垒机Jumpserver堡垒机

资产授权(权限)

Jumpserver堡垒机Jumpserver堡垒机Jumpserver堡垒机

测试

使用web终端测试
打开web终端
这里使用谷歌类的浏览器,有些浏览器不支持luna
Jumpserver堡垒机
安装一个httpd
[aaa@qq.com ~]$ yum -y install httpd
Jumpserver堡垒机
注意:如果连接失败,应该是管理用户连接后台资产出现问题,如网络不可达,或jumpserver 2222端口down掉 (cd /opt/kokodir && ./koko &)
可以看到,这里登陆登陆的账号是我们创建的系统账号admin登陆的,执行命令需要使用sudo提权。

使用xshell测试

登陆jumpserver 的Web Terminal
使用我们的账号lijinming登陆jumpserver
(py3) [aaa@qq.com ~]# ssh aaa@qq.com -p 2222Jumpserver堡垒机
查看自己名下的主机
Jumpserver堡垒机
登陆cong11
Jumpserver堡垒机
安装httpd
启动cong11上的httpd
[aaa@qq.com ~]$ sudo systemctl start httpd
测试httpd网页
http://192.168.1.11/
Jumpserver堡垒机

查看命令记录

Jumpserver堡垒机
查看录像
Jumpserver堡垒机

各用户的关系

Jumpserver堡垒机