JumpServer堡垒机使用

First Post:

Last Update:

什么是堡垒机

堡垒机也是一台服务器,在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集、监控网络环境中每一个组成部分(服务器)的系统状态、安全事件、网络活动,以便集中报警、及时处理以及审计定责
可以把堡垒机看作一个升级版的跳板机,跳板机有的功能堡垒机都有并且还多了许多功能,如实时收集、监控网络环境、集中报警等功能
堡垒机的优点:

1
2
堡垒机可以给其他服务器推送sudo用户,并且为其设置权限
堡垒机多了一个用户行为监控的功能,并且是录像

JumpServer概述

JumpServer是全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合4A的专业运维审计系统
JumpServer使用Python\Django开发,遵循Web 2.0规范,配备了业界领先的web Terminal(web终端,即网页终端)解决方案,交互界面美观,用户体验良好
JumpServer采用分布式结构,支持多机房跨区域部署,中心节点提供API(接口),各机房部署登录节点,可以横向扩展,并且没有并发限制
JumpServer为互联网企业提供了认证、授权、审计、自动化运维等功能
JumpServer通过调用各种应用程序的模块来实现各种功能

JumpServer实现的功能


身份验证Authentication

登录认证:资源统一登录和认证、LDAP认证、支持OpenID,实现单点登录
多因子认证:MFA(Google Authenticator)

账号管理 Account

集中账号管理:管理用户管理、系统用户管理
统一密码管理:资产密码托管、自动生成密码、密码自动推送、密码过期设置
批量密码变更:定期批量修改密码、生成随机密码
多云环境的资产纳管:对私有云、公有云资产统一管理

授权控制Authorization

资产授权管理:资产树、资产或资产组灵活授权、节点内资产自动继承授权
RemoteApp:实现更细粒度的应用级授权
组织管理:实现多租户管理,权限隔离
多维度授权:可以对用户、用户组或者系统角色授权
指令限制:限制特权指令使用、支持黑白名单
统一文件传输:SFTP文件的上传\下载
文件管理:Web SFTP文件管理

安全审计Audit

会话管理:在线会话管理、历史会话管理
录像管理:linux录像支持、windows录像支持
指令审计:指令记录
文件传输审计:上传\下载记录审计

部署JumpServer堡垒机

(1)实验环境
JumpServer对硬件和软件是有要求的
硬件要求:2个CPU核心,4G内存,50G硬盘,这是最低配置
操作系统:Linux发行版 X86_64位的系统
Python:只可以使用Python3.6.X版本
Mysql:大于等于5.6版本
mariadb:大于等于5.5.56版本
redis
系统 ip地址 Python版本 主机名
Centos7.4 192.168.100.202 桥接网卡 (两块网卡) python3.6.8 jumpserver

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname jumpserver
[root@Centos7 ~]# su
[root@jumpserver ~]# systemctl stop firewalld
[root@jumpserver ~]# setenforce 0
setenforce: SELinux is disabled
[root@jumpserver ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
/dev/sr0 已经挂载到 /mnt 上
[root@jumpserver ~]# vim /etc/yum.repos.d/centos.repo #修改yum源,修改为本地yum源,也可以使用网络yum源进行下载,依赖包很多
[aaa]
name=aaa
baseurl=file:///mnt
enabled=1
gpgcheck=0

[jumpserver]
name=jumpserver
baseurl=file:///root/jumpserver-packs
enabled=1
gpgcheck=0
[root@jumpserver ~]# ll #上传yum库
总用量 92708
-rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg
-rw-r--r-- 1 root root 94928169 5月 31 18:48 jumpserver-packs.tar.gz
[root@jumpserver ~]# tar xf jumpserver-packs.tar.gz
[root@jumpserver ~]# ll
总用量 92720
-rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg
drwxr-xr-x 3 root root 8192 12月 10 2019 jumpserver-packs
-rw-r--r-- 1 root root 94928169 5月 31 18:48 jumpserver-packs.tar.gz



******(2)上传安装包,进行安装
[root@jumpserver ~]# ll
总用量 181496
-rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg
-rw-r--r-- 1 root root 7664345 5月 31 18:51 jumpserver-master.zip
drwxr-xr-x 3 root root 8192 12月 10 2019 jumpserver-packs
-rw-r--r-- 1 root root 94928169 5月 31 18:48 jumpserver-packs.tar.gz
-rw-r--r-- 1 root root 60226671 5月 31 18:51 pip-packs.tar.gz
-rw-r--r-- 1 root root 23010188 5月 31 18:52 Python-3.6.8.tgz
[root@jumpserver ~]# tar xf pip-packs.tar.gz
[root@jumpserver ~]# tar xf Python-3.6.8.tgz -C /usr/local/src/
[root@jumpserver ~]# 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 #安装依赖包
。。。。。。
完毕!
[root@jumpserver ~]# cd /usr/local/src/Python-3.6.8/
[root@jumpserver Python-3.6.8]# ./configure --prefix=/usr/local/python && make -j 2 && make install #make -j 2表示使用两个cpu进行编译
[root@jumpserver Python-3.6.8]# echo $?
0
[root@jumpserver Python-3.6.8]# ln -s /usr/local/python/bin/* /usr/local/bin/ #优化python命令执行路径
[root@jumpserver Python-3.6.8]# python3 -V #查看python版本
Python 3.6.8
[root@jumpserver Python-3.6.8]# pip3 -V #查看pip版本
pip 18.1 from /usr/local/python/lib/python3.6/site-packages/pip (python 3.6)
[root@jumpserver Python-3.6.8]# cd



******(3)配置python3虚拟环境,因为centos6、7自带的python版本是python2,而yum等工具依赖的是python2,所以不能直接把python2换成python3,为了不扰乱原来的环境,可以配置python3的虚拟环境,进入虚拟环境后所有的操作都会在虚拟环境中执行
[root@jumpserver ~]# python3.6 -m venv /opt/py3 #创建虚拟环境
[root@jumpserver ~]# source /opt/py3/bin/activate #进入虚拟环境
(py3) [root@jumpserver ~]# #前面多了(py3)就是进入了虚拟环境



******(4)安装jumpserver
(py3) [root@jumpserver ~]# yum -y install unzip
。。。。。。
完毕!
(py3) [root@jumpserver ~]# unzip jumpserver-master.zip -d /opt/ #解压
(py3) [root@jumpserver ~]# cd /opt/
(py3) [root@jumpserver opt]# mv jumpserver-master/ jumpserver #重命名
(py3) [root@jumpserver opt]# cd /opt/jumpserver/requirements/
(py3) [root@jumpserver requirements]# ll
总用量 24
-rw-r--r-- 1 root root 251 7月 26 2019 alpine_requirements.txt
-rw-r--r-- 1 root root 212 7月 26 2019 deb_requirements.txt
-rw-r--r-- 1 root root 359 7月 26 2019 issues.txt
-rw-r--r-- 1 root root 54 7月 26 2019 mac_requirements.txt
-rw-r--r-- 1 root root 1551 7月 26 2019 requirements.txt
-rw-r--r-- 1 root root 204 7月 26 2019 rpm_requirements.txt
(py3) [root@jumpserver requirements]# yum -y install $(cat rpm_requirements.txt) #rpm_requirements.txt里面就是jumpserver所需要的所有rpm包,$(cat rpm_requirements.txt)可以直接全部安装
。。。。。。
完毕!



******(5)安装python库依赖
#安装python库依赖有两种方法,一种是没有网络的环境下安装,一种是有网络的环境下安装
#没有网络的环境下安装:(需要有现成的pip包,一开始已经上传了)
(py3) [root@jumpserver requirements]# pip install --no-index --find-links=/root/pip-packs/ pyasn1 six cffi pytest-runner #需要先安装这几个依赖包,--no-index是忽略包索引,不加这个的话会上网络上寻找,--find-links=为指定依赖包的路径,表示直接从这个路径下寻找
。。。。。。
完毕!
(py3) [root@jumpserver requirements]# echo $?
0
(py3) [root@jumpserver requirements]# pip install --no-index --find-links=/root/pip-packs/ -r requirements.txt #-r的意思和刚才的$(cat rpm_requirements.txt)相同
。。。。。。
完毕!
(py3) [root@jumpserver requirements]# echo $?
0
#在有网络的环境下安装:(修改yum源文件)
默认下载pip指的是国外的源,下载特别慢,但是可以给pip指定国内的源来提升下载速度
(py3) [root@jumpserver ~]# mkdir /root/.pip
(py3) [root@jumpserver ~]# vim /root/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple #这个是清华源
[install]
trusted-host=mirrors.aliyun.com
(py3) [root@jumpserver ~]# pip install --upgrade pip #安装之前先更新pip版本,不然会报错
(py3) [root@jumpserver ~]# pip install -r requirements.txt



******(6)安装redis,如果有预先部署好的redis可以不用安装,可以使用yum或者源码包来安装
(py3) [root@jumpserver requirements]# yum -y install redis
。。。。。。
完毕!
(py3) [root@jumpserver requirements]# systemctl start redis
(py3) [root@jumpserver 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@jumpserver requirements]# echo $?
0



******(7)安装mysql,如果有预先部署好的mysql可以不用安装,可以使用yum安装mariadb或者源码安装mysql
(py3) [root@jumpserver requirements]# yum -y install mariadb mariadb-devel mariadb-server
。。。。。。
完毕!
(py3) [root@jumpserver requirements]# systemctl start mariadb
(py3) [root@jumpserver 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@jumpserver requirements]# echo $?
0



******(8)创建jumpserver数据库并且授权用户
(py3) [root@jumpserver requirements]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.64-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'; #创建jumpserver库默认字体为utf8
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'jumpserver'; #授权用户
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges; #更新权限
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye



******(9)生成密钥,生成的两串随机数待会会用到
(py3) [root@jumpserver requirements]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo #/dev/urandom是一个数据流,也就是随机数,默认里面是乱码,所以需要筛选,tr -dc A-Za-z0-9就是筛选字母大小写和数字的,head -c 49;echo也就是输出49个随机数
Njkc2G6ZTbkmv6SKchQIHnR0ubk29yWyhG0annnef6IHi3xYE
(py3) [root@jumpserver requirements]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16 ; echo #和上面同理
TDYY6C1tY24iZv6j



******(10)修改jumpserver配置文件,配置文件是python格式的,不能使用tab要使用空格隔开
(py3) [root@jumpserver requirements]# cd /opt/jumpserver/
(py3) [root@jumpserver jumpserver]# cp config_example.yml config.yml
(py3) [root@jumpserver jumpserver]# vim config.yml
。。。。。。
3 # $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
4 SECRET_KEY: Njkc2G6ZTbkmv6SKchQIHnR0ubk29yWyhG0annnef6IHi3xYE #中间都有空格
5
6 # SECURITY WARNING: keep the bootstrap token used in production secret!
7 # 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
8 BOOTSTRAP_TOKEN: pehtn3wIVSIuSK1v
9
。。。。。。
35 DB_ENGINE: mysql
36 DB_HOST: 127.0.0.1
37 DB_PORT: 3306
38 DB_USER: jumpserver
39 DB_PASSWORD: jumpserver #注意密码、用户、数据库名称要和刚才数据库中的操作相同
40 DB_NAME: jumpserver
41
。。。。。。 #下面还可以修改redis配置,这里直接使用默认配置了
49 # Redis配置
50 REDIS_HOST: 127.0.0.1
51 REDIS_PORT: 6379
52 # REDIS_PASSWORD:
#保存退出



******(11)生成数据表结构和初始化数据
(py3) [root@jumpserver jumpserver]# cd /opt/jumpserver/utils/
(py3) [root@jumpserver utils]# sh make_migrations.sh
(py3) [root@jumpserver utils]# echo $?
0



******(12)运行jumpserver并且配置系统启动脚本
(py3) [root@jumpserver utils]# cd /opt/jumpserver/
(py3) [root@jumpserver jumpserver]# ./jms start all #可以加-d放到后台运行,但是需要确保已经载入python3的虚拟环境CTRL+C退出,直接编写启动脚本就可以,jumpserver默认监听端口为8080
(py3) [root@jumpserver jumpserver]# 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) [root@jumpserver jumpserver]# systemctl daemon-reload
(py3) [root@jumpserver jumpserver]# systemctl start jms #开启jumpserver服务
#启动有点慢
(py3) [root@jumpserver jumpserver]# netstat -anpt | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1389/python3.6
(py3) [root@jumpserver jumpserver]# systemctl enable jms
Created symlink from /etc/systemd/system/multi-user.target.wants/jms.service to /usr/lib/systemd/system/jms.service.

打赏
支付宝 | Alipay
微信 | WeChat