1、目的
1.1堡垒机支持统一账户管理策略,能够实现对所有远程服务器等账号进行集中管理,完成对账号整个生命周期的监控;还支持对不同用户进行不同策略的制定,细粒度的访问控制能够严防非法、越权访问事件的发生,最大限度保护用户资源的安全。
1.2同时堡垒机也能解决一些安全上的不稳定因素,堡垒机执行的任务对于整个网络安全系统至关重要。由于堡垒机完全暴露在外网安全威胁之下,需要做许多工作来设计和配置堡垒机,使它遭到外网***成功的可能性减至最低。甚至,一些网络管理员会用堡垒机做牺牲品来换取网络的安全。这些堡垒机吸引***者的注意力,消耗***真正网络主机的时间并且使追踪***企图变得更加容易。
1.3堡垒机在企业网络管理中充当着门卫的重要职责,所有内外部对网络设备及服务器的请求,都要通过堡垒机。因此,堡垒机能够拦截非法访问和恶意***,对不合法命令进行阻断、过滤掉所有对目标设备的非法访问行为。总之,堡垒机能够最大的保护企业内部网络设备及服务器资源的安全性,使得企业内部网络管理合理化和专业化。
1.4本文档旨在提供ZStack云平台很多用户通过堡垒机对部署在ZStack平台的应用系统进行日常维护,并进行集中式的管理,从而无需管理运维人员逐一进行相关运维,只需通过一台或者多台堡垒机即可运营整个服务架构中的主机,同时也为管理私有网络的服务器提供便利,最小化应用系统的安全风险,从而有利于提升整体架构的安全,并结合这些场景和安全因素考虑,写下关于ZStack云平台应用部署Linux堡垒机的教程。
?
2、ZStack云平台方案

2.1 准备软件

2.2.1?进行部署之前,需提前下载云平台所需的系统ISO、部署安装包。
2.2.2?以ZStack 3.7.1版本为例,可在官网下载相关资源。
http://cdn.zstack.io/product_downloads/iso/ZStack/3.7.1/7948o1y5rx/ZStack-x86_64-DVD-3.7.1-c74.iso
注意:下载ISO请下载与当前云平台适配的ISO版本,例如,当前云平台采用C74版本,请下载C74版本的ISO。
注:下载完毕,请在管理节点检查md5值与网站标识的是否一致,如不一致,请重新下载。
校验md5的检测方法参考:
#md5sum ?ZStack-x86_64-DVD-3.7.1-c74.iso
2.2?总体规划

2.2.1网络规划介绍

对于网络规划通常需要划分为若干个子网,分为公有网络和私有网络。公有网络中的云主机可以直接从?Internet 中接收入站数据流,也可以直接向 Internet 发送出站数据流,而私有网络中的云主机则不可。但是私有网络中的云主机可以使用位于公有网络中的网络地址转换 (NAT) 网关访问 Internet。
根据以上描述不同子网的特点,我们需要把堡垒机放置在公有子网中,也就是绑定弹性公网IP,以便接受管理人员通过Internet的访问,受管理的服务器根据其在业务系统中充当的角色选择放置在公有网络或着私有网络中。在实际生产环境中根据需要可为堡垒机设置一个独立的公有地址。

2.2.2实验环境介绍

PC为本机,能连通Internet,本机IP为192.168.167.38/24
Jumpserver为centos7虚拟机,安装一块网卡,IP地址为10.0.149.157/16,并绑定一个弹性公网IP,IP地址为172.20.14.15/16,能连通Internet,堡垒机能够ping通PC和Service
service为Centos7虚拟机,安装一块网卡,IP地址为10.0.214.167/16
目前PC端无法连接10.0.0.0/16网段的所有IP
两个Centos均安装openssh-client和openssh-service,并能正常使用sshd服务
PC通过弹性公网IP远程连接到jumpserver,再利用jumpserver的私网IP来远程连接管理service,达到PC控制远端service的效果,具体网络构架规划示意图,如下图所示:

点击查看原图

3、Linux堡垒机部署

3.1 创建堡垒机

在ZStack私有云主菜单,点击云资源池 > 云主机按钮,进入云主机界面,点击创建云主机按钮,在弹出的创建云主机页面,可参考以下示例输入相应内容,这里所使用的镜像是CentOS-7-x86_64-DVD-1804,三层网络选择私有网络,具体如图1所示:
点击查看原图

图1 创建云主机

3.2 安装系统

3.2.1打开控制台

打开当前云主机的控制台,可以登录云主机系统,进入ISO引导安装界面,默认选择Install ZStack开始安装操作系统;当服务器引导模式选择为Legacy模式时U盘引导,如图2所示:
点击查看原图

图2 选择安装方式

3.2.2选择语言

根据个人喜好选择语言,这里选择English(United States),如图3所示:
点击查看原图

图3 语言选择

3.2.3进入系统安装界面

进入系统安装界面后,已经预先配置如下默认选项,一般情况下管理员无需更改配置。
?DATE&TIME:Americas/New York timezone
?LANGUAGE:English(United States)
?KEYBOARD:English(US)
系统安装界面如下图4所示:
点击查看原图

图4 系统安装界面
3.2.4选择安装模式
在系统安装界面,点击?SOFTWARE SELECTION 进入服务器安装模式候选,根据个人喜好选择服务器安装模式,这里选择Minimal Install,然后点击 Done,如图5所示:
点击查看原图

图5 服务器安装模式候选

3.2.5配置硬盘分区

1.在系统安装界面,点击INSTALLATION DESTINATION进入硬盘分区配置界面,选择要做的系统盘,点击 I will configure partitioning 进行手动分区,然后点击Done 开始分区配置,如图6所示:
点击查看原图

图6 配置硬盘分区
2.手动选择分区类型Standard Partition、Btrfs、LVM、LVM Thin Provisioning,这里选择 Standard Partition,然后点击“+”进行分区,创建好分区后点击 Done 完成分区创建 ,如图7所示:
点击查看原图

图7 选择分区格式
3.创建引导分区,如图8所示:
点击查看原图

图8 创建引导分区
4.创建 swap 分区,如图9所示:
点击查看原图

图9 创建swap分区
5.创建根分区,在配置根目录时,在 Desired Capacity 不输入数据,表示将所有空间都划分给/目录,如图10所示。
点击查看原图

图10?创建根分区

6.确认无误后,点击Done按钮完成磁盘分区操作,如图11所示:
点击查看原图

图11 完成磁盘分区
7.点击Done按钮后会弹出确认框;点击AcceptChanges应用分区配置,如图12所示:
点击查看原图

图12 应用分区配置

3.2.6配置网络

1.在系统安装界面,点击NETWORK & HOST NAME进入网卡配置主界面,选择需要修改的网卡,点击Configure按钮进行配置,如图13所示:
点击查看原图

图13 配置网卡
2.在General选项中,默认不会勾选Automatically connectto this network when it is available,因此需要检查该网卡是否勾选开机自动启动网卡,如果未勾选请手动勾选,如图14所示:
点击查看原图

图14 自动启动网卡
3.在Ipv4 Settings选项中,根据个人环境选择DHCP还是Manual,Manual需要手动设置IP 地址、掩码、网关、DNS,这里选择DHCP,设置好后点击 Save 按钮进行保存,如图15所示:
点击查看原图

图15 配置网卡
3.2.7开始安装
网络配置完后,回到系统安装主界面,点击Begin Installation开始安装,如图16所示:
点击查看原图

图16 开始安装

3.2.8设置root用户密码

1.安装过程自动进行,安装过程中请设置ROOT PASSWORD,如图17所示:
点击查看原图

图17 设置root用户密码
2.基础系统安装完毕后需要手动点击Reboot进行重启,重启完成后会自动进入Linux系统中,如图18、图19所示:
点击查看原图

图18 重启图
点击查看原图

19 进入系统

3.3 添加公网弹性IP

3.3.1?在ZStack私有云主菜单,点击网络服务 > 弹性IP,进入弹性IP界面,点击创建弹性IP,在弹出的创建弹性IP界面,可参考以下示例输入相应内容,如图20所示:
点击查看原图

图20 创建弹性IP
3.3.2?绑定云主机网卡,选择要绑定的云主机并选择该云主机所需要绑定的网卡,然后点击确定,完成创建,如图21、图22、图23所示:
点击查看原图

图21 绑定云主机
点击查看原图

图22 绑定云主机网卡
点击查看原图

图23 弹性IP详情界面
3.3.3?弹性IP绑定成功,到云主机界面ping www.baidu.com,测试网络的连通性,如图24所示:
点击查看原图

图24 测试网络连通性

3.4 应用部署

3.4.1安装yum源

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。Yum源就是一个软件集合地,你只需要搜索并安装你想要的软件,它会帮你解决大部分软件的依赖问题。
#mkdir ?/etc/yum.re .d/back
#mv ?/etc/yum.re .d/ /etc/yum.re .d/back
#curlo ?/etc/yum.re .d/CentOS-Base.repo ?http://mirrors.aliyun.com/repo/Centos-7.repo
#yum clean all ?&& yum makecache
#yum install ?wget -y
#wget-O/etc/yum.re .d/epel.repo?http://mirrors.aliyun.com/repo/epel-7.repo

3.4.2安装python包

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多地被用于独立的、大型项目的开发,目前最稳定的版本也是Python3.0以上。
#yum -y install ?wget sqlite-devel xz gcc automake zlib-devel openssl-devel
#mkdir -p ?/opt/server/tools
#cd ?/opt/server/tools/
#tar xvf ?Python-3.6.1.tar.xz && cd Python-3.6.1
#./configure ?--prefix=/usr/local/python3 && make && make install

3.4.3安装git

Git是目前流行的非常好用的版本控制工具,这里介绍其中一种安装方式:使用yum安装。
#yum -y install ?git

3.4.4安装mysql和创建数据库

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内、有组织、有共享、统一管理的数据集合。数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
#yum -y install ?mariadb mariadb-devel mariadb-server
#systemctl ?enable mariadb
#systemctl start ?mariadb
#DB_PASSWORD=cat ?/dev/urandom | tr -dc A-Za-z0-9 | head -c 24? ?
#echo -e ?"\033[31m 数据库密码是 $DB_PASSWORD \033[0m"? ?
#mysql -uroot -e ?"create database jumpserver default charset ''utf8''; grant all on ?jumpserver. to ''jumpserver''@''127.0.0.1'' identified by ''$DB_PASSWORD''; flush ?privileges;"

3.4.5建立加速pip

在使用Python的时候,需要下载各种各样的库,于是就需要一个下载库的管理工具,所以就需要在我们的Linux上下载pip帮助我们管理库。
#cd
#mkdir .pip
#vi ?~/.pip/pip.conf
[global]
index-url = ?http://mirrors.aliyun.com/pypi/simple/
?
[install]
trusted-host=mirrors.aliyun.com

3.4.6安装jumpserver

JumpServer是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。
JumpServer使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好。
JumpServer采纳分布式架构, 支持多机房跨区域部署, 中心节点提供API, 各机房部署登录节点, 可横向扩展、无并发访问限制。
JumpServer现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。
Jumpserver安装包地址:https://pan.baidu.com/s/1HlNOxnd3jxstw5cMMLU--g
#cd ?/opt/server/tools/
#yum install ?unzip -y
#unzip ?jumpserver-rpm.zip
#cd ?jumpserver-rpm/jumpserver
#git checkout ?master
#cd install/
#python ?install.py

3.4.7配置

配置安装jumpserver所需要的数据库、管理员账号密码、163邮箱、QQ邮箱等,完成jumpserver的配置部署。
请输入您服务器的IP地址,用户浏览器可以访问 [10.0.0.31]: 172.20.14.15
是否安装新的MySQL服务器? (y/n) [y]: n
请输入数据库服务器IP [127.0.0.1]: 127.0.0.1
请输入数据库服务器端口?[3306]: 3306
请输入数据库服务器用户?[jumpserver]: jumpserver
请输入数据库服务器密码: M0ynoMmM6p3Egz3qtQhjS07I
请输入使用的数据库?[jumpserver]: jumpserver
连接数据库成功
……
请输入管理员用户名?[admin]: admin
请输入管理员密码: [5Lov@wife]: password
请再次输入管理员密码: [5Lov@wife]: password
Starting ?jumpserver service:?????[?确定?]
安装成功,Web登录请访问http://ip:8000, 祝你使用愉快。
请访问?https://github.com/jumpserver/jumpserver/wiki 查看文档

3.4.8登陆

打开浏览器,输入http://IP:8000,就能看到jumpserver登陆界面,并进行登陆,如图25、26所示:
点击查看原图

图25 登陆
点击查看原图

图26 用户界面

3.4.9添加远程主机

远程主机是所需要远程管理的主机,方便用户远程进行操作,点击资产管理?—> 查看资产,输入相关内容,如图27所示:
点击查看原图

图27 添加主机

3.4.10添加Sudo命令

Sudo命令是系统用户登陆远程主机时该用户所能执行那些命令操作,点击授权管理 —> Sudo,输入相关内容,如图28所示:
点击查看原图

图28 添加Sudo

3.4.11添加系统用户

1.系统用户是Linux远程主机中用来远程进行登录的用户,其中要注意该系统用户在所需要远程操控的主机中是真实存在的,点击授权管理 —> 系统用户,输入相关内容,如图29所示:
点击查看原图

图29 添加系统用户
2.创建完系统用户后,点击推送,输入相关内容,绑定主机,如图30、31所示:
点击查看原图

图30 点击推送
点击查看原图

图31 绑定主机

3.4.12添加授权规则

授权规则是可以指定哪些系统用户、用户组可以进行登录哪些远程主机,同时也方便分类进行管理,点击授权管理?—> 授权规则,输入相关内容,如图32所示:
点击查看原图

图32 添加授权规则

3.4.13连接

最后点击资产管理?—> 查看资产,点击主机的连接按钮,完成连接,如图33、34所示:
点击查看原图

图33 点击连接
点击查看原图

图34 完成连接
4、测试
4.1?从PC端直接连接service,无法进行连接,如图35所示:
点击查看原图

图35 连接失败
4.2?从PC端通过Xhell连接Jumpserver主机远程service或者直接通过jumpserver管理界面连接到service,都能能成功连接,如图36、37所示:
点击查看原图

图36 连接成功
点击查看原图

图37 连接成功
?
总结
堡垒机往往是作为系统管理员或运维人员常用的操作平台之一、可以被理解为一类可作为跳板批量操作远程设备的网络设备。同时,堡垒机是网络中容易受到侵害的主机,所以堡垒机也必须是自身保护完善的主机。
堡垒机通常至少配备两块网卡设备,分别具备不同的网络连接。但在ZStack平台中,我们可以做到:只绑定弹性IP就能实现两块网卡设备所具有的效果,并且弹性IP定义了通过公有网络访问内部私有网络的方法,内部私有网络是隔离的网络空间,不能直接被外部网络访问,这也就一定程度上控制堡垒机在网络上受到侵害,同时弹性IP基于网络地址转换(NAT), 将一个网络(通常是公有网络)的IP地址转换成另一个网络(通常是私有网络)的IP地址;通过弹性IP,可对公网的访问直接关联到内部私网的云主机IP。
但堡垒机并没有实现对运维人员操作行为的控制和审计,所以在使用堡垒机过程中还是会有误操作、违规操作导致的操作事故,一旦出现操作事故也很难快速定位原因和责任人。