53. jumpserver 快速安装
1.JumpServer基本概述
1.1 什么是堡垒机
堡垒机其实是基于跳板机基础之上,能够实现运维更加安全的操作目标集群服务器。提供什么安全保证∶
1.资产集中管理(统一管理)。
2审计、记录、视频回放操作记录。
3.限制如rm、dd 等危险命令执行。
4.限制登陆目标服务器的身份权限。
1.2 为什么要使用堡垒机
*首先,堡垒机提供了运维安全审计的4A规范:
身份鉴别,防止身份冒用和复用 Authorization :授权控制,防止内部误操作和权限滥用
账号管理,人员和资产的管理
安全审计,追溯和分析事故的依据其次,堡垒机的建设目标可以概括为5W,主要是为了降低运维风险
审计︰你做了什么? ( What )
授权∶你能做哪些? ( Which )
账号∶你要去哪?( Where )
认证:你是谁? ( Who )
来源︰访问时间?( When )
总结︰
堡垒机能让运维更安全、更加便捷的登陆目标资产服务。
堡垒机还可以帮助企业快速构建"身份鉴别、访问控制、安全审计”,助力企业满足新等保要求。[等保2.0]
所有企业都需要使用堡垒机。因为堡垒机是企业进行'资产管理、运维安全审计"的重要组件。*
1.3 什么是jumpserver
JumpServer是全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合4A的专业运维审计系统。
JumpServer使用Python / Django进行开发,遵循Web 2.0规范。
1.4 Jumpserver主要组件
Jumpserver:提供管理后台,管理员可以通过Web页面进行资产管理、用户管理、资产授权等操作
KoKo ∶提供SSH Server 和Web Terminal Server方式登陆资产。
Lina、Luna :提供web前端页面,后续会将整合到lina中
Guacamole :提供RDP功能,用户可通过该方式登陆Windows资产。(暂时只能通过Web Terminal来访问)
1.5 jumpserver 结构图
2.JumpServer安装配置
准备安装包
yum install git -y
git clone https://gitee.com/zheguabaoshu/jumpserver-deployment.git
mv jumpserver-deployment/jumpserver-v2.2-all.zip ./
1.解压zip包 2.进入目录 3.依次解压 并移动压缩包到/opt
[root@jumpserver /opt]# ls /opt
jumpserver koko lina luna
*生成linux秘钥
#命令行输入一下内容:
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
1. 安装 Python3.6 MySQL Redis
[root@jumpserver ~]# yum install python3 python-pip python3-devel mariadb-server mariadb redis -y
[root@jumpserver ~]# systemctl enable mariadb redis
[root@jumpserver ~]# systemctl start mariadb redis
2.设定数据库密码,然后创建对应库
[root@jumpserver ~]# mysqladmin password boy123.com
[root@jumpserver ~]# mysql -uroot -pboy123.com
MariaDB [(none)]> create database jumpserver default charset 'utf8' collate 'utf8_bin';
MariaDB [(none)]>
**
**
3.创建python虚拟环境
[root@jumpserver ~]# python3.6 -m venv /opt/py3
[root@jumpserver ~]# source /opt/py3/bin/activate
(py3) [root@jumpserver ~]#
4.安装jumpserver核心软件包
(py3) [root@jumpserver opt]# tar xf jumpserver-v2.2.2.tar.gz
(py3) [root@jumpserver opt]# mv jumpserver-v2.2.2 jumpserver
5.安装jumpser所依赖的软件包 [ pip 模块 ]
(py3)[root@jumpserver ~]# cd /opt/jumpserver/requirements/
(py3)[root@jumpserver requirements]# yum install -y $(cat rpm_requirements.txt)
(py3)[root@jumpserver requirements]# pip install wheel -i https://mirrors.aliyun.com/pypi/simple/
(py3)[root@jumpserver requirements]# pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
(py3)[root@jumpserver requirements]# pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
注释:
# pip install --upgrade pip 升级一个软件包。
(py3)[root@jumpserver requirements]# pip install -r requirements.txt -i http://pypi.douban.com/simple/ #豆瓣源
(py3) [root@jumpserver ~]# pip install -r requirements.txt -i http://mirrors.oldboyedu.com/ #自建源
6. 修改配置文件
(py3) [root@jumpserver requirements]# cd /opt/jumpserver/
(py3) [root@jumpserver jumpserver]# cp config_example.yml config.yml
(py3) [root@jumpserver jumpserver]# grep "[1]" config.yml
SECRET_KEY: ###############
BOOTSTRAP_TOKEN: ##########
DEBUG: false
LOG_LEVEL: ERROR
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: root
DB_PASSWORD: boy123.com
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
WINDOWS_SKIP_ALL_MANUAL_PASSWORD: True
7.启动jumpserver核心组件
(py3) [root@jumpserver jumpserver]# ./jms start # 查看是否有错误提示
(py3) [root@jumpserver jumpserver]# ./jms start -d # 后台运行
8.部署jumpserver的koko组件
(py3) [root@jumpserver opt]# tar -xf koko-v2.4.3-linux-amd64.tar.gz
(py3) [root@jumpserver opt]# mv koko-v2.4.3- linux-amd64 koko
(py3) [root@jumpserver opt]# chown -R root:root koko
(py3) [root@jumpserver opt]# cd koko
(py3) [root@jumpserver koko]# cp config_example.yml config.yml
(py3) [root@jumpserver koko]# grep "[2]" config.yml
CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: 5NzjZ1guayk5M87u
LOG_LEVEL: ERROR
SHARE_ROOM_TYPE: redis
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
(py3) [root@jumpserver koko]# ./koko -d
#记得检查端口
9.部署前端组件
0.安装nginx:
(py3) [root@jumpserver opt]# yum install nginx -y
1.下载 Lina 组件
(py3) [root@jumpserver opt]# tar xf lina-v2.2.2.tar.gz
(py3) [root@jumpserver opt]# mv lina-v2.2.2 lina
(py3) [root@jumpserver opt]# chown -R nginx.nginx lina
2.下载 Luna 组件
(py3) [root@jumpserver opt]# tar xf luna-v2.2.2.tar.gz
(py3) [root@jumpserver opt]# mv luna-v2.2.2 luna
(py3) [root@jumpserver opt]# chown -R nginx.nginx luna
3.下载Nginx,编写配置,整合
(py3) [root@jumpserver opt]# cat /etc/nginx/conf.d/jumpserver.etiantian.org.conf
server {
listen 80;
client_max_body_size 100m; # 录像及文件上传大小限制
server_name jumpserver.etiantian.org;
location /ui/ {
try_files $uri / /index.html;
alias /opt/lina/;
}
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 /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;
}
}
(py3) [root@jumpserver opt]# systemctl start nginx
(py3) [root@jumpserver opt]# systemctl enable nginx
2.2 Docker安装
3.JumpServer初始化
- 本地host解析
- 域名访问: jumpserver.etiantian.org
- 应用登录: ---> 用户: admin 密码:admin
- 重置密码
*4. JumpServer用户管理
普通用户: 登录Jumpserver的web页面 的用户 , 运维 开发
系统用户: 是 JumpServer 跳转登录资产时使用的用户[ansible 自动推送,不支持交换机]
管理用户: 管理用户是被控服务器上的 root, JumpServer使用该用户来 推送系统用户、获取资产硬件信息等 [先免密]
4.1 创建普通用户
添加用户组
添加用户
说明: 创建后可登录web页面
登录jumpserver的 web / ssh jumpserver-ip 2222端口测试
如果连接不上查看koko进程是否启动
4.2 创建管理用户
jumpserver -----> 被控端主机进行免密登录实现跳板机功能
jumpser服务器 生成秘钥
推送公钥:
[root@jumpserver ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
[root@jumpserver ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
[root@jumpserver ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51
测试: [root@m01 ~]# ssh root@172.16.1.7 'ip a'
创建管理用户
下载私钥: [root@m01 ~]# sz ~/.ssh/id_rsa
---> 上传root用户私钥到页面
4.3 创建系统用户
验证: (完成 *5jumpserver网域管理)可以看到zhuzhu就是登录资产的用户。
*5. jumpserver网域管理
*5.1 添加资产
依次添加web01,web02,db51资产
如机器太多,可以先导出一个模板。表格批量处理后导入
5.2 资产授权
运维授权
开发授权
权限测试
- 虚拟机注意jumpserver服务器的时间是否一致
[root@m01 ~]# yum install ntpdate -y
[root@m01 ~]# ntpdate ntp1.aliyun.com #所有主机需同步时间
- web登录oldhou
略
5JumpServer资产管理
管理MySQL数据库应用
5.1 通过进入命令行进入数据库
通过命令行登录mysql,登录没有规则限制。
5.2 通过jumpserver数据库管理模块管理
添加mysql存在的用户all(入口: 系统用户按钮添加)
添加授权规则
添加数据库授权
效果展示
6.Jumpserver网域管理
参考链接
6.1什么是混合云?
混合云融合了公有云和私有云,是近年来云计算的主要模式和发展方向。我们已经知道私有云主要是面向企业用户,出于安全考虑,企业更愿意将数据存放在私有云中,但是同时又希望可以获得公有云的计算资源,在这种情况下混合云被越来越多的采用,它将公有云和私有云进行混合和匹配,以获得最佳的效果,这种个性化的解决方案,达到了既省钱又安全的目的
6.2混合云生产环境部署JumpServer网域功能实现思路
1.jumpserver与网域网管服务器进行免密
2.网域网关服务器与云主机进行免密
3.填写一个网域,然后添加网管服务器
3.1填写公网IP。
3.2登陆网域服务器使用的是管理云主机的管理用户root,需要使用jumpserver的私钥验证。
4.新添加一个管理用户,用来管理云主机 配置的是网域服务器的私钥验证
5.分配整合云主机资产
6.3 混合云生产环境部署JumpServer网域功能实践操作步骤
1. 买三台没有公网的阿里云云主机
2. 购买一个公网弹性ip
3 公网ip绑定一台云主机(ecs)上作为我们的网域服务
三台云主机都在同一网段我们公网ip绑定一台作为网域服务器,用拥有公网ip的云主机充当网域服务器连接其他两台云主机
**
**
4 使jumpserver与网域服务器建立免密连接
把jumpserver的公钥推送给网域服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@39.98.161.147(公网ip)
5 登陆网域服务器与两台云主机建立免密关系
1> 生产密钥对
ssh-keygen
2> 推送网域服务器公钥给两台云主机
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.238(云主机内网IP)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.237(云主机内网IP)
3> 测试网域服务是否能够免密登陆两台云主机
6 创建网域列表,进行网关配置
(配置的是jumpserver到网域服务器之间的连接)
1> 创建网域列表 阿里云-张家口节点
2> 进行网关配置
我们jumpserver到网域服务器之间进行免密我们推送了在jumpserver生产的一对密钥对的公钥给网域服务器所以这里连接网域服务器使用的是jumpserver的私钥,来进行非对称性认证。
7 添加一个管理云主机资产的管理用户root
Ps :
我们的管理用户root管理云主机资产,通过网域服务器连接到公有云内部云主机中我们网域服务器到云主机之间进行免密我们推送了网域服务器生产的一对密钥对的公钥给网域服务器所以这里填写的密钥是网域服务器生产的私钥,来进行非对称性认证。
1> 获得网域服务器的私钥,我们把它下载到本地
yum -y install lrzsz
sz ~/.ssh/id_rsa
12
2> 添加配置管理云主机的管理用户root
8 添加云主机资产
1> 创建阿里云节点的资产树
2> 在阿里云下添加两台云主机节点资产
aly01
aly02
9 把云主机资产授权给用户组(运维组)
10 测试
1> 我们使用隶属于运维组的oldgirl进行jumpserver页面登陆
2> web终端访问阿里云主机,可以访问成功
7Jumpserver会话管理
1.会话管理(点击会话管理->历史会话->可以回放视频)
2.web终端(可以通过umpserver自带的web管理后端主机)
3.文件管理(可以用来为内部主机上传文件、)
4.命令过滤(资产管理->命令过滤) 如何禁止rm操作??
8.Jumpserver安全提升
1、安全升级
操作系统∶尽量升级到符合要求的新版本。
Jumpserver:请保持使用最新版本的Jumpserver依赖软件∶建议升级
Jumpserver依赖的软件版本
2、使用安全组件
使用系统防火墙Firewall
关闭密码登陆
建议: 用户---> vpn ---> 内网
3、优化系统架构
传统架构︰用户-->Jumpserver-->目标资产
新型架构︰用户-->防火墙(规则限制)-->Jumpserver-->目标资产4、配置HTTPS方式
8.1 添加多因子认证
1.将创建的普通用户创建勾选多因子认证方式登录
2.登录测试
app内输入动态码