搭建jumpserver堡垒机
(1).跳板机和堡垒机概述
跳板机属于内控堡垒机范畴,是一种用于单点登陆的主机应用系统。跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然后从这台服务器再登录到目标设备进行维护。但跳板机的缺点是没有实现对运维人员操作行为的控制和审计,出现误操作或违规操作难以定位到原因和责任人;并且跳板机存在严重的安全风险,如果跳板机系统被攻入,则后端资源完全暴露无遗。对于个别资源(如telnet)可以通过跳板机来完成一定的内控,但是对于更多更特殊的资源(ftp、rdp等)来讲,就显得力不从心了。
堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责,有效降低了运维操作风险,使得运维操作管理变得更简单、更安全。
(2).Jumpserver概述
Jumpserver 是一款使用Python、Django开发的开源跳板机系统, 为互联网企业提供了认证,授权, 审计,自动化运维等功能,即堡垒机。官网:http://www.jumpserver.org/。并且这是中国人自己开发的堡垒机,提供中文文档:https://jumpserver.readthedocs.io/zh/master/(安装步骤都是全的)
Jumperserver共有三个组件:Jumpserver、Coco和Luna。Jumpserver管理后台,是核心组件, 使用Django Class Based View风格开发,支持 Restful API;Coco是实现SSH Server和Web Terminal Server的组件,提供SSH 和 WebSocket接口, 使用Paramiko和Flask开发;Luna是Web Terminal前端,计划前端页面都由该项目提供,Jumpserver只提供API,不再负责后台渲染html等。
(3). 实验环境和下载安装包
实验环境:
youxi1 192.168.1.6 jumpserver服务器端
youxi2 192.168.1.7 被管理端
下载安装包:
https://github.com/jumpserver 下载jumpserver三个组件,下载时注意下需要的其他安装包版本
https://www.python.org/downloads/source/ 下载python
(4).安装jumpserver组件
由于依赖较多,如果需要多次安装或在无网情况下安装,可以保留yum安装包,详见:yum保留安装包方法,以及存放路径;pip使用pip download -r requirements.txt下载python包到本地。
1)修改字符编码
jumpserver是国人开发的,日志中存在中文,所以需要修改字符编码。查看命令是echo $LANG
[root@youxi1 ~]# # localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 //如果没有中文UTF-8需要执行该命令 [root@youxi1 ~]# export LC_ALL=zh_CN.UTF-8 //LC_ALL会覆盖所有LC_*设置的值 [root@youxi1 ~]# echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf
最后注销重新登录即可。
LC_ALL详细查看:https://www.cnblogs.com/wajika/p/6592659.html
2)安装依赖包
[root@youxi1 ~]# yum -y install sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release unzip
3)安装python
上传下载好的Python3.6.1,解压后编译安装
[root@youxi1 ~]# tar xf Python-3.6.1.tar.xz [root@youxi1 ~]# cd Python-3.6.1 [root@youxi1 Python-3.6.1]# ./configure && make -j 2 && make install [root@youxi1 Python-3.6.1]# echo $? 0
python3.6默认安装在/usr/local/bin/下,扩展包安装在/usr/local/lib/python3.6/目录下。也可以在./configure时使用--prefix=[地址]指定安装目录。
4)建立Python3的虚拟环境
由于CentOS6/7自带的都是Python2,而yum等工具依赖的都是自带的Python,所以需要建立一个互不干扰的Python3虚拟环境,以便jumpserver调用。
[root@youxi1 Python-3.6.1]# python3.6 -m venv /opt/py3 [root@youxi1 Python-3.6.1]# source /opt/py3/bin/activate (py3) [root@youxi1 Python-3.6.1]# //可以看到前面多了一个py3 (py3) [root@youxi1 Python-3.6.1]# python -V //此时查看版本也可以发现是3.6.1 Python 3.6.1
5)安装jumpserver
上传下载好的jumpserver包到/opt目录下,解压后编译安装。注意:三个组件都要在/opt目录下,我曾尝试将三个组件放在/root目录下,但是Web终端会失效,暂时不知道修改哪里,和py3的位置无关。
(py3) [root@youxi1 Python-3.6.1]# cd /opt (py3) [root@youxi1 opt]# unzip jumpserver-master.zip (py3) [root@youxi1 opt]# cd jumpserver/requirements/ (py3) [root@youxi1 requirements]# yum -y install $(cat rpm_requirements.txt) //安装依赖rpm包 (py3) [root@youxi1 requirements]# pip install --upgrade pip //升级pip版本,如果pip版本过低部分依赖库无法安装 (py3) [root@youxi1 requirements]# pip install -r requirements.txt //安装python库依赖包 (py3) [root@youxi1 requirements]# yum -y install redis //jumpserver会使用redis做cache和celery broke (py3) [root@youxi1 requirements]# systemctl start redis (py3) [root@youxi1 requirements]# systemctl enable redis Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service. (py3) [root@youxi1 requirements]# yum -y install mariadb mariadb-devel mariadb-server (py3) [root@youxi1 requirements]# systemctl start mariadb (py3) [root@youxi1 requirements]# systemctl enable mariadb Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. (py3) [root@youxi1 requirements]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database jumpserver default charset 'utf8'; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by "123456"; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> exit Bye (py3) [root@youxi1 requirements]# cd .. //回到/root/jumpserver目录下 (py3) [root@youxi1 jumpserver]# cp config_example.py config.py //生成配置文件 (py3) [root@youxi1 jumpserver]# vim config.py //第38~43行去除注释,但一定要注意格式,前面的都是空格,不是TAB DB_ENGINE = 'mysql' DB_HOST = '127.0.0.1' DB_PORT = 3306 DB_USER = 'jumpserver' #登陆数据库的用户 DB_PASSWORD = '123456' #密码 DB_NAME = 'jumpserver' #数据库名称 (py3) [root@youxi1 jumpserver]# cd utils/ //这下面是shell脚本和redis.conf (py3) [root@youxi1 utils]# ls //注意,以下文件都没有执行权限 clean_migrations.sh export_fake_data.sh load_fake_data.sh make_migrations.sh redis.conf (py3) [root@youxi1 utils]# bash make_migrations.sh //初始化数据库 (py3) [root@youxi1 utils]# cd .. //回到/root/jumpserver目录下 (py3) [root@youxi1 jumpserver]# chmod +x jms //给启动脚本添加执行权限 (py3) [root@youxi1 jumpserver]# ./jms start all -d //运行jumpserver,-d选项表示后台运行
说明1:在线下载jumpserver命令,yum -y install git && git clone --depth=1 https://github.com/jumpserver/jumpserver.git。
说明2:pip是一个安装和管理Python包的工具,相当于yum命令。
说明3:./jms start|stop|status|restart all,-d选项表示后台运行
说明4:如果以上都是正确的,只有启动jumpserver失败,请再次启动jumpserver
说明5:jumpserver组件的启动必须在python3环境下启动
另外,jumpserver通过8080端口在浏览器中调用,所以如果防火墙是开启状态的请添加8080端口。
(py3) [root@youxi1 jumpserver]# firewall-cmd --permanent --zone=public --add-port=8080/tcp success (py3) [root@youxi1 jumpserver]# firewall-cmd --reload success
6)浏览器访问jumpserver
登陆192.168.1.6:8080,账号密码默认都是admin。
(5).安装Coco组件
上传下载好的Coco包到/opt目录下,解压安装
(py3) [root@youxi1 jumpserver]# cd .. (py3) [root@youxi1 opt]# unzip coco-master.zip (py3) [root@youxi1 opt]# cd coco/requirements/ (py3) [root@youxi1 requirements]# yum -y install $(cat rpm_requirements.txt) (py3) [root@youxi1 requirements]# pip install -r requirements.txt //pip安装失败可以重新尝试,因为是国外的网址 (py3) [root@youxi1 requirements]# cd .. //回到/root/coco目录下 (py3) [root@youxi1 coco]# cp conf_example.py conf.py //生成配置文件 (py3) [root@youxi1 coco]# chmod +x cocod //给启动脚本添加执行权限 (py3) [root@youxi1 coco]# ./cocod start -d Start coco process
说明1:如果jumpserver组件和coco组件不是在一台服务器上,需要修改配置文件
说明2:在线下载coco组件命令,git clone https://github.com/jumpserver/coco.git
说明3:./cocod start|stop|status|restart,-d选项表示后台运行
另外如果防火墙是开启状态,需要开放2222和5000端口。
(py3) [root@youxi1 coco]# firewall-cmd --permanent --zone=public --add-port=5000/tcp success (py3) [root@youxi1 coco]# firewall-cmd --permanent --zone=public --add-port=2222/tcp success (py3) [root@youxi1 coco]# firewall-cmd --reload success
(6).安装Luna组件
上传下载好的luna包,解压即可
(py3) [root@youxi1 coco]# cd .. (py3) [root@youxi1 opt]# unzip luna-master.zip
说明:luna并不需要安装和运行,是由网站服务调用的。
(7).使用nginx整合
根据需求安装nginx,并修改配置文件,已达到整合的目的
(py3) [root@youxi1 opt]# cd (py3) [root@youxi1 ~]# yum -y install nginx (py3) [root@youxi1 ~]# vim /etc/nginx/nginx.conf //修改配置文件 //第38行开始,注释掉原有的server块,编辑如下内容 server{ listen 80; 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 /luna/{ try_files $uri / /index.html; alias /opt/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/; #填写coco组件所在服务器的ip地址 proxy_buffering off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location / { proxy_pass http://localhost:8080; #填写jumpserver组件所在服务器的ip地址 } } (py3) [root@youxi1 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful (py3) [root@youxi1 ~]# systemctl start nginx (py3) [root@youxi1 ~]# systemctl enable nginx Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
如果防火墙是启动状态记得添加80端口
(py3) [root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp success (py3) [root@youxi1 ~]# firewall-cmd --reload success
(8).网页接收Coco组件的注册
会话管理-->终端管理-->接受相应的服务器。
会弹出接受终端注册页面,确认信息无误后点击确认。
刷新一下,在线的红点会变为绿点
使用ssh通过2222端口连接测试,如下就是成功登录情况:
(py3) [root@youxi1 ~]# ssh -p2222 admin@192.168.5.101 The authenticity of host '[192.168.5.101]:2222 ([192.168.5.101]:2222)' can't be established. RSA key fingerprint is SHA256:KN34qtWccgpLBiNzSVLMVDmD0xfMSgLYkeaxD3nBki4. RSA key fingerprint is MD5:08:9b:df:9d:a0:d9:63:20:66:37:1e:85:89:82:b0:9d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.5.101]:2222' (RSA) to the list of known hosts. admin@192.168.5.101's password: Administrator, 欢迎使用Jumpserver开源跳板机系统 1) 输入 ID 直接登录 或 输入部分 IP,主机名,备注 进行搜索登录(如果唯一). 2) 输入 / + IP, 主机名 or 备注 搜索. 如: /ip 3) 输入 P/p 显示您有权限的主机. 4) 输入 G/g 显示您有权限的主机组. 5) 输入 G/g + 组ID 显示该组下主机. 如: g1 6) 输入 H/h 帮助. 0) 输入 Q/q 退出. Opt>
(9).jumpserver平台初始化
系统设置-->基本设置-->修改当前站点URL-->提交
在选中系统设置中的邮件设置,填写SMTP信息,测试连接,在收到邮件后提交
注意:SMTP在邮箱的设置中开启,并获取密码。
(10).jumpserver的使用
1)创建用户
用户管理-->用户列表-->创建用户
填写用户信息并提交,必填:名称,用户名和邮箱
用户创建完成后,会使用设置好的SMTP邮箱账户想填写的邮箱发送创建成功邮件,然后通过连接设置密码
----->
第一次登录需要补全信息,生成公钥。注意:该用户用于使用远程连接工具,通过2222连接登录到jumpserver。
(py3) [root@youxi1 ~]# useradd user1 (py3) [root@youxi1 ~]# echo 123456 | passwd --stdin user1 更改用户 user1 的密码 。 passwd:所有的身份验证令牌已经成功更新。 (py3) [root@youxi1 ~]# su - user1 [user1@youxi1 ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_rsa): Created directory '/home/user1/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub. The key fingerprint is: SHA256:isRhZ5oLAd9nxLO+r9v8cm+ODXZqmkHuF0qRJrGoVQQ user1@youxi1 The key's randomart image is: +---[RSA 2048]----+ |. E+o | | o . .= | | o +o== . | | +oO+ + | | .o=. oS. | | .o o.+. . | | o .oo.o.. | | .+o++*. | | o+BB+++ | +----[SHA256]-----+ [user1@youxi1 ~]$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChMqTST9XVnLpdBhPtRQv/O5HDFNbUTwMOkkxiCEZc
jL6B1dZsheJ6Hfb/TCUKD8BAq2ge8KuWA1Nn4z8/jSQDBtgal0JbWuKs0mr5F+84zWGqX69lCTl+N+Ya
qZZoEK5TKAK0Dq/LE6YDfpBTWfl+SYaj4ebldNtyl2yKs4W/+hRFwROJrZrbOtu09jU4KyNsBAiAfw75
ft6aw2XxKivcJrkCgEop5xpFPq4aXAhwd0POb13OveJiAqc1s+ivEH5qECopKMQrvm9VG8WN1Z2QqS/Q
WnZtiFErP2fpBehfcc8H1/ZVcTQYw8NSOioo+8aEJJlsjp08PseuoFjudKN5 user1@youxi1
然后复制提交
2)创建用户组
用户管理-->用户组-->创建用户组
填写信息并提交,必填:名称
3)编辑资产树,添加节点
资产管理-->资产列表-->右键资产树-->新建节点
当然也可以右键资产树节点,选择重命名节点
4)创建管理用户
Jumpserver对管理用户的说明:管理用户是服务器的root,或拥有 NOPASSWD: ALL sudo权限的用户,Jumpserver使用该用户来 `推送系统用户`、`获取资产硬件信息`等。 Windows或其它硬件可以随意设置一个。
由于资产创建必须要有管理用户,所以先介绍管理用户。
资产管理-->管理用户-->创建管理用户
填写管理用户信息并提交,填写的密码或密钥要保证管理用户可以登录到其下的资产。
5)创建系统用户
jumpserver对系统用户的说明:系统用户是Jumpserver跳转登录资产时使用的用户,可以理解为登录资产用户,如 web, sa, dba(`ssh web@some-host`), 而不是使用某个用户的用户名跳转登录服务器(`ssh xiaoming@some-host`); 简单来说是 用户使用自己的用户名登录Jumpserver, Jumpserver使用系统用户登录资产。 系统用户创建时,如果选择了自动推送 Jumpserver会使用ansible自动推送系统用户到资产中,如果资产(交换机、windows)不支持ansible, 请手动填写账号密码。 目前还不支持Windows的自动推送。
系统用户推送,要推送成功,client(后端服务器)要满足以下条件: 1.后端服务器需要有python、sudo环境才能使用推送用户,批量命令等功能;2.后端服务器如果开启了selinux,请安装libselinux-python。一般情况服务器上都关闭了selinux。
资产管理-->系统用户-->创建系统用户
填写系统用户信息。Linux 系统协议项务必选择 ssh 。如果用户在系统中已存在,请去掉自动生成密钥、自动推送勾选。如果想要包含摸个目录下的所有命令,那么需要使用绝对路径,并且必须以/结尾。
也可以创建一个专用系统账户,如用于检测服务器运行状态的系统用户
6)创建资产
资产管理-->资产列表-->选中节点-->创建资产
填写资产信息,目前没有管理用户和王宇,可以后期修改
最后可连接应该显示绿色
如果可连接没有变为绿色,点击主机名,进去更新硬件信息和测试可连接性。
7)网域列表功能简单说明
网域功能是为了解决部分环境无法直接连接而新增的功能,原理是通过网关服务器进行跳转登录。这个功能,一般情况不用到,在资产管理中的网域列表中设置。
8)创建授权规则
节点,对应的是资产,代表该节点下的所有资产;用户组,对应的是用户,代表该用户组下所有的用户;系统用户,及所选的用户组下的用户能通过该系统用户使用所选节点下的资产。节点,用户组,系统用户是一对一的关系,所以当拥有 Linux、Windows 不同类型资产时,应该分别给 Linux 资产和 Windows 资产创建授权规则。
权限管理-->资产授权-->内部测试节点-->创建授权规则
填写权限规则信息,并提交
授权成功后可以到youxi2服务器上查看是否创建了admin用户
[root@youxi2 ~]# tail -n 5 /etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin admin:x:1000:1000::/home/admin:/bin/bash //可以看到创建了admin用户
还可以使用visudo查看admin用户的相关规则
[root@youxi2 ~]# visudo admin ALL=(ALL) NOPASSWD: /sbin/,/bin/ //最后一行
9)用户使用
使用用户1(user1,管理员组,网页账号登录)登录jumpserver,出现如下页面
点击Web终端,出现如下页面,选择节点和服务器就可以连接上并使用。注意:如果谷歌浏览器无法打开web终端,可以尝试使用其他浏览器,我的就是谷歌无法打开换用360就可以打开。
执行几个小命令,为列之后查看jumpserver是否记录操作
10)使用远程工具,2222端口,user1用户登录youxi1服务器
----->
使用2222端口和user1用户登录会显示如下
输入p可以查看有权限的主机,然后输入主机名登录
Opt> p ID Hostname IP LoginAs Comment 1 youxi2 192.168.5.102 [系统管理员用户] 总共: 1 匹配: 1 Opt> youxi2 Connecting to admin@youxi2 0.2 Last login: Thu Sep 5 11:09:05 2019 from youxi1.cn [admin@youxi2 ~]$ //可以看到登录的用户是admin
11)查看历史命令
使用管理员账号登录jumpserver网页。
在会话管理的命令记录中可以看到用户使用哪个系统用户登录的服务器,执行的什么命令。
另外还可以在会话管理的历史会话中回放操作视频