介绍

  1. 介绍:
    提供唯一入口(也就是统一设备运维入口),支持Linux、Windows、Unix、MacOS 等 设备资源,实现对服务器器资源操作管理理的集中认证,集中控制,集中审计。提升运维管理理水平。
  2. 之所以用堡垒机的原因:
    互联网企业需要大量的服务器,但是服务器需要高效、安全的去管理,所以就用到了堡 垒机。
    现在比较常见的方案是搭建堡垒机环境作为线上服务器器的入口,所有服务器器只能通 过堡垒机进行行登陆访问。
    用大白话来说: 就是监控运维人员、开发人员对服务器器的命令操作。出了了事故能找 到具体责任人。
  3. 特性:
    精细化的资源与功能授权,让运维人员各司其职
    体系化的指令审计规则,让运维操作安全可控
    支持多重身份认证,让非法访问无所遁形
    主机账号统一管理,SSH密钥对一键批量下发
  4. 展示:
    登入信息仪表盘

    资产管理


    权限管理

    会话管理

Web网站会话

java堡垒机登陆 jumper 堡垒机_安全

Ssh会话

java堡垒机登陆 jumper 堡垒机_服务器_02


java堡垒机登陆 jumper 堡垒机_安全_03

日志审计管理

java堡垒机登陆 jumper 堡垒机_服务器_04

搭建

  1. jumpserver堡垒机组件:
    Jumpserver:管理后台,是核心组件
    Koko:实现了 SSH Server 和 Web Terminal
    Server 的组件,提供 SSH 和 WebSocket 接口
    Luna:现在是 Web Terminal 前端,计划前端页面都由该项目提供,Jumpserver 只提供 API,不 再负责后台渲染html等。
  2. 部署Jumpserver
  3. 运行环境
    字符集为中文
    查看
cat /etc/locale.conf

不是中文则修改

localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf
  1. 部署docker
    阿里云镜像加速配置
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF
yum install -y docker-ce-19.03.5-3.el7.x86_64.rpm 			
	docker-ce-cli-19.03.5-3.el7.x86_64.rpm 		containerd.io-1.2.6-3.3.el7.x86_64.rpm
vim  /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock  --graph /data/docker
systemctl daemon-reload
systemctl start docker

开启动网络转发功能,默认会自动开启
查看:为1是开启的

cat /proc/sys/net/ipv4/ip_forward

手动开启:

vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
sysctl -p 	#生效

安装docker-compose,运行命令:

cd  /usr/local/bin 
mv  docker-compose-Linux-x86_64  docker-compose
chmod +x /usr/local/bin/docker-compose
  1. 准备 Python3 和 Python 虚拟环境
    安装依赖包
yum install -y epel-release
yum -y install wget sqlite-devel xz gcc automake zlib-devel
	openssl-devel epel-release git
	python36u python36u-devel mariadb-devel

编译安装python3.6.1

tar -xvf Python-3.6.1.tar.xz  -C /usr/local/
cd /usr/local/Python-3.6.1/
./configure  &&  make  -j 4 && make install

CentOS 6/7 自带的是 Python2,而 Yum 等工具依赖原来的 Python,为了 不扰乱原来的环境我们来使用Python 虚拟环境

建立 Python 虚拟环境

cd /usr/local/
python3 -m venv py3
source /usr/local/py3/bin/activate
(py3) [root@xuegod63 ~]#
#切换成功的,前面有一个py3 标识

设置pip阿里源并升级pip

mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com
(py3) [root@jumpserver docker] pip install --upgrade pip
  1. 安装 Jumpserver 2.0.0
tar -xvf jumpserver-v2.0.2.tar.gz  -C /data/
cd /usr/local/jumpserver/requirements/

安装依赖 RPM 包

(py3) [root@xuegod63] yum -y install $(cat rpm_requirements.txt)

安装 Python 库依赖

(py3) [root@xuegod63] pip install --upgrade setuptools
(py3) [root@xuegod63] python -m pip install --upgrade pip

远程安装:

py3) [root@xuegod63] cd /usr/local/jumpserver/requirements/
(py3) [root@xuegod63] pip install wheel && pip install -r requirements.txt

安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke

yum  -y install redis 
systemctl enable redis
systemctl start redis

建数据库 Jumpserver 并授权

yum -y install mariadb mariadb-devel mariadb-server(也可使用mysql)
systemctl start mariadb
systemctl enable mariadb
#mysql
create database jumpserver default charset 'utf8';
grant all on jumpserver.* to 'jumpserver'@'%' identified by '123456';

修改Jumpserver 配置文件
随机生成2段字符
给jumpserver配置文件的SECRET_KEY:

cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo;echo
BCpmAcL1GSBV9qv1ICA2wmczmRg1wJgWNaLX6960dWknPcr0A

给jump server配置文件的BOOTSTRAP_TOKEN:

cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24;echo;echo
pikktkcjyAQJ8kTfno5sEVQi
cd /usr/local/jumpserver/
cp config_example.yml config.yml
vim /usr/local/jumpserver/config.py
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
SECRET_KEY: BCpmAcL1GSBV9qv1ICA2wmczmRg1w

# 预共享Token coco和guacamole用来注册服务账号
BOOTSTRAP_TOKEN: pikktkcjyAQJ8kTfno5sEVQi
# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
DEBUG: true
# 日志级别
LOG_LEVEL: ERROR
# 浏览器Session过期时间,默认24小时, 也可以设置浏览器关闭则过期
SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: false
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 192.168.66.243
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: '123456'
DB_NAME: jumpserver
# 运行时绑定端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD:
#Windows 登录跳过手动输入密码
WINDOWS_SKIP_ALL_MANUAL_PASSWORD: False

数据库表结构和初始化数据

(py3) [root@xuegod63] cd /usr/local/jumpserver/utils
(py3) [root@xuegod63] bash make_migrations.sh
#在执行这一条命令之前,必续保障之前的pip install ./* 命令已经执行完了,
#不然后导入不了Django等软件包。

启动Jumpserver

(py3) [root@xuegod63] cd /usr/local/jumpserver
(py3) [root@xuegod63] chmod +x jms
(py3) [root@xuegod63] ./jms start all -d 
(py3) [root@xuegod63] ./jms restart -d 
# 后台运行使用 -d 参数

访问 http://192.168.66.48:8080 用户 : admin 密码: admin

  1. 安装koko组件:SSH Server 和 Web Terminal
    Server 的组件,提供 SSH 和 WebSocket 接口
    导入镜像
docker load -i jms-koko:2.0.2.tar
docker load -i jms-guacamole:2.0.2.tar

编辑启动文件

mkdir -p /opt/docker/jms-koko
mkdir -p /opt/docker/jms-guacamole
vim /opt/docker/jms-koko/docker-compose.yml
version: '3'
services:
  jms_koko:
    image: jumpserver/jms_koko:2.0.2
    restart: always
    environment:
      #指向 jumpserver 的服务端口
      - CORE_HOST=http://192.168.66.50:8080
      #Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN
      - BOOTSTRAP_TOKEN=pikktkcjyAQJ8kTfno5sEVQi
      - LOG_LEVEL=ERROR
    container_name: jms_koko
    ports:
     - "2222:2222"
     - "5000:5000"
    expose:
     - "2222"
     - "5000"
vim /opt/docker/jms-guacamole/docker-compose.yml
version: '3'
services:
  jms_guacamole:
    image: jumpserver/jms_guacamole:2.0.2
    restart: always
    environment:
      #指向 jumpserver 的服务端口
      - JUMPSERVER_SERVER=http://192.168.66.50:8080
      #Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN
      - BOOTSTRAP_TOKEN=pikktkcjyAQJ8kTfno5sEVQi
      - GUACAMOLE_LOG_LEVEL=ERROR
    container_name: jms_guacamole
    ports:
     - "8081:8080"
    expose:
     - "8081"

启动

docker-compose -f /opt/docker/jms-koko/docker-compose.yml up -d
docker-compose -f /opt/docker/jms-guacamole/docker-compose.yml up -d

查看状态

docker ps -a | grep jms
  1. 安装luna、lina组件:Luna现在是 Web Terminal 前端,计划前端页面都由该项目提供
tar -xvf luna-v2.0.2.tar.gz  -C /data/
tar -xvf lina-v2.0.2.tar.gz  -C /data/

配置 Nginx 整合各组件
安装nginx

安装依赖包:yum -y install gcc pcre-devel openssl-devel
mkdir /data/install/
安装:tar -xvf nginx-1.18.0.tar.gz -C /data/install/
指定软件归属:useradd -s /sbin/nologin nginx
cd /data/install/nginx-1.18.0/
./configure --prefix=/data/nginx --user=nginx --group=nginx --with-http_ssl_module 		
--with-stream
make && make install
启动服务:/usr/local/nginx/sbin/nginx
暂停服务:/usr/local/nginx/sbin/nginx -s stop
重新加载:/usr/local/nginx/sbin/nginx -s reload

配置启动文件

vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
  
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target
systemctl daemon-reload

编辑配置文件

vim /data/nginx/conf/nginx.conf
     worker_processes  2;
     events {
         worker_connections  2048;
}
http {
    server_tokens off;
    server_names_hash_bucket_size 128;
    client_max_body_size 50M;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    server {
        listen       80;
        server_name  localhost 192.168.66.58;
     # 录像及文件上传大小限制
client_max_body_size 100m;
       location /ui/ {
            try_files $uri / /index.html;
            alias /data/lina-v2.0.2/;
        }
        location /luna/ {
            try_files $uri / /index.html;
            alias /data/luna-v2.0.2/;
        }
        #录像存放位置
        location /media/ {
            add_header Content-Encoding gzip;
            root /data/jumpserver-v2.0.2/data/;
        }
    ## 静态资源存放位置
        location /static/ {
            root /data/jumpserver-v2.0.2/data/;
        }
        location /koko/ {
    #koko的对外服务地址
            proxy_pass       http://192.168.66.50: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/ {
    #guacamole对外服务地址
            proxy_pass       http://192.168.66.230: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;
#WS_LISTEN_PORT的对外地址
            proxy_pass http://192.168.66.50: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://192.168.66.50: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://192.168.66.50: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;
        }

运行 Nginx

nginx -t   # 检测配置文件
systemctl start nginx
systemctl enable nginx

访问http://192.168.66.50/

admin/admin

接受主键的注册

java堡垒机登陆 jumper 堡垒机_安全_05


java堡垒机登陆 jumper 堡垒机_安全_06

测试连接

ssh -p2222 admin@192.168.66.48   #密码: admin

java堡垒机登陆 jumper 堡垒机_java堡垒机登陆_07

  1. jumpserver平台系统初始化
    9.1、系统基本设置:这里要写成自己真实的URL地址,不然后期用户访问不了。http://192.168.66.48

    9.2、配置邮件发送服务器
    点击页面上边的"邮件设置" TAB ,进入邮件设置页面:
    SMTP服务器:smtp.163.com

注:自己邮箱要开启smtp和pop3服务。

开启POP3/SMTP/IMAP服务方法:

请登录163邮箱,点击页面右上角的“设置”—在“高级”下,“POP3/SMTP/IMAP”,

勾选图中两个选项,点击确定。即可开启成功。开通后即可用闪电邮、Outlook

java堡垒机登陆 jumper 堡垒机_运维_08


POP3服务器:pop.163.com | SMTP服务器:smtp.163.com | IMAP服务器:imap.163.com

使用

  1. 用户管理:添加用户组。
    点击用户管理 —> 查看用户组 —> 添加用户组—>王者荣耀-华北区运维部门
  2. 添加用户
    点击用户管理 —> 用户列表 —> 创建用户
    其中,名称是真实姓名,用户名即 Jumpserver 登录账号。


    然后点提交。
    查看添加的用户

    成功提交用户信息后,Jumpserver 会发送一条设置"用户密码"的邮件到您填写的
    用户邮箱。
    点击链接,开始修改密码:

    用户首次登录 Jumpserver,会被要求完善用户信息。

    这个需要用户自己生成SSH 密钥,方便后期登录:我在自己的另一台linux上,使用mk 用户生成自己的ssh密钥。
(py3) [root@xuegod63 luna]# useradd mk123
(py3) [root@xuegod63 luna]# echo 123456 | passwd --stdin mk123 
[root@xuegod63 opt]# su - mk123
[mk@xuegod63 ~]$ ssh-keygen   #一路回车
[mk@xuegod63 ~]$ cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE/7Yt3MKTvavCZSV2F9GCRX0snRDyAu2GzvmGaMj1Y1Evv0+bdNYuEVbax/CyakBcaYyBuD427trkQytfbfovc97As4fFV3yhKKKis6D66TR28zH5gGkhuToFhmil9BGFzJqy1M7fne+A18bKvezlFpZn4clwgg3kIqPCbOtQQnA9h1TH5j8lnvMwwcRxenKRMla987TfJ3482aTAoScxNmv2FNNSQmZEKHGPT5MmUIzrm3dwvCotAEmDegxJ0dB5u29tZaHgxMWFf1GRoj3pW8CzMOhug42F9FDF+K9wve5aph0mmc5pe7OKJthWrbv8CEV3T2mRYK4+M5q5sRed mk123@xuegod63.cn

把上面生成的公钥粘到这里:

java堡垒机登陆 jumper 堡垒机_安全_09

  1. 编辑资产树添加节点
    节点不能重名,右击节点可以添加、删除和重命名节点,以及进行资产相关的操作。

改成节点名字为:王者荣耀-华北区-服务器

  1. 创建管理用户
    Jumpserver里各个用户的说明:

    管理用户是服务器的 root,或拥有 NOPASSWD: ALL sudo 权限的用户,Jumpserver 使用该 用户来推送系统用户、获取资产硬件信息等。

    王者荣耀-华北区-服务器管理用户-root 密码是: 123456

    前提,你的王者荣耀-华北区-服务器节点中所有的服务器root用户密码都是:123456
    这样就可以使用此root用户管理服务器。
  2. 创建系统用户
    系统用户是 Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户, Jumpserver 使用系统用户登录资产。
    系统用户的 Sudo 栏填写允许当前系统用户免sudo密码执行的程序路径,如默认的 /sbin/ifconfig,意思是当前系统用户可以直接执行 ifconfig 命令或 sudo ifconfig 而不 需要输入当前系统用户的密码,执行其他的命令任然需要密码,来达到权限控制的目的。
    此处的权限应该根据使用用户的需求汇总后定制,原则上给予最小权限即可。
    系统用户创建时,如果选择了自动推送 Jumpserver 会使用 Ansible 自动推送系统用户到资产 中,如果资产(交换机、Windows )不支持 Ansible, 请手动填写账号密码。
    Linux 系统协议项务必选择 ssh 。如果用户在系统中存在,去掉自动生成密钥、自动推送勾选。

    增加一个:检查服务器运行状态的用户: user 权限:
    /sbin/ifconfig,/usr/bin/top,/usr/bin/free

    再加一个: 系统管理员用户:manager
  3. 创建资产
    点击页面左侧的“资产管理”菜单下的“资产列表”按钮,查看当前所有的资产列表。
    点击页面左上角的“创建资产”按钮,进入资产创建页面,填写资产信息。
    IP 地址和管理用户要确保正确,确保所选的管理用户的用户名和密码能"牢靠"地登录指定的 IP 主机上。资产的系统平台也务必正确填写。公网 IP 信息只用于展示,可不填,Jumpserver 连接资产使用的是 IP 信息。

    开启虚拟机xuegod64.cn。 一会把这台机器当成资源添加平台中。
    game64.xuegod.cn-王者荣耀-华北区 192.168.1.64


    资产创建信息填写好保存之后,可以看到已经可以连接资产,说明正常:

    如果资产不能正常连接,请检查管理用户的用户名和密钥是否正确以及该管理用户是否能使 用 SSH 从 Jumpserver 主机正确登录到资产主机上。
  4. 网域列表(这个功能,一般情况不用到。)
    网域功能是为了解决部分环境无法直接连接而新增的功能,是通过网关服务器进行跳转登录。
  5. 创建授权规则
    节点,对应的是资产,代表该节点下的所有资产。
    用户组,对应的是用户,代表该用户组下所有的用户。
    系统用户,及所选的用户组下的用户能通过该系统用户使用所选节点下的资产。
    节点,用户组,系统用户是一对一的关系,所以当拥有 Linux、Windows 不同类型资产时,应
    该分别给 Linux 资产和 Windows 资产创建授权规则。


    授权成功后,你自己手动到上查看:
tail /etc/passwd -n 5
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
mk:x:1000:1000:mk:/home/mk:/bin/bash
manager:x:1001:1001::/home/manager:/bin/bash

#自动推送一个帐号,自动在资产服务器上创建系统用户

visudo  #sudo相关的规则也会被自动推送过来
manager ALL=(ALL) NOPASSWD: /sbin/,/bin/
  1. 用户使用资产
    登录 Jumpserver
    创建授权规则的时候,选择了用户组,这里需要登录所选用户组下面的用户才能看见相应的资产。
    使用无痕浏览器,再打开一个窗口,进行登录:

    用户正确登录后的页面:

    连接资产,点击页面左边的 Web 终端:

    打开资产所在的节点:
    双击资产名字,就连上资产了:
    如果显示连接超时,请检查为资产分配的系统用户用户名和密钥是否正确,是否正确选择 Linux 操作系统,协议 ssh,端口22,以及资产的防火墙策略是否正确配置等信息。
  2. 在xshell字符终端下连接jumpserver管理服务器

    输入jumpserver用户mk123 和密码123456

    点击确定开始连接
Opt> 64   #输入一个64,就可以直接登录:192.168.1.64
[manager@xuegod64 ~]$ whoami  #登录使用的是系统用户manager
[manager@xuegod64 ~]$ exit
Opt> p  #显示你有权限的主机
 ID  Hostname                          IP              LoginAs       Comment                               
  1  game64.xuegod.cn-王者荣耀-华北区 192.168.1.64    [系统管理员用户] 
Opt> g  #显示你有权限的主机组
			ID Name            Assets     Comment                                                
			1   王者荣耀-华北区-服务器
  1. 查看历史命令记录
  2. 查看历史会话并回放视频

更多内容,可以参数官方手册:http://docs.jumpserver.org/zh/docs/step_by_step.html