• Jumpserver堡垒机


    Jumpserver堡垒机

    一、Jumpserver堡垒机概述-部署Jumpserver运行环境
    01 跳板机概述
    跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。

    跳板机缺点:没有实现对运维或开发人员操作行为的控制和审计,使用跳板机的过程中还是会出现误操作、违规操作导致的事故,一旦出现操作事故很难快速定位到原因和责任人。

    02 堡垒机概述
    堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。
    总结:堡垒机比跳板机多了实时收集、监控网络环境、集中报警等功能。

    03 Jumpserver概述
    Jumpserver是一款使用Python、Django开发的开源跳板机系统。为互联网企业提供了认证,授权,审计,自动化运维等功能。
    官方网址: http://www.jumpserver.org
    Jumpserver堡垒机组件说明:
    1、Jumpserver:现指 Jumpserver 管理后台,是核心组件(Core),使用 Django Class Based View (Django基于类的视图)风格开发,支持 Restful API。
    2、Coco:实现了 SSH Server 和 Web Terminal Server 的组件,提供 SSH 和 WebSocket 接口, 使用 Paramiko 和 Flask 开发。
    3、Luna:现在是 Web Terminal 前端,计划前端页面都由该项目提供,Jumpserver 只提供 API,不再负责后台渲染html等。

    04 部署Jumpserver运行环境
    实验环境:
    一台jumpserver服务端
    一台或多台服务器资源,作为被管理的服务器

    修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文。所以必须要修改字符集为中文。

    [root@jumpserver ~]# cat /etc/locale.conf 
    LANG="en_US.UTF-8"
    [root@jumpserver ~]# export LC_ALL=zh_CN.UTF-8
    [root@jumpserver ~]# echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf
    [root@jumpserver ~]# exit #再重新连接, 这样语言环境就改变了。
    登出
    [root@jumpserver ~]# cat /etc/locale.conf 
    LANG=zh_CN.UTF-8
    

    05 准备python3和python虚拟环境
    1、安装依赖包
    注:安装前可以开启yum缓存功能,把软件包下载下来方便后期使用。

    [root@jumpserver ~]# vim /etc/yum.conf 
    改:keepcache=0
    为:keepcache=1
    [root@jumpserver ~]# yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
    

    2、编译安装python3.6.0

    安装Python3.6的依赖包
    [root@jumpserver ~]#  yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
    [root@jumpserver ~]# cd /opt/
    [root@jumpserver opt]# tar fx Python-3.6.0.tar.xz 
    [root@jumpserver Python-3.6.0]# ./configure && make && make install
    

    # 这里必须执行编译安装,否则在安装 Python 库依赖时会有麻烦...
    注:在线下载 wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz

    3、建立Python虚拟环境
    解决python2.7和python3.5冲突了怎么办?老程序需要使用2.7,新程序需要3.6?
    因为 CentOS 6/7 自带的是 Python2,而Yum等工具依赖原来的Python,为了不扰乱原来的环境我们使用Python虚拟环境。

    [root@jumpserver ~]# cd /opt/
    [root@jumpserver opt]# python3 -m venv py3
    [root@jumpserver opt]# source /opt/py3/bin/activate
    (py3) [root@jumpserver opt]#
    

    看到上面的提示符代表成功,以后运行Jumpserver都要先运行以上source命令,以下所有命令均在该虚拟环境中运行。

    06 安装jumpserver1.0.0
    1、下载或 Clone 项目
    项目提交较多 git clone 时较大,你可以选择去 Github 项目页面直接下载zip包。

    (py3) [root@jumpserver ~]# cd /opt/jumpserver/
    (py3) [root@jumpserver jumpserver]# ls
    apps  config_example.py  data  docs  jms  LICENSE  logs  README.md  requirements  run_server.py  tmp  utils
    

    注:在线下载方法:
    git clone --depth=1 https://github.com/jumpserver/jumpserver.git
    cd jumpserver && git checkout master
    注:depth用于指定克隆深度,为1即表示只克隆最近一次commit。

    2、安装依赖rpm包

    (py3) [root@jumpserver ~]# cd /opt/jumpserver/requirements/
    (py3) [root@jumpserver requirements]# ls
    deb_requirements.txt  issues.txt  mac_requirements.txt  requirements.txt  rpm_requirements.txt
    (py3) [root@jumpserver requirements]# cat rpm_requirements.txt 
    libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel sshpass openldap-devel mysql-devel libffi-devel openssh-clients
    (py3) [root@jumpserver requirements]# yum install -y `cat rpm_requirements.txt`
    (py3) [root@jumpserver requirements]# yum -y install $(cat rpm_requirements.txt) #也可以使用这种方法。
    

    3、安装python依赖库

    (py3) [root@jumpserver requirements]# pip -V
    pip 9.0.1 from /opt/py3/lib/python3.6/site-packages (python 3.6)
    
    在线安装
    (py3) [root@jumpserver python-package]# cd /opt/jumpserver/requirements/
    (py3) [root@jumpserver requirements]# pip install -r requirements.txt
    pip 是一个安装和管理 Python 包的工具,相当于yum命令
    

    4、安装redis,jumpserver使用redis做cache

    (py3) [root@jumpserver ~]# yum install -y redis
    (py3) [root@jumpserver ~]# systemctl enable redis && systemctl start redis
    

    5、安装MySQL

    (py3) [root@jumpserver ~]# yum install mariadb mariadb-devel mariadb-server -y
    (py3) [root@jumpserver ~]# systemctl enable mariadb && systemctl start mariadb
    

    6、创建jumpserver数据库并授权

    (py3) [root@jumpserver ~]# mysql
    MariaDB [(none)]> create database jumpserver default charset 'utf8';
    MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '123456';
    MariaDB [(none)]> exit
    

    7、修改jumpserver配置文件
    修改连接数据库配置

    (py3) [root@jumpserver ~]# cd /opt/jumpserver/
    (py3) [root@jumpserver jumpserver]# cp config_example.yml config.yml
    (py3) [root@jumpserver jumpserver]# vim config.py #修改如下配置,注意python的缩进。
    	# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
    SECRET_KEY: HGsMORPCxnBx4EFBZRVkRNnlgrlUzngzXyH1Sm06g02u7HIe3
    
    BOOTSTRAP_TOKEN: kLnMvDcpmGLoHcPt
    
        # SQLite setting:
        #DB_ENGINE = 'sqlite3'
        #DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
    
        # MySQL or postgres setting like:
        DB_ENGINE = 'mysql'
        DB_HOST = '127.0.0.1'
        DB_PORT = 3306
        DB_USER = 'jumpserver'
        DB_PASSWORD = '123456'
        DB_NAME = 'jumpserver'
    

    8、生成数据库表结构和初始化数据库

    (py3) [root@jumpserver jumpserver]# cd /opt/jumpserver/utils/
    (py3) [root@jumpserver utils]# bash make_migrations.sh
    

    #注,在执行这一条命令之前,必续保障之前的pip install ./* 命令已经执行完了,不然后导入不了Django等软件包。

    9、启动

    (py3) [root@jumpserver utils]# cd /opt/jumpserver/
    (py3) [root@jumpserver jumpserver]# chmod +x jms
    (py3) [root@jumpserver jumpserver]# ./jms start all -d 
    gunicorn is running: 42513
    celery is running: 42539
    beat is running: 42541
    

    如果运行失败了,重新启动一下。
    #启动服务的脚本,使用方式./jms start|stop|status|restart all 后台运行请添加 -d 参数

    10、测试
    访问:IP:8080 【用户名:admin,密码:admin】

    这里需要使用8080端口来访问页面。后期搭建 nginx 代理,就可以直接使用80端口正常访问了
    附上重启的方法:

    (py3) [root@jumpserver jumpserver]# ./jms restart -d
    

    二、安装Coco组件和ssh server
    01 安装Coco组件
    1、点击web终端界面,弹出一个新的页面会报错

    所以接下来,我们安装luna和coco:
    coco概述:coco实现了SSH Server和Web Terminal Server的组件,提供SSH和WebSocket接口,使用Paramiko和Flask开发。

    (py3) [root@jumpserver jumpserver]# cd /opt/coco/
    (py3) [root@jumpserver coco]# ls
    coco  cocod  conf_example.py  LICENSE  logo.txt  README.md  requirements  run_server.py
    (py3) [root@jumpserver coco]# cd requirements/
    (py3) [root@jumpserver requirements]# yum -y install $(cat rpm_requirements.txt)
    
    附:在线下载代码:# git clone https://github.com/jumpserver/coco.git && cd coco && git checkout master
    (py3) [root@jumpserver requirements]# pip install -r requirements.txt  #前面已经离线安装过python的包,这里就很快安装成功了,或提示已经安装成功。
    注:扩展:pip download -r requirements.txt  #使用download可以下载python包到本地
    

    02 查看配置文件并运行

    (py3) [root@jumpserver requirements]# cd /opt/coco/
    (py3) [root@jumpserver coco]# cp config_example.yml config.yml
    (py3) [root@jumpserver coco]# vim config.yml
    NAME: "coco"
    BOOTSTRAP_TOKEN: kLnMvDcpmGLoHcPt
    
     (py3) [root@jumpserver coco]# ./cocod start -d  #后台运行使用 -d 参数
    #启动之后web界面进行更新
    

    # 新版本更新了运行脚本,使用方式./cocod start|stop|status|restart 后台运行请添加 -d 参数

    三、安装web-terminal前端和luna组件并配置nginx整合各个组件
    01 安装luna组件
    Luna概述:Luna现在是 Web Terminal 前端,计划前端页面都由该项目提供,Jumpserver 只提供 API,不再负责后台渲染html等。
    访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包,直接解压,不需要编译
    解压 Luna

    (py3) [root@jumpserver coco]# cd /opt/
    (py3) [root@jumpserver opt]# tar fx luna.tar.gz 
    (py3) [root@jumpserver opt]# chown -R root.root  luna/
    (py3) [root@jumpserver opt]# ls /opt/luna
    

    注:在线下载
    #wget https://github.com/jumpserver/luna/releases/download/v1.0.0/luna.tar.gz

    02 配置nginx整合各个组件

    (py3) [root@jumpserver opt]# yum install -y nginx
    

    03 修改nginx配置文件并启动
    删除第38行到 57行中server {。。。}相关的内容
    在vim命令模式,输入38gg,快速跳到38行,然后输入20dd,就可以删除。
    删除后,在38行插入以以下内容:

    (py3) [root@jumpserver jumpserver-package]# vim /etc/nginx/nginx.conf
    server {
        listen 80;
    	server_name qls.jumpserver.com;
        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 /luna/ {
            try_files $uri / /index.html;
            alias /opt/luna/;
        }
    
        location /media/ {
            add_header Content-Encoding gzip;
            root /opt/jumpserver/data/;
        }
    
        location /static/ {
            root /opt/jumpserver/data/;
        }
    
        location /socket.io/ {
            proxy_pass       http://localhost:5000/socket.io/;  # 如果coco安装在别的服务器,请填写它的ip
            proxy_buffering off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    
        location / {
            proxy_pass http://localhost:8080;  # 如果jumpserver安装在别的服务器,请填写它的ip
        }
    }
    (py3) [root@jumpserver opt]# nginx -t
    (py3) [root@jumpserver opt]# systemctl start nginx && systemctl enable nginx
    

    04 测试
    本地hosts文件解析
    测试访问:域名:80 [默认就是80端口]
    会话管理—web终端

    05 测试命令行登录

    以上说明终端已经连接成功没有任何问题

    四、jumpserver平台系统初始化
    01 系统基本配置
    这里要写上自己真实的URL地址,不然后期用户无法访问。

    02 配置邮件服务器
    点击页面上边的“邮件设置”,进入邮件设置页面:
    配置邮件服务后,点击页面的"测试连接"按钮,如果配置正确,Jumpserver 会发送一条测试邮件到您的 SMTP 账号邮箱里面,邮箱收到邮件后点击提交。

    注:配置完后,需要重启一下服务。不然后期创建用户,收不到邮件。

    (py3) [root@jumpserver opt]# /opt/jumpserver/jms restart all -d
    

    注意: 在使用jumpserver过程中,有一步是系统用户推送,要推送成功,client(后端服务器)要满足以下条件:
    1)后端服务器需要有python、sudo环境才能使用推送用户,批量命令等功能
    2)后端服务器如果开启了selinux,请安装libselinux-python。一般情况服务器上都关闭了selinux

    五、使用jumpserver管理机房服务器
    搭建完成后的整体界面

    01 用户管理
    添加用户和用户组。
    用户名即 Jumpserver 登录账号。用户组是用于资产授权,当某个资产对一个用户组授权后,这个用户组下面的所有用户就都可以使用这个资产了。角色用于区分一个用户是管理员还是普通用户。





    新用户登录:

    这个需要用户自己生成SSH 密钥,方便后期登录:在另一台linux上,使用admin用户生成自己的ssh密钥。

    02 创建管理用户
    Jumpserver里各个用户的说明

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

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

    原则上就是手动visudo。
    系统会自动再visudo添加一条规则
    # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
    增加一个:巡检服务器状态用户:
    test 用户权限: /sbin/ifconfig,/usr/bin/top,/usr/bin/free

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

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



    如果资产不能正常连接,请检查管理用户的用户名和密钥是否正确以及该管理用户是否能使用 SSH 从 Jumpserver 主机正确登录到资产主机上。

    07 网域列表
    网域功能是为了解决部分环境无法直接连接而新增的功能,原理是通过网关服务器进行跳转登录。这个功能,一般情况不用到。

    08 创建授权规则
    节点,对应的是资产,代表该节点下的所有资产。
    用户组,对应的是用户,代表该用户组下所有的用户。
    系统用户,及所选的用户组下的用户能通过该系统用户使用所选节点下的资产。
    节点,用户组,系统用户是一对一的关系,所以当拥有 Linux、Windows 不同类型资产时,应该分别给 Linux 资产和 Windows 资产创建授权规则。

    当前端页面授权完成之后系统会把jumpserver服务器的test用户推送到lb01上。

    [root@lb01 ~]# tail /etc/passwd -n 1
    test:x:1001:1001::/home/test:/bin/bash
    [root@lb01 ~]# vim /etc/sudoers
    test ALL=(ALL) NOPASSWD: /sbin/ifconfig
    

    09 web界面资产的使用
    使用创建的用户登录

    到这里之后可以直接点击web终端。进行连接服务器。

    10 xshell使用资产

    (py3) [root@jumpserver ~]# ssh -p2222 zhangsong@172.16.0.101
        张松, 欢迎使用Jumpserver开源跳板机系统  
    
        1) 输入 ID 直接登录 或 输入部分 IP,主机名,备注 进行搜索登录(如果唯一).
        2) 输入 / + IP, 主机名 or 备注 搜索. 如: /ip
        3) 输入 P/p 显示您有权限的主机.
        4) 输入 G/g 显示您有权限的主机组.
        5) 输入 G/g + 组ID 显示该组下主机. 如: g1
        6) 输入 H/h 帮助.
        0) 输入 Q/q 退出.
    
    Opt> p
    
     ID Hostname        IP              LoginAs     Comment                                                                                               
      1 lb01            172.16.0.171    [巡检服务器状态用户] 
    
    总共: 1 匹配: 1
    
    Opt> lb01
    
    Connecting to test@lb01 0.2
    Last login: Thu Apr 11 16:57:47 2019 from jumpserver
    [test@lb01 ~]$ su - root
    Password: 
    Last login: Thu Apr 11 16:59:11 CST 2019 on pts/7
    [root@lb01 ~]#
    

    附上官网文档网址
    http://docs.jumpserver.org/zh/docs/setup_by_centos.html

  • 相关阅读:
    造数--存储过程,循环
    一句话搞定python六剑客
    数据库基本操作--增删改查
    session与cookie区别与联系
    正则表达式中 group groups区别
    迭代总结(随时更新)
    postman抓包
    linux常用命令
    抓包
    jdk 11特性
  • 原文地址:https://www.cnblogs.com/chenmiao531759321/p/12019164.html
Copyright © 2020-2023  润新知