Jumpserver开源堡垒机
1 JumpServer基本概述
1.1 什么是跳板机
跳板机就是一台服务器,具备公网和内网,我们的开发人员或者运维人员,要想维护内部集群服务时,需要先统一登陆到跳板机这台服务器,然后在通过跳板机的内网登陆目标集群服务器
1.2 跳板机的缺陷
没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中还是会出现误操作,违规i操作导致故障,一旦出现操作事故很难快速定位到原因和责任人;此时堡垒机就诞生了。
1.3 什么是堡垒机
堡垒机其实是基于跳板机基础之上,能够实现运维更加安全的操作目标集群服务器,提供安全保证。
- 1 资产集中管理(统一管理)
- 2 审计,记录,视频回放操作记录
- 3 限制如rm,dd等危险命令的执行
- 4 限制登陆目标服务器的身份权限
1.4 为什么要使用堡垒机
首先,堡垒机提供了运维安全审计的4A规范:
Authentication:身份鉴别,防止身份冒用和复用
Authorization :授权控制,防止内部误操作和权限滥用
Accouting:账号管理,人员和资产的管理
Auditing:安全审计,追溯和分析事故的依据
其次,堡垒机的建设目标可以概况为5W,主要是为了减低运维风险。
what 审计:你做了什么?
which 授权:你能做哪些?
where 账号:你要去那?
who 认证 你是谁?
when 来源:访问时间?
总结
堡垒机能让运维更安全,更加便捷的登陆目标资产服务
堡垒机还可以帮助企业快速构建“身份鉴别,访问控制,安全审计”,助力企业满足新等保要求。什么是等保?
所有企业都需要使用堡垒机。因为堡垒机是企业进行“资产管理,运维安全审计”的重要组件。
1.5 什么是Jumpserver
JumpServer 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。
JumpServer 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好。
JumpServer 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制。
JumpServer 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。
** Jumpserver主要组件 **
Jumpserver:提供管理后台,管理员可以通过web页面进行资产管理,用户管理和资产授权等操作。
koko:提供SSH server和web Termianal server方式登陆资产
Lina Luna:提供web前端页面,后续会将整合到Lina中
Guacamole:提供RDP功能,用户可通过该方式登陆windows资产。(暂时只能通过 web Terminal来访问)
** Jumpserver特色优势 **
开源: 零门槛,线上快速获取和安装;
分布式: 轻松支持大规模并发访问;
无插件: 仅需浏览器,极致的 Web Terminal 使用体验;
多云支持: 一套系统,同时管理不同云上面的资产;
云端存储: 审计录像云端存储,永不丢失;
多租户: 一套系统,多个子公司和部门同时使用。
** Jumpserver基础架构图 **
Jumpserver作用
1 产品解耦程度高,便于后期分布式部署与横向扩展
2 集中统一管理全国各地服务器
2.JumpServer安装配置
2.1 核心组件部署jumpserver
硬件配置:2个CPU核心,4G内存,50G硬盘(最低标准)
操作系统:Linux发行版 x86_64
Python = 3.6x
MySQL Server >= 5.6
Mariadb Server >= 5.5.56
Redis
** ①安装 Python3.6 MySQL Redis **
[root@jumpserver ~]# yum install -y python3 python3-devel
[root@jumpserver ~]# yum install -y mysql mysql-server
[root@jumoserver ~]# yum install -y redis
[root@jumoserver ~]# systemctl enable mysqld redis
[root@jumoserver ~]# systemctl start mysqld redis
** ②设定数据库密码,然后创建对应的jumpserver库 **
[root@jumoserver ~]# cat /var/log/mysql.log | grep password
[root@jumoserver ~]# mysql -uroot -p
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=4; #取消密码复杂度
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
mysql> create database jumpserver default charset 'utf8' collate 'utf8_bin';
mysql> \q
** ③创建 Python 虚拟环境,并且载入 Python 虚拟环境 **
[root@jumoserver ~]# python3.6 -m venv /opt/py3
[root@jumpserver ~]# source /opt/py3/bin/activate
(py3) [root@jumpserver ~]#
** ④安装jumpserver核心软件包 **
官方下载地址:https://github.com/jumpserver
wget https://github.com/jumpserver/jumpserver/releases/download/v2.9.2/jumpserver-v2.9.2.tar.gz
上传jumpserver软件包到服务器/opt目录下
(py3) [root@jumpserver ~]# cd /opt
(py3) [root@jumpserver opt]# ls
jumpserver-2.9.2.zip
(py3) [root@jumpserver opt]# unzip jumpserver-2.9.2.zip
(py3) [root@jumpserver opt]# mv jumpserver-v2.9.2 jumpserver
** ⑤安装jumpser编译环境依赖 **
(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/
** ⑥修改配置文件 **
(py3) [root@jumpserver ~]# cd /opt/jumpserver
(py3) [root@jumpserver jumpserver]# cp config_example.yml config.yml
(py3) [root@jumpserver jumpserver]# vi config.yml
** ⑦在配置文件中需要填写随即加密密钥(SECRET_KEY: 与BOOTSTRAP_TOKEN:),我们用命令生成 **
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
查看生成的随机加密密钥
(py3) [root@jumpserver ~]# cat ~/.bashrc
!!参考官方模板(记得修改配置文件的每行要顶头)
# SECURITY WARNING: keep the secret key used in production secret!
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
SECRET_KEY: sa1SzAAij0xGm6q35bWpiG5dwV966cryK2Ui2oeuHGQiYfJQkF
# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
BOOTSTRAP_TOKEN: SAkuJ9ICSTGey5p8
# Development env open this, when error occur display the full process track, Production disable it
# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
DEBUG: false
# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/
# 日志级别
LOG_LEVEL: ERROR
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# 浏览器Session过期时间,默认24小时, 也可以设置浏览器关闭则过期
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
# Database setting, Support sqlite3, mysql, postgres ....
# 数据库设置
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# SQLite setting:
# 使用单文件sqlite数据库
# DB_ENGINE: sqlite3
# DB_NAME:
# MySQL or postgres setting like:
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: root #这里用的数据库用户是数据库默认root用户
DB_PASSWORD: boy123.com #我们给root用户设置的密码
DB_NAME: jumpserver
# When Django start it will bind this host and port
# ./manage.py runserver 127.0.0.1:8080
# 运行时绑定端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4
# Use OpenID authorization
# 使用OpenID 来进行认证设置
# BASE_SITE_URL: http://localhost:8080
# AUTH_OPENID: false # True or False
# AUTH_OPENID_SERVER_URL: https://openid-auth-server.com/
# AUTH_OPENID_REALM_NAME: realm-name
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret
# AUTH_OPENID_IGNORE_SSL_VERIFICATION: True
# AUTH_OPENID_SHARE_SESSION: True
# Use Radius authorization
# 使用Radius来认证
# AUTH_RADIUS: false
# RADIUS_SERVER: localhost
# RADIUS_PORT: 1812
# RADIUS_SECRET:
# CAS 配置
# AUTH_CAS': False,
# CAS_SERVER_URL': "http://host/cas/",
# CAS_ROOT_PROXIED_AS': 'http://jumpserver-host:port',
# CAS_LOGOUT_COMPLETELY': True,
# CAS_VERSION': 3,
# LDAP/AD settings
# LDAP 搜索分页数量
# AUTH_LDAP_SEARCH_PAGED_SIZE: 1000
#
# 定时同步用户
# 启用 / 禁用
# AUTH_LDAP_SYNC_IS_PERIODIC: True
# 同步间隔 (单位: 时) (优先)
# AUTH_LDAP_SYNC_INTERVAL: 12
# Crontab 表达式
# AUTH_LDAP_SYNC_CRONTAB: * 6 * * *
#
# LDAP 用户登录时仅允许在用户列表中的用户执行 LDAP Server 认证
# AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS: False
#
# LDAP 认证时如果日志中出现以下信息将参数设置为 0 (详情参见:https://www.python-ldap.org/en/latest/faq.html)
# In order to perform this operation a successful bind must be completed on the connection
# AUTH_LDAP_OPTIONS_OPT_REFERRALS: -1
# OTP settings
# OTP/MFA 配置
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
# Perm show single asset to ungrouped node
# 是否把未授权节点资产放入到 未分组 节点中
# PERM_SINGLE_ASSET_TO_UNGROUP_NODE: false
#
# 启用定时任务
# PERIOD_TASK_ENABLE: True
#
# 启用二次复合认证配置
# LOGIN_CONFIRM_ENABLE: False
#
# Windows 登录跳过手动输入密码
我们需要修改的几个地方被红框框起来
** ⑧ 启动jumpserver核心组件 **
首先要确保已经加载p3虚拟环境
[root@jumpserver ~]# source /opt/py3/bin/activate
其次前台运行查看,检查是否报错
[root@jumpserver ~]# cd /opt/jumpserver
[root@jumpserver jumpserver]#./jms start
最后没有报错,运行在后台
[root@jumpserver jumpserver]#./jms start -d
2.2 核心组件部署koko
官方下载地址:https://github.com/jumpserver
wget https://github.com/jumpserver/koko/releases/download/v2.9.2/koko-v2.9.2-linux-amd64.tar.gz
** ①上传koko软件包到服务器/opt目录下 **
(py3) [root@jumpserver ~]# cd /opt
(py3) [root@jumpserver opt]# tar -xf koko-v2.9.2-linux-amd64.tar.gz #压缩包解压
(py3) [root@jumpserver opt]# mv koko-v2.9.2-linux-amd64 koko #更改名字
(py3) [root@jumpserver opt]# chown -R root:root koko #为koko目录授权
(py3) [root@jumpserver opt]# cd koko #切换到koko目录下
(py3) [root@jumpserver koko]# cp config_example.yml config.yml #复制实列配置文件进行重命名
** ②修改koko组件的配置文件 **
(py3) [root@jumpserver koko]# vi config.yml
参考官方模板(记得修改配置文件的每行要顶头)
# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME: {{ Hostname }}
# Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080
# Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: zxffNymGjP79j6BN
# 启动时绑定的ip, 默认 0.0.0.0
# BIND_HOST: 0.0.0.0
# 监听的SSH端口号, 默认2222
# SSHD_PORT: 2222
# 监听的HTTP/WS端口号,默认5000
# HTTPD_PORT: 5000
# 项目使用的ACCESS KEY, 默认会注册,并保存到 ACCESS_KEY_STORE中,
# 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret
# ACCESS_KEY: null
# ACCESS KEY 保存的地址, 默认注册后会保存到该文件中
# ACCESS_KEY_FILE: data/keys/.access_key
# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
LOG_LEVEL: ERROR
# SSH连接超时时间 (default 15 seconds)
# SSH_TIMEOUT: 15
# 语言 [en,zh]
# LANG: zh
# SFTP的根目录, 可选 /tmp, Home其他自定义目录
# SFTP_ROOT: /tmp
# SFTP是否显示隐藏文件
# SFTP_SHOW_HIDDEN_FILE: false
# 是否复用和用户后端资产已建立的连接(用户不会复用其他用户的连接)
# REUSE_CONNECTION: true
# 资产加载策略, 可根据资产规模自行调整. 默认异步加载资产, 异步搜索分页; 如果为all, 则资产全部加载, 本地搜索分页.
# ASSET_LOAD_POLICY:
# zip压缩的最大额度 (单位: M)
# ZIP_MAX_SIZE: 1024M
# zip压缩存放的临时目录 /tmp
# ZIP_TMP_PATH: /tmp
# 向 SSH Client 连接发送心跳的时间间隔 (单位: 秒),默认为30, 0则表示不发送
# CLIENT_ALIVE_INTERVAL: 30
# 向资产发送心跳包的重试次数,默认为3
# RETRY_ALIVE_COUNT_MAX: 3
# 会话共享使用的类型 [local, redis], 默认local
SHARE_ROOM_TYPE: redis
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
#REDIS_PASSWORD:
#REDIS_CLUSTERS:
#REDIS_DB_ROOM: 6
我们需要修改的几个地方被红框框起来
启动核心组件koko
首先启动,检查是否有报错
(py3) [root@jumpserver koko]# ./koko
其次把koko组件放入后台运行
(py3) [root@jumpserver koko]# ./koko -d
最后检查端口是否启动会有一5000 和2222两个端口
(py3) [root@jumpserver koko]# netstat -lntup
2.3 前端组件部署lina,luna
上传lina,luna软件包到服务器/opt目录下
官方下载地址:https://github.com/jumpserver
luna软件包 wget https://github.com/jumpserver/luna/releases/download/v2.9.2/luna-v2.9.2.tar.gz
lina软件包 wget https://github.com/jumpserver/lina/releases/download/v2.9.2/lina-v2.9.2.tar.gz
** ① 配置 Nginx 整合各组件 **
(py3) [root@jumpserver opt]# yum install nginx -y
(要在上传luna lina组件之前 因为它们两个目录授权需要nginx用户)
** ② 下载 Lina 组件(/opt 下) **
(py3) [root@jumpserver opt]# tar zxvf lina-v2.9.2.tar.gz
(py3) [root@jumpserver opt]# mv lina-v2.9.2 lina
(py3) [root@jumpserver opt]# chown -R nginx.nginx lina
** ③ 下载 Luna 组件(/opt 下) **
(py3) [root@jumpserver opt]# tar zxvf luna-v2.9.2.tar.gz
(py3) [root@jumpserver opt]# mv luna-v2.9.2 luna
(py3) [root@jumpserver opt]# chown -R nginx.nginx luna
** 修改nginx配置,参考官方模板**
(py3) [root@jumpserver opt]# vim /etc/nginx/conf.d/jumpserver.etiantian.org.conf
server {
listen 80;
client_max_body_size 100m; # 录像及文件上传大小限制
server_name 121.36.53.182;
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.4 配置本地dns劫持,登陆JumpServer进行管理
修改本地hosts文件进行解析,或使用DNS域名进行解析
登录jumpserver页面,默认用户名密码都是admin
密码太简单需要重新修改登陆admin用户密码
最后登陆到管理界面
3.JumpServer用户管理
普通用户: 登录Jumpserver的web页面 的用户 , 运维 开发
系统用户: 是 JumpServer 跳转登录资产时使用的用户[ansible 自动推送,不支持交换机]
管理用户: 管理用户是被控服务器上的 root, JumpServer使用该用户来 推送系统用户、获取资产硬件信息等 [先免密]
3.1 创建普通用户
** ①添加用户组 **
创建一个开发组和运维组
** ②添加用户 **
创建一个oldboy和一个oldgirl普通用户
** ③ 创建的普通用户使用测试 **
普通用户就是登陆网页jumpserver的登陆用户,所以我们重新登陆发现和用管理员登陆界面是有区别的。
我们用创建的普通用户oldboy登陆一下
发现左边的项目栏是有区别的,第一次登陆需要填写个人信息,然后选择我同意,就可以使用了。
普通用户管理资产两种页面
1.web页面
2.终端页面
ssh oldboy@121.36.53.182 2222
3.2 创建管理用户
** ① jumpserver ------> 被控端主机进行免密登录实现跳板机功能 **
(py3)[root@zyixin ~]# ssh-keygen
会生成一对密钥对,一个公钥(id_rsa.pub)一个私钥(id_rsa)
推送公钥到被控制端,实现免密登陆
(py3)[root@zyixin ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
(py3)[root@zyixin ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
(py3)[root@zyixin ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51
** ②创建管理用户 **
下载私钥: [root@jumpserver ~]# sz ~/.ssh/id_rsa —> 上传root用户私钥到页面
创建系统用户
对系统用户进行提权
4.JumpServer资产管理
4.1 规划资产树
根据公司需求进行划分
我们可以根据地域,区域,部门,进行划分
我们根据地域划分出上海机房,北京机房
我们根据区域在北京机房中划分昌平机房,海淀机房
我们还可以根据部门在海淀机房划分运维,开发等部门
4.2 添加资产
加入资产web01
加入资产web02
加入资产db01
4.3 授权资产
我们对用户组进行资产的授权
我们运维组授权可以管理北京机房和上海机房的资产(172.16.1.7/8/51)
我们开发组授权可以管理上海机房的资产(172.16.1.51
我们运维组授权可以管理北京机房和上海机房的资产(172.16.1.7/8/51)
我们开发组授权可以管理上海机房的资产(172.16.1.51)
4.4 验证阶段
我们用普通用户oldgirl登陆jumpserver页面,oldgril隶属于运维组,所以可以对运维组授权的资产进行管理(3台节点)
我们可以选择web终端进行对每台节点的管理(免密登陆)
我们用普通用户oldboyl登陆jumpserver页面,oldboy隶属于开发组,所以可以对开发组授权的资产进行管理(1台节点)
4.5 新创建一个权限比cry高的系统用户
** ① 其实就是再创建一个系统用户kenneth **
** ② 对新创建的kenneth系统用户进行资产授权 **
** ③ 进行手动的推送系统用户信息到资产中(底层用ansible推送)**
** 当我再去登陆资产时就会出现选择用那一个系统用户登录 **
4.6 加入数据库资产
** ①我们先创建一个dba组和dba普通用户隶属与dba组 **
密码123456
** ② 创建数据库应用 **
** ③ 创建一个登陆数据库的系统用户(走的是mysql协议) **
** ④ 对数据库进行资产授权 **
** ⑤ 登陆数据库资产(通过我们创建的dba普通用户) **
** ⑥ 我们在对资产进行的任何操作都会记录下来,可以回放视频,可以中止,可以在线监控 **
5.Jumpserver命令过滤器(限制危险命令的执行 )
我们现在假设不让使用rm命令,怎么操作呢?
5.1 创建一个命令过滤器名称
5.2 添加命令过滤器不允许的操作
5.3 绑定系统用户进行限制操作
测试操作,通过cry系统用户登录资产后能否使用rm命令
6.普通用户的文件管理(上传和下载)
6.1 上传文件操作过程
** ①我使用系统用户cry登陆到资产,选中默认进行上传文件 **
** ②发现上传的文件,在/tmp下 ,而且这个文件的所属主和所属组都是我们上传者cry **
6.2 下载文件操作过程
** ①我在/tmp下面创建一个名称为2.txt的文件 **
** ②我们在web页面终端可以进行对文件下载 **
6.3 为什么默认上传下载的目录是/tmp?
是因为我们的koko组件的配置文件中这样规定的,如下图所示
7.jumpserverd多因子认证(加强登陆安全性)
在用户名密码登陆的方式上再进行一次认证,来达到登陆安全性的提高
启用多因子认证两种方式
一.在创建普通用户时选中多因子认证强制启动
① 创建普通用户也就是登陆Jumpserver页面的用户
②登陆测试
我们进入登陆界面,登陆我们刚创建出来的scry普通用户,这里的密码是创建用户设置的密码 test123
接下来因为我们开启多因子认证,所以开始开启多因子认证进行初始化的操作 输入我们普通用户登陆密码test123
然后会发生跳转,会让你使用第三方手机端的一个认证app,从而生成动态密码
使用手机下载该软件
我们用手机这个软件扫描下面的二维码就会生成动态的验证码
完成初始化设置后我们通过输入手机上的动态认证码和用户密码才可以登陆进去
二.全局启动多因子认证
8 混合云生产环境引入JumpServer网域功能概念
8.1 什么是混合云?
混合云融合了公有云和私有云,是近年来云计算的主要模式和发展方向。我们已经知道私有云主要是面向企业用户,出于安全考虑,企业更愿意将数据存放在私有云中,但是同时又希望可以获得公有云的计算资源,在这种情况下混合云被越来越多的采用,它将公有云和私有云进行混合和匹配,以获得最佳的效果,这种个性化的解决方案,达到了既省钱又安全的目的。
8.2 混合云生产环境部署JumpServer网域功能原理图
8.3 混合云生产环境部署JumpServer网域功能实现思路
1.jumpserver与网域网管服务器进行免密
2.网域网关服务器与云主机进行免密
3.填写一个网域,然后添加网管服务器
3.1填写公网IP。
3.2登陆网域服务器使用的是管理云主机的管理用户root,需要使用jumpserver的私钥验证。
4.新添加一个管理用户,用来管理云主机 配置的是网域服务器的私钥验证
5.分配整合云主机资产
8.4 混合云生产环境部署JumpServer网域功能实践操作步骤
① 买三台没有公网的阿里云云主机
② 购买一个公网弹性ip
③ 公网ip绑定一台云主机(ecs)上作为我们的网域服务器
三台云主机都在同一网段我们公网ip绑定一台作为网域服务器,用拥有公网ip的云主机充当网域服务器连接其他两台云主机
④ 使jumpserver与网域服务器建立免密连接
把jumpserver的公钥推送给网域服务器
[jumpserver@root ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@39.98.161.147(公网ip)
⑤ 登陆网域服务器与两台云主机建立免密关系
1> 生产密钥对
[jumpserver@root ~]# ssh-keygen
2> 推送网域服务器公钥给两台云主机
[jumpserver@root ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.238(云主机内网IP)
[jumpserver@root ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.237(云主机内网IP)
3> 测试网域服务是否能够免密登陆两台云主机
⑥ 创建网域列表,进行网关配置(配置的是jumpserver到网域服务器之间的连接
1> 创建网域列表 阿里云-张家口节点
2> 进行网关配置
我们jumpserver到网域服务器之间进行免密
我们推送了在jumpserver生产的一对密钥对的公钥给网域服务器
所以这里连接网域服务器使用的是jumpserver的私钥,来进行非对称性认证。
⑦ 添加一个管理云主机资产的管理用户root
我们的管理用户root管理云主机资产,通过网域服务器连接到公有云内部云主机中
我们网域服务器到云主机之间进行免密
我们推送了网域服务器生产的一对密钥对的公钥给网域服务器
所以这里填写的密钥是网域服务器生产的私钥,来进行非对称性认证。
1> 获得网域服务器的私钥,我们把它下载到本地
[jumpserver@root ~]# yum -y install lrzsz
[jumpserver@root ~]# sz ~/.ssh/id_rsa
2> 添加配置管理云主机的管理用户root
⑧ 添加云主机资产
1> 创建阿里云节点的资产树
2> 在阿里云下添加两台云主机节点资产
aly01
aly02
⑨ 把云主机资产授权给用户组(运维组)
⑩ 测试
1> 我们使用隶属于运维组的oldgirl进行jumpserver页面登陆
2> web终端访问阿里云主机,可以访问成功
9.Jumpserver安全提升
9.1安全升级
操作系统∶尽量升级到符合要求的新版本。
Jumpserver:请保持使用最新版本的Jumpserver依赖软件∶建议升级
Jumpserver依赖的软件版本
9.2 使用安全组件
使用系统防火墙Firewall:端口转发
关闭密码登陆 建议: 用户—> vpn —> 内网
9.3优化系统架构
传统架构︰用户–>Jumpserver–>目标资产
新型架构︰用户–>防火墙(规则限制)–>Jumpserver–>目标资产
9.4 配置HTTPS方式
我们建议你申请一个SSL证书,之后部署好 ssl 证书,关闭掉HTTP的访问方式。
让所有人通过 HTTPS 协议来访问 JumpServer。
9.5 开启MFA
为了最大限度避免因 JumpServer 用户密码泄露产生的安全隐患。
我们建议JumpServer 的管理员开启MFA功能,这样所有人在登录系统时候都需要2次认证,可以极大的提升系统安全。
评论区