堡垒机

堡垒机

前言

堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审计定责。

关键词:堡垒机网络安全数据安全用户管理

1、起源发展

运维堡垒机的理念起源于跳板机。2000年左右,高端行业用户为了对运维人员的远程登录进行集中管理,会在机房里部署跳板机。跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然后从这台服务器再登录到目标设备进行维护。

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

2004年,人们认识到跳板机的不足,提出了以下运维操作管理理念

理念一: 唯有控制才能真正解决问题

审计是事后行为,从来没有事前审计一说

审计可以发现问题,但是无法防止问题发生

只有在事前严格控制,才能从源头真正解决问题

理念二:系统账号无法确认用户身份

系统账号的作用只是区分工作角色多人共用一个系统账号是合理的

运维人员的流动不应影响系统账号

理念三: 人为操作难免会出问题

人有失手,马有失蹄

不怕出问题,就怕出问题找不到原因

只要机器能做的,就不要人做

2、基本信息

中文名称

堡垒机

外文名

Access Gateway

目的

保障网络和数据不受破坏

手段

报警、记录、分析、处理

实质

技术手段

功能

核心系统运维和安全审计管控

2.1 概述

其从功能上讲,它综合了核心系统运维和安全审计管控两大主干功能,从技术实现上讲,通过切断终端计算机对网络和服务器资源的直接访问,而采用协议代理的方式,接管了终端计算机对网络和服务器的访问。形象地说,终端计算机对目标的访问,均需要经过运维安全审计的翻译。打一个比方,运维安全审计扮演着看门者的工作,所有对网络设备和服务器的请求都要从这扇大门经过。因此运维安全审计能够拦截非法访问和恶意攻击,对不合法命令进行命令阻断,过滤掉所有对目标设备的非法访问行为,并对内部人员误操作和非法操作进行审计监控,以便事后责任追踪。

安全审计作为企业信息安全建设不可缺少的组成部分,逐渐受到用户的关注,是企业安全体系中的重要环节。同时,安全审计是事前预防、事中预警的有效风险控制手段,也是事后追溯的可靠证据来源。

2.2 产生原因

随着企事业单位IT系统的不断发展,网络规模和设备数量迅速扩大,日趋复杂的IT系统与不同背景的运维人员的行为给信息系统安全带来较大风险。

(1)多个用户使用同一个账号

这种情况主要出现在同一工作组中,由于工作需要,同时系统管理账号,因此只能多用户共享同一账号。如果发生安全事故,不仅难以定位账号的实际使用者和责任人,而且无法对账号的使用范围进行有效控制,存在较大安全风险和隐患。

(2)一个用户使用多个账号

一个维护人员使用多个账号是较为普遍的情况,用户需要记忆多套口令同时在多套主机系统、网络设备之间切换,降低工作效率,增加工作复杂度。

(3)缺少统一的权限管理平台

权限管理日趋繁重和无序;而且维护人员的权限大多是粗放管理,无法基于最小权限分配原则的用户权限管理,难以实现更细粒度的命令级权限控制,系统安全性无法充分保证。

(4)无法制定统一的访问审计策略,审计粒度粗

各网络设备、主机系统、数据库是分别单独审计记录访问行为,由于没有统一审计策略,并且各系统自身审计日志内容深浅不一,难以及时通过系统自身审计发现违规操作行为和追查取证。

(5)传统的网络安全审计系统无法对维护人员经常使用的SSH、RDP等加密、图形操作协议进行内容审计。

2.3 核心功能

(1)登录功能

支持对X11、linux、unix、数据库、网络设备、安全设备等一系列授权账号进行密码的自动化周期更改,简化密码管理,让使用者无需记忆众多系统密码,即可实现自动登录目标设备,便捷安全。

(2)账号管理

设备支持统一账户管理策略,能够实现对所有服务器、网络设备、安全设备等账号进行集中管理,完成对账号整个生命周期的监控,并且可以对设备进行特殊角色设置如:审计巡检员、运维操作员、设备管理员等自定义设置,以满足审计需求

(3)身份认证

设备提供统一的认证接口,对用户进行认证,支持身份认证模式包括 动态口令、静态密码、硬件key 、生物特征等多种认证方式,设备具有灵活的定制接口,可以与其他第三方认证服务器之间结合;安全的认证模式,有效提高了认证的安全性和可靠性。

(4)资源授权

设备提供基于用户、目标设备、时间、协议类型IP、行为等要素实现细粒度的操作授权,最大限度保护用户资源的安全

(5)访问控制

设备支持对不同用户进行不同策略的制定,细粒度的访问控制能够最大限度的保护用户资源的安全,严防非法、越权访问事件的发生。

(6)操作审计

设备能够对字符串、图形、文件传输、数据库等全程操作行为审计;通过设备录像方式实时监控运维人员对操作系统、安全设备、网络设备、数据库等进行的各种操作,对违规行为进行事中控制。对终端指令信息能够进行精确搜索,进行录像精确定位。

2.4 目标价值

1、 目标

堡垒机的核心思路是逻辑上将人与目标设备分离,建立"人-〉主账号(堡垒机用户账号)-〉授权->从账号(目标设备账号)的模式;在这种模式下,基于身份标识,通过集中管控安全策略的账号管理、授权管理和审计,建立针对维护人员的"主账号-〉登录-〉访问操作-〉退出"的全过程完整审计管理,实现对各种运维加密/非加密、图形操作协议的命令级审计。

2、系统价值

堡垒机的作用主要体现在下述几个方面:

(1)企业角度

通过细粒度的安全管控策略,保证企业的服务器、网络设备、数据库、安全设备等安全可靠运行,降低人为安全风险,避免安全损失,保障企业效益。

(2)管理员角度

a)         所有运维账号的管理在一个平台上进行管理,账号管理更加简单有序;

b)        通过建立用户与账号的对应关系,确保用户拥有的权限是完成任务所需的最小权限;

c)         直观方便的监控各种访问行为,能够及时发现违规操作、权限滥用等。

d)        鉴于多账号同时使用超管进行的操作,便于实名制的认证和自然人的关联。

(3)普通用户角度

运维人员只需记忆一个账号和口令,一次登录,便可实现对其所维护的多台设备的访问,无须记忆多个账号和口令,提高了工作效率,降低工作复杂度。

3、开源软件jumpserver

3.1简介

Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。

3.2 支持操作系统

RedHat 、Centos、Debian、SUSE、Ubuntu、FreeBSD 

3.3 常用功能

精确记录操作命令

支持批量文件上传下载

支持主机搜索登录

支持批量命令执行(Ansible完成) 

支持Web Terminal连接主机 

支持Web端批量命令执行

支持录像回放

支持硬件信息如cpu,、内存等抓取

支持资产Excel导入导出

支持资产批量更改

支持系统用户的批量推送(Ansible实现) 

支持用户,主机,用户组,主机组,系统用户混合细颗粒授权

支持sudo管理

支持命令统计和命令搜索

支持上传下载文件审计

支持终止用户连接

支持各种文件搜索

3.4 快速安装介绍

测试推荐环境

CPU: 64位双核处理器

内存: 4G DDR3

数据库:mysql 版本大于等于 5.6 mariadb 版本大于等于 5.5.6

l  设置 selinux 和防火墙

firewall-cmd --zone=public --add-port=80/tcp --permanent  # nginx 端口

firewall-cmd --zone=public --add-port=2222/tcp --permanent  # 用户SSH登录端口 coco

firewall-cmd --reload  # 重新载入规则

setenforce 0

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

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

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

l  准备 Python3 和 Python 虚拟环境

yum -y install wget gcc epel-release git //安装依赖包

yum -y install python36 python36-devel

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install python36 python36-devel

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

cd /opt

python3.6 -m venv py3 //建立 Python 虚拟环境

source /opt/py3/bin/activate

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

(py3) [root@localhost py3]

l  安装 Jumpserver

项目提交较多 git clone 时较大, 可以选择去 Github 项目页面直接下载zip包。

cd /opt/

git clone https://github.com/jumpserver/jumpserver.git //下载或 Clone 项目

cd /opt/jumpserver/requirements

yum -y install $(cat rpm_requirements.txt)  //安装依赖 RPM 包

pip install --upgrade pip setuptools

pip install -r requirements.txt  //安装 Python 库依赖

# 如果下载速度很慢, 可以换国内源

pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/

pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

yum -y install redis

systemctl enable redis

systemctl start redis  //安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke

yum -y install mariadb mariadb-devel mariadb-server # centos7下安装的是mariadb

systemctl enable mariadb

systemctl start mariadb   //安装 MySQL

DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`  # 生成随机数据库密码

echo -e "33[31m 你的数据库密码是 $DB_PASSWORD 33[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;" //创建数据库 Jumpserver 并授权

cd /opt/jumpserver

cp config_example.yml config.yml  复制配置文件并修改

SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`  # 生成随机SECRET_KEY

echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc

BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`  # 生成随机BOOTSTRAP_TOKEN

echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc

sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml

sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml

sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml

sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml

sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml

sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml  //正则修改

echo -e "33[31m 你的SECRET_KEY是 $SECRET_KEY 33[0m"

echo -e "33[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN 33[0m"

cd /opt/jumpserver

/jms start all -d  # 后台运行使用 -d 参数./jms start all –d

 

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

l  安装 SSH Server 和 WebSocket Server: Coco

cd /opt

 source /opt/py3/bin/activate

git clone https://github.com/jumpserver/coco.git  //下载或 Clone 项目

cd /opt/coco/requirements

yum -y install $(cat rpm_requirements.txt)  //安装依赖

pip install -r requirements.txt

# 如果下载速度很慢, 可以换国内源

 pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

cd /opt/coco

cp config_example.yml config.yml   //修改配置文件

sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/coco/config.yml

sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /opt/coco/config.yml

l  安装 Web Terminal 前端: Luna

Luna 已改为纯前端, 需要 Nginx 来运行访问

访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包, 直接解压不需要编译

cd /opt

wget https://github.com/jumpserver/luna/releases/download/1.4.9/luna.tar.gz

如果网络有问题导致下载无法完成可以使用下面地址

 wget https://demo.jumpserver.org/download/luna/1.4.9/luna.tar.gz

tar xf luna.tar.gz  //解压 Luna chown -R root:root luna

l  安装 Windows 支持组件(如果不需要管理 windows 资产, 可以直接跳过这步)

mkdir /usr/local/lib/freerdp/

ln -s /usr/local/lib/freerdp /usr/lib64/freerdp

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

yum -y localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm  //安装依赖

yum install -y java-1.8.0-openjdk libtool

yum install -y cairo-devel libjpeg-turbo-devel libpng-devel uuid-devel

yum install -y ffmpeg-devel freerdp-devel freerdp-plugins pango-devel libssh2-devel libtelnet-devel libvncserver-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel ghostscript

cd /opt

git clone https://github.com/jumpserver/docker-guacamole.git

cd /opt/docker-guacamole/

tar -xf guacamole-server-0.9.14.tar.gz

cd guacamole-server-0.9.14

autoreconf -fi

./configure --with-init-dir=/etc/init.d

make && make install   //编译安装 guacamole 服务

cd ..

$m -rf guacamole-server-0.9.14

ldconfig

mkdir -p /config/guacamole /config/guacamole/lib /config/guacamole/extensions  # 创建 guacamole 目录

ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver-0.9.14.jar /config/guacamole/extensions/guacamole-auth-jumpserver-0.9.14.jar

ln -sf /opt/docker-guacamole/root/app/guacamole/guacamole.properties /config/guacamole/guacamole.properties  # guacamole 配置文件

 cd /config

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.39/bin/apache-tomcat-8.5.39.tar.gz

tar xf apache-tomcat-8.5.39.tar.gz

 rm -rf apache-tomcat-8.5.39.tar.gz

mv apache-tomcat-8.5.39 tomcat8

rm -rf /config/tomcat8/webapps/*

ln -sf /opt/docker-guacamole/guacamole-0.9.14.war /config/tomcat8/webapps/ROOT.war  # guacamole client

sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat8/conf/server.xml  # 修改默认端口为 8081

 sed -i 's/FINE/WARNING/g' /config/tomcat8/conf/logging.properties  # 修改 log 等级为 WARNING

cd /config

wget https://github.com/ibuler/ssh-forward/releases/download/v0.0.5/linux-amd64.tar.gz

# 如果网络有问题导致下载无法完成可以使用下面地址

$ wget https://demo.jumpserver.org/download/ssh-forward/v0.0.5/linux-amd64.tar.gz

tar xf linux-amd64.tar.gz -C /bin/

chmod +x /bin/ssh-forward

配置环境变量

export JUMPSERVER_SERVER=http://127.0.0.1:8080  # http://127.0.0.1:8080 指 jumpserver 访问地址

echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc

# BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN

export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN

echo "export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc

export JUMPSERVER_KEY_DIR=/config/guacamole/keys

echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc

export GUACAMOLE_HOME=/config/guacamole

echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc

#启动 Guacamole

/etc/init.d/guacd start

sh /config/tomcat8/bin/startup.sh

l  配置 Nginx 整合各组件

yum install yum-utils 

vi /etc/yum.repos.d/nginx.repo

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=1

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

$ yum install -y nginx  //安装 Nginx

$ rm -rf /etc/nginx/conf.d/default.conf

$ systemctl enable nginx

$ vi /etc/nginx/conf.d/jumpserver.conf

server {

    listen 80;  # 代理端口, 以后将通过此端口进行访问, 不再通过8080端口

    # server_name demo.jumpserver.org;  # 修改成你的域名或者注释掉

 

    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 /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";

        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 /coco/ {

        proxy_pass       http://localhost:5000/coco/;  # 如果coco安装在别的服务器, 请填写它的ip

        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/;  # 如果guacamole安装在别的服务器, 请填写它的ip

        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 / {

        proxy_pass http://localhost:8080;  # 如果jumpserver安装在别的服务器, 请填写它的ip

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

nginx -t   # 确保配置没有问题, 有问题请先解决

# CentOS 7 版本

systemctl start nginx

systemctl enable nginx

开始使用 Jumpserver

服务全部启动后, 访问 http://ip , 访问nginx代理的端口, 不要再通过8080端口访问。

4、服务简介

4.1 nginx简介

Nginx服务简介:Nginx 是一个高性能的HTTP和反向代理web服务器。Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。无缓存的反向代理加速,简单的负载均衡和容错。

4.2 Redis 简介

Redis:远程字典服务器(REmote DIctionary Server);

Redis 是一个高性能(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库;

Redis 三个特点

Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候,可以再次加载进行使用;

Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;

  Redis 支持数据的备份,即master-slave模式的数据备份;

原文地址:https://www.cnblogs.com/wangyyyy/p/14011405.html