赞
踩
堡垒机,也叫做运维安全审计系统,它的核心功能是 4A:
简单总结一句话:堡垒机是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。
本文部署的开源堡垒机,Jumpserver 是全球首款完全开源、符合 4A 规范(包含认证Authentication 、授权 Authorization、账号 Accounting 和审计 Auditing)的运维安全审计系统,采用了分布式架构设计,支持多云环境并可灵活扩展。资产管理方面, Jumpserver 无并发和资产数量限制,支持水平扩容。 提供体验极佳的 Web Terminal ,实现基于 Web 的文件传输,并且支持用户将运维审计录像保存在云端(例如 AWS S3 、阿里云 OSS 、 ElasticSearch 等)。
下面将近入部署的详细操作
最小化安装CentOS7.8操作系统,操作指南见我发布的文章《CentOS 7.8操作系统安装(用于生产)》
数据库安装部署见我发布的文章《
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
部署安装文档见我发布的文章《 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 仓库进行安装
在新主机上首次安装 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 \
https://download.docker.com/linux/centos/docker-ce.repo
阿里云源
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清华大学源
yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
#这里我选择用官方的源
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#安装 Docker Engine-Community
安装最新版本的 Docker Engine-Community 和 containerd
yum install -y docker-ce docker-ce-cli containerd.io
注意:服务器需要使用代理上网时,才需要配置
mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
vi http-proxy.conf
#添加以下内容,保存配置
[Service]
Environment="HTTP_PROXY=http://172.23.13.20:8320"
Environment="HTTPS_PROXY=http://172.23.13.20:8320"
Environment="NO_PROXY=localhost,127.0.0.1"
systemctl enable docker
systemctl start docker
此文档部署的版本为2.10.3版本
root用户操作
cd /opt
wget https://github.com/jumpserver/installer/releases/download/v2.10.3/jumpserver-installer-v2.10.3.tar.gz
tar -xf jumpserver-installer-v2.10.3.tar.gz
cd jumpserver-installer-v2.10.3
root用户操作
./jmsctl.sh install
数据库配置外部mysql,配置正确的IP、端口、数据库名、用户名及密码
配置外部Redis,配置正确的IP、端口、密码
root用户操作
cd /opt/jumpserver/config/
vi config.txt
修改配置内容 HTTP_PORT的端口为8080,如下所示:
配置nginx安装源
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
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
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 https://$host$request_uri;
}
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 http://localhost:8080;
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
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
重启后,重新刷新网页
浏览器打开网址 https://192.168.56.112
输入用户:admin
密码:admin
登录系统,并按系统提示更改密码
root用户操作
cd /opt/jumpserver-installer-v2.10.3
./jmsctl.sh close 或 ./jmsctl stop (两者的区别,后者会删除创建的docker容器,下次启动时,重新创建)
-----------------------------------------END--------------------------------------------------
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。