1. 跳板机(堡垒机)
1. 什么是跳板机
统一设备运维入口,支持管理Linux、Windows、Unix、MacOS等设备资源,实现对服务器资源操作管理的集中认证,集中控制,集中审计。提升运维管理水平。
2. 为什么要用跳板机
现在一定规模互联网企业,往往都拥有大量服务器,如何安全并高效的管理这些服务器是每个系统运维或安全运维人员必要工作。现在比较常见的方案是搭建堡垒机环境作为线上服务器的入口,所有服务器只能通过堡垒机进行登陆访问。
说句大白话:就是监控运维人员、开发人员对服务器的命令操作。出了事故能找到具体责任人。
3. 跳板机的特性
精细化的资源与功能授权,让运维人员各司其职。
体系化的指令审计规则,让运维操作安全可控。
支持多重身份认证,让非法访问无所遁形。
主机账号统一管理,SSH密钥对一键批量下发。
2.Jumpserver介绍
1. 基本介绍
是全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合4A的专业运维审计系统。使用Python/Django进行开发,遵循 Web2.0规范,配备了业界领先的Web Terminal 解决方案,交互界面美观、用户体验好。采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发访问限制。
Jumpserver官网:https://jumpserver.org/
2. 核心特性
身份认证 Authentication
支持 LDAP / AD,支持 OpenID,支持 MFA 等
账号管理 Account
支持账号集中管理、密码统一管理、资产用户收集等
授权控制 Authorization
支持资产授权、应用授权、动作授权、时间授权、特权授权等
安全审计 Audit
支持操作审计、会话审计、录像审计、指令审计和文件传输审计等
3. 组件介绍
JumpServer 为管理后台, 管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作, 用户可以通过 Web 页面进行资产登录, 文件管理等操作
koko 为 SSH Server 和 Web Terminal Server 。用户可以使用自己的账户通过 SSH 或者 Web Terminal 访问 SSH 协议和 Telnet 协议资产
Luna 为 Web Terminal Server 前端页面, 用户使用 Web Terminal 方式登录所需要的组件
Guacamole 为 RDP 协议和 VNC 协议资产组件, 用户可以通过 Web Terminal 来连接 RDP 协议和 VNC 协议资产 (暂时只能通过 Web Terminal 来访问)
4. 端口说明
JumpServer 默认 Web 端口为 8080/tcp, 默认 WS 端口为 8070/tcp, 配置文件 jumpserver/config.yml
koko 默认 SSH 端口为 2222/tcp, 默认 Web Terminal 端口为 5000/tcp 配置文件在 koko/config.yml
Guacamole 默认端口为 8081/tcp, 配置文件 /config/tomcat9/conf/server.xml
Nginx 默认端口为 80/tcp
Redis 默认端口为 6379/tcp
Mysql 默认端口为 3306/tcp
3. 安装Jumpserver
1. 环境说明
JumpServer 环境要求:
硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低)
操作系统: Linux 发行版 x86_64
Python = 3.6.x
Mysql Server ≥ 5.6
Mariadb Server ≥ 5.5.56
Redis
#安装文档
https://jumpserver.readthedocs.io/zh/master/setup_by_centos7.html
#环境准备
#系统版本
[root@jumpserver ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
#内核版本
[root@jumpserver ~]# uname -r
3.10.0-957.el7.x86_64
#IP地址
[root@jumpserver ~]# hostname -I
10.0.0.11 172.16.1.62
#防火墙
[root@jumpserver ~]# iptables-save
#SElinux
[root@jumpserver ~]# getenforce
Disabled
#同步时间
[root@jumpserver ~]# yum install -y ntpdate && ntpdate ntp1.aliyun.com
[root@jumpserver ~]# echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com & >/dev/null" >>/var/spool/cron/root
[root@jumpserver ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com & >/dev/null
2. 安装部署
# 安装依赖包
[root@jumpserver ~]# yum -y install wget gcc epel-release git
# 安装 Redis, JumpServer 使用 Redis 做 cache 和 celery broke
[root@jumpserver ~]# yum -y install redis
[root@jumpserver ~]# systemctl enable redis && systemctl start redis
# 安装 MySQL, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置, 支持sqlite3, mysql, postgres等
[root@jumpserver ~]# yum -y install mariadb mariadb-devel mariadb-server MariaDB-shared
[root@jumpserver ~]# systemctl enable mariadb && systemctl start mariadb
# 创建数据库 JumpServer 并授权
[root@jumpserver ~]# mysqladmin password '123'
[root@jumpserver ~]# mysql -uroot -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
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';
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '123';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> Bye
# 安装 Nginx, 用作代理服务器整合 JumpServer 与各个组件
[root@jumpserver ~]# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@jumpserver ~]# yum -y install nginx
[root@jumpserver ~]# systemctl start nginx && systemctl enable nginx
# 安装 Python3.6
[root@jumpserver ~]# yum -y install python36 python36-devel
# 配置并载入 Python3 虚拟环境
[root@jumpserver ~]# cd /opt && python3.6 -m venv py3 #py3 为虚拟环境名称, 可自定义
[root@jumpserver /opt]# source /opt/py3/bin/activate #退出虚拟环境可以使用 deactivate 命令
# 看到下面的提示符代表成功, 以后运行 JumpServer 都要先运行以上 source 命令, 载入环境后默认以下所有命令均在该虚拟环境中运行
(py3) [root@jumpserver /opt]#
# 下载 JumpServer
(py3) [root@jumpserver /opt]# cd /opt/
(py3) [root@jumpserver /opt]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
# 安装依赖 RPM 包
(py3) [root@jumpserver /opt]# yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)
# 安装 Python 库依赖 (-i https://pypi.tuna.tsinghua.edu.cn/simple/ ##加速下载)
(py3) [root@jumpserver /opt]# pip install wheel
(py3) [root@jumpserver /opt]# pip install --upgrade pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple/
(py3) [root@jumpserver /opt]# pip install -r /opt/jumpserver/requirements/requirements.txt
# 修改 JumpServer 配置文件
(py3) [root@jumpserver /opt/jumpserver]#
(py3) [root@jumpserver /opt/jumpserver]# cp config_example.yml config.yml
# 生成随机SECRET_KEY
(py3) [root@jumpserver /opt/jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
(py3) [root@jumpserver /opt/jumpserver]# echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
# 生成随机BOOTSTRAP_TOKEN
(py3) [root@jumpserver /opt/jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
(py3) [root@jumpserver /opt/jumpserver]# echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
(py3) [root@jumpserver /opt/jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver /opt/jumpserver]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
#修改其他配置
(py3) [root@jumpserver /opt/jumpserver]# sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver /opt/jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver /opt/jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver /opt/jumpserver]# sed -i "s/DB_PASSWORD: /DB_PASSWORD: 123/g" /opt/jumpserver/config.yml
# 运行 JumpServer
(py3) [root@jumpserver /opt/jumpserver]# cd /opt/jumpserver
(py3) [root@jumpserver /opt/jumpserver]# ./jms start -d #后台运行使用 -d 参数./jms start -d
# 新版本更新了运行脚本, 使用方式./jms start|stop|status all 后台运行请添加 -d 参数
(py3) [root@jumpserver /opt/jumpserver]# wget -O /usr/lib/systemd/system/jms.service https://demo.jumpserver.org/download/shell/centos/jms.service
(py3) [root@jumpserver /opt/jumpserver]# chmod 755 /usr/lib/systemd/system/jms.service
(py3) [root@jumpserver /opt/jumpserver]# systemctl enable jms # 配置自启
# 安装 docker 部署 koko 与 guacamole
(py3) [root@jumpserver /opt/jumpserver]# yum install -y yum-utils device-mapper-persistent-data lvm2
(py3) [root@jumpserver /opt/jumpserver]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
(py3) [root@jumpserver /opt/jumpserver]# yum makecache fast
# 导入秘钥
(py3) [root@jumpserver /opt/jumpserver]# rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
(py3) [root@jumpserver /opt/jumpserver]# yum -y install docker-ce
(py3) [root@jumpserver /opt/jumpserver]# systemctl enable docker
(py3) [root@jumpserver /opt/jumpserver]# mkdir /etc/docker
(py3) [root@jumpserver /opt/jumpserver]# wget -O /etc/docker/daemon.json http://demo.jumpserver.org/download/docker/daemon.json
(py3) [root@jumpserver /opt/jumpserver]# systemctl restart docker
# 允许
容器ip 访问宿主 8080 端口, (容器的 ip 可以进入容器查看) 防火墙关闭无需去做
(py3) [root@jumpserver /opt/jumpserver]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.1.0/16" port protocol="tcp" port="8080" accept"
(py3) [root@jumpserver /opt/jumpserver]# firewall-cmd --reload
# 172.16.1.x 是docker容器默认的IP池, 这里偷懒直接授权ip段了, 可以根据实际情况单独授权IP
# http://<Jumpserver_url> 指向 jumpserver 的服务端口, 如 http://10.0.0.11:8080
# BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN
(py3) [root@jumpserver /opt/jumpserver]# docker run --name jms_kokoo -d -p 2222:2222 -p 127.0.0.1:5000:5000 -e CORE_HOST=http://10.0.0.11:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN -e LOG_LEVEL=ERROR --restart=always jumpserver/jms_koko:1.5.7
(py3) [root@jumpserver /opt/jumpserver]# docker run --name jms_guacamole -d -p 127.0.0.1:8081:8080 -e JUMPSERVER_SERVER=http://10.0.0.11:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN -e GUACAMOLE_LOG_LEVEL=ERROR --restart=always jumpserver/jms_guacamole:1.5.7
(py3) [root@jumpserver /opt/jumpserver]# cd /opt
(py3) [root@jumpserver /opt]# wget https://github.com/jumpserver/luna/releases/download/1.5.7/luna.tar.gz
# 如果网络有问题导致下载无法完成可以使用下面地址
(py3) [root@jumpserver /opt]# wget https://demo.jumpserver.org/download/luna/1.5.7/luna.tar.gz
(py3) [root@jumpserver /opt]# tar xf luna.tar.gz
(py3) [root@jumpserver /opt]# chown -R root:root luna
# 配置 Nginx 整合各组件
(py3) [root@jumpserver /opt]# rm -rf /etc/nginx/conf.d/default.conf
(py3) [root@jumpserver /opt]# vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
server_name qls.jumpserver.com;
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 /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_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
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 / {
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;
access_log off;
}
}
# 运行 Nginx
(py3) [root@jumpserver /opt]# nginx -t # 确保配置没有问题, 有问题请先解决
(py3) [root@jumpserver /opt]# systemctl start nginx
# 访问 http://10.0.0.11 (注意
没有 :8080 通过 nginx 代理端口进行访问)
# 默认账号: admin 密码: admin 到会话管理-终端管理
接受 koko Guacamole 等应用的注册
# 测试连接
[C:\~]$
[C:\~]$ sftp -P2222 admin@10.0.0.11
密码: admin
# 如果是用在 Windows 下, Xshell Terminal 登录语法如下
(py3) [root@jumpserver /opt]# ssh admin@10.0.0.11 2222
(py3) [root@jumpserver /opt]# sftp admin@10.0.0.11 2222
密码: admin
如果能登陆代表部署成功
# sftp默认上传的位置在资产的 /tmp 目录下
# windows拖拽上传的位置在资产的 Guacamole RDP上的 G 目录下
3. 浏览器域名进行访问测试


4. Jumpserver应用
1. 系统设置



2. 创建用户及组








3. 用户Linux端登录









4. 资产管理



创建命令过滤器



创建系统用户





5. 权限管理





6. 会话管理





7. 作业中心



8. 日志审计
