ITPub博客

首页 > IT基础架构 > 数据安全 > Linux部署开源堡垒机JumpServer详细教程

Linux部署开源堡垒机JumpServer详细教程

原创 数据安全 作者:dba_sam 时间:2021-08-05 23:02:49 1 删除 编辑

堡垒机,也叫做运维安全审计系统,它的核心功能是 4A:

  1. 身份验证 Authentication
  2. 账号管理 Account
  3. 授权控制 Authorization
  4. 安全审计 Audit

简单总结一句话:堡垒机是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。

本文部署的开源堡垒机,Jumpserver 是全球首款完全开源、符合 4A 规范(包含认证Authentication 、授权 Authorization、账号 Accounting 和审计 Auditing)的运维安全审计系统,采用了分布式架构设计,支持多云环境并可灵活扩展。资产管理方面, Jumpserver 无并发和资产数量限制,支持水平扩容。 提供体验极佳的 Web Terminal ,实现基于 Web 的文件传输,并且支持用户将运维审计录像保存在云端(例如 AWS S3 、阿里云 OSS 、 ElasticSearch 等)。


下面将近入部署的详细操作

操作系统安装

最小化安装CentOS7.8操作系统,操作指南见我发布的文章《 CentOS 7.8操作系统安装(用于生产)


准备Mysql数据库

数据库安装部署见我发布的文章《

centos7 编译安装mysql 5.7.28图文详细教程 》,建议安装在独立的服务器上。

创建数据库

数据库服务器端操作

mysql -u root -p   #连接到mysql

create database jumpserver default charset 'utf8';

create user 'jumpserver'@'%' identified by 'jumpserver123';

grant all on jumpserver.* to 'jumpserver'@'%';

flush privileges;

exit

部署Redis服务

部署安装文档见我发布的文章《 Centos7编译安装Redis 6.2.3 详细教程》,建议单独部署在独立服务器上。


安装及配置

卸载旧版本

较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine -y


安装 Docker Engine-Community

使用 Docker 仓库进行安装

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

#设置仓库

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2

yum install -y yum-utils device-mapper-persistent-data lvm2



#使用以下命令来设置稳定的仓库( 只选持一个即可

使用官方源地址(比较慢)

yum-config-manager \
    --add-repo \
     

 

阿里云源

yum-config-manager \
    --add-repo \
   

 

清华大学源

yum-config-manager \
    --add-repo \
   

 

# 这里我选择用官方的源

yum-config-manager \
    --add-repo \
   



#安装 Docker Engine-Community

安装最新版本的 Docker Engine-Community 和 containerd

yum install -y docker-ce docker-ce-cli containerd.io


配置docker上网代理

注意:服务器需要使用代理上网时,才需要配置

mkdir -p /etc/systemd/system/docker.service.d

cd /etc/systemd/system/docker.service.d

vi http-proxy.conf

#添加以下内容,保存配置

[Service]

Environment="HTTP_PROXY=

Environment="HTTPS_PROXY=

Environment="NO_PROXY=localhost,127.0.0.1"

启动docker

systemctl enable docker

systemctl start docker


下载jumpserver

此文档部署的版本为2.10.3版本

root用户操作

cd /opt

wget

tar -xf jumpserver-installer-v2.10.3.tar.gz

cd jumpserver-installer-v2.10.3


安装jumpserver

root用户操作

./jmsctl.sh install


数据库配置外部mysql,配置正确的IP、端口、数据库名、用户名及密码

配置外部Redis,配置正确的IP、端口、密码


配置jumpserver

root用户操作

cd /opt/jumpserver/config/

vi config.txt

修改配置内容 HTTP_PORT的端口为8080,如下所示:


配置

安装nginx

配置nginx安装源

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

添加以下内容,并保存

[nginx-stable]

name=nginx stable repo

baseurl=

gpgcheck=1

enabled=1

gpgkey=

module_hotfixes=true

 

[nginx-mainline]

name=nginx mainline repo

baseurl=

gpgcheck=1

enabled=1

gpgkey=

module_hotfixes=true

yum repolist

安装nginx

yum install nginx -y

设置开机自启

systemctl enable nginx

反向代理设置

mv /etc/nginx/conf.d/default.conf /root

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

添加以下内容,并保存

server {

    listen 80;

    return 301

}

server {

    listen 443 ssl;

    ssl_certificate      cert/server.crt;  # 自行设置证书

    ssl_certificate_key  cert/server.key;  # 自行设置证书

    ssl_session_timeout 1d;

    ssl_session_cache shared:MozSSL:10m;

    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    ssl_prefer_server_ciphers off;

    ssl_protocols TLSv1.1 TLSv1.2;

    add_header Strict-Transport-Security "max-age=63072000" always;

 

    client_max_body_size 5000m;  # 录像及文件上传大小限制

    location / {

        # 这里的 ip 是后端 JumpServer nginx 的 ip

        proxy_pass

        proxy_http_version 1.1;

        proxy_buffering off;

        proxy_request_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;

    }

}

复制证书到/etc/nginx/cert 目录下(如果cert目录不存在,手动创建)

cd /etc/nginx

mkdir cert

cp -rf /opt/jumpserver/config/nginx/cert/* /etc/nginx/cert/

启动nginx

systemctl start nginx

配置防火墙

firewall-cmd --permanent --zone=public --add-port=80/tcp

firewall-cmd --permanent --zone=public --add-port=443/tcp

firewall-cmd --reload

启动jumpserver

root用户执行

cd /opt/jumpserver-installer-v2.10.3

./jmsctl.sh start


规则设置

本部署文档,没有提及关闭SELINUX或设置SELINUX 模式为Permissive,如果关闭了SELINUX或模式为Permissive,可以不操作这个设置。

SELINUX 模式为Enforcing时,nginx开启反向代理到本机nginx其它端口时,会被阻止,如下所示:

浏览器打开网址 https://192.168.56.112  ( 注意,这个地址请换成你实际的服务器地址

登录服务器,查看Nginx错误日志

grep Permission /var/log/nginx/error.log

查看SELinux的审计日志

grep denied /var/log/audit/audit.log

初步分析SELinux的审计日志,可以看到nginx进程的SELinux scontext type为httpd_t,而被请求对象8080的SELinux tcontext type为http_cache_port_t,两者不匹配,且没有从属关系。

借助于audit2why工具,执行grep 1624599459.111:447 /var/log/audit/audit.log | audit2why命令( 标红部分是日志中实际存在的audit值),让audit2why帮助我们找到解决办法。查看该命令的输出,可以看到我们的初步分析是正确的,而其给出的建议如下:

所以需要进行以下设置:(或者把SELINUX 模式改成Permissive)

getsebool httpd_can_network_connect

setsebool -P httpd_can_network_connect on

setsebool -P httpd_can_network_connect 1

重启nginx服务

systemctl restart nginx

 

重启后,重新刷新网页

登录jumpserver

浏览器打开网址 https://192.168.56.112

输入用户:admin

密码:admin

登录系统,并按系统提示更改密码

关闭jumpserver

root用户操作

cd /opt/jumpserver-installer-v2.10.3

./jmsctl.sh close  或 ./jmsctl stop (两者的区别,后者会删除创建的docker容器,下次启动时,重新创建)


--------------------------END-----------------------------------


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/70000068/viewspace-2785538/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
本人从事oracle、mysql、postgresql等数据库管理多年,具备丰富的实战经验,同时维护大型企业的Linux操作系统、vmware虚拟化、openstack云计算平台,具有部署、优化、故障处理等经验。

注册时间:2021-05-16

  • 博文量
    49
  • 访问量
    25822