jumpServer堡垒机笔记

堡垒机概念


堡垒机运维思想

  • 审计也只是事后的行为,审计能够发现问题以及责任人,但是无法防止问题的发生。
  • 只有实现了事先严格监控,才能够源头上解决服务器误操作的事故。
  • 堡垒机能够创建系统账号,该系统账号功能是属于角色区分的作用,但是也无法确认该账号的执行人。

堡垒机的作用

企业需要更新更好更安全的技术理念去管理服务器的运维操作,需要一种能够满足角色管理,角色授权,信息资源访问控制,操作记录和审计,系统变更和维护控制等等需求,且还能生成服务器资产统计报表等功能等一个IT堡垒机。

  1. 核心系统运维和安全审计管理。
  2. 过滤和拦截非法请求访问,恶意攻击,拒绝不合法命令,进行审计口监控,报警和责任追踪。
  3. 报警,记录,分析,处理。

堡垒机核心功能

  1. 单点登录功能
  2. 账号管理
  3. 身份认证
  4. 资源授权
  5. 访问控制
  6. 操作审计

堡垒机的应用场景

  1. 多个用户使用同一个账号
  2. 一个用户使用多个账户
  3. 缺少统一的权限管理平台,难以实现高颗粒度的命令权限控制
  4. 对于传统的网络设备无法对运维人员的远程连接命令进行加密,审计。

企业角度看堡垒机

通过更加细致的粒度对企业IT资产设备进行管理,保证企业的IT设备资产安全,可靠运行,降低人为操作的风险,避免风险性,保证企业的资源资金安全。


管理角度来看堡垒机

运维人员只需要记录堡垒机的账号密码,一次登录,即可快捷访问多个管理的设备,无需记忆多个账号密码,提升工作效率,切能够对于服务最大化的安全操作。


编译安装jumpServer堡垒机


安装依赖包

# 安装系统初始化所需要的包
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc openldap-devel gcc

# 安装jumpserver运行所需环境
yum install -y git python-pip gcc automake autoconf python-devel vim sshpass lrzsz readline-devel gettext

安装编译环境

# 安装编译环境
yum install -y cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool uuid-devel

# 可选依赖包
yum install -y freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel

安装视频录制插件

# 安装FFmpeg工具--用于堡垒机录像
## 安装epel源
yum install -y epel-release

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

## 安装ffmpeg包--用于屏幕录像或回放录像
yum install -y ffmpeg ffmpeg-devel

解压编译安装jumpServer

jumpServer社区版下载地址:https://community.fit2cloud.com/#/products/jumpserver/downloads

# 解压到/opt目录
tar -xf jumpserver-offline-installer-v2.28.8-amd64-7.tar.gz -C /opt

# cd到jumpServer目录
cd /opt/jumpserver-offline-installer-v2.28.8-amd64-7

修改jumpServer配置文件

# 根据需要修改配置文件模板, 如果不清楚用途可以跳过修改
cat config-example.txt

官方参考配置:https://docs.jumpserver.org/zh/master/install/setup_by_fast/#_6

# 以下设置如果为空系统会自动生成随机字符串填入
## 迁移请修改 SECRET_KEY 和 BOOTSTRAP_TOKEN 为原来的设置
## 完整参数文档 https://docs.jumpserver.org/zh/master/admin-guide/env/

## Docker 镜像配置
# DOCKER_IMAGE_MIRROR=1

## 安装配置
VOLUME_DIR=/opt/jumpserver
SECRET_KEY=
BOOTSTRAP_TOKEN=
LOG_LEVEL=ERROR

##  MySQL 配置, 如果使用外置数据库, 请输入正确的 MySQL 信息
DB_HOST=mysql
DB_PORT=3306
DB_USER=root
DB_PASSWORD=
DB_NAME=jumpserver

##  Redis 配置, 如果使用外置数据库, 请输入正确的 Redis 信息
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=

# JumpServer 容器使用的网段, 请勿与现有的网络冲突, 根据实际情况自行修改
DOCKER_SUBNET=192.168.250.0/24

## IPV6 设置, 容器是否开启 ipv6 nat, USE_IPV6=1 表示开启, 为 0 的情况下 DOCKER_SUBNET_IPV6 定义不生效
USE_IPV6=0
DOCKER_SUBNET_IPV6=fc00:1010:1111:200::/64

## 访问配置
HTTP_PORT=80
SSH_PORT=2222
RDP_PORT=3389
MAGNUS_PORTS=30000-30100

## HTTPS 配置, 参考 https://docs.jumpserver.org/zh/master/admin-guide/proxy/ 配置
# HTTPS_PORT=443
# SERVER_NAME=your_domain_name
# SSL_CERTIFICATE=your_cert
# SSL_CERTIFICATE_KEY=your_cert_key

## Nginx 文件上传大小
CLIENT_MAX_BODY_SIZE=4096m

## Task 配置, 是否启动 jms_celery 容器, 单节点必须开启
USE_TASK=1

# Core 配置, Session 定义, SESSION_COOKIE_AGE 表示闲置多少秒后 session 过期, SESSION_EXPIRE_AT_BROWSER_CLOSE=True 表示关闭浏览器即 session 过期
# SESSION_COOKIE_AGE=86400
SESSION_EXPIRE_AT_BROWSER_CLOSE=True

# Koko Lion XRDP 组件配置
CORE_HOST=http://core:8080
JUMPSERVER_ENABLE_FONT_SMOOTHING=True

## 终端使用宿主 HOSTNAME 标识
SERVER_HOSTNAME=${
    
    HOSTNAME}

# 额外的配置
CURRENT_VERSION=

配置数据库

https://docs.jumpserver.org/zh/master/install/setup_by_fast/#_3
image.png


安装mysq+redis

安装mysql:https://blog.csdn.net/omaidb/article/details/120082063
安装redis:https://blog.csdn.net/omaidb/article/details/120424937


初始化数据库

-- 创建运行jumpserver所需的用户信息库
create database jumpserver default charset 'utf8' collate 'utf8_bin';

-- 创建用户且设置密码
create user 'jumpserver'@'%' IDENTIFIED BY '密码'

-- 给该用户授予访问数据库的权限
grant all privileges on jumpserver.* to 'jumpserver'@'%' IDENTIFIED by '同上密码';

-- 刷新权限
flush privileges;

配置nginx

# 安装nginx
yum install -y nginx

# 删除nginx的默认配置
sed -i '38,58d' /etc/nginx/nginx.conf

nginx配置如下:

# 启动进程数,通常设置成和cpu的数量相等
worker_processes 1;

#工作模式及连接数上限
events {
    
    
    # 单个后台worker process进程的最大并发链接数
    worker_connections 1024;
}

server {
    
    

    # 监听80端口
    listen 80;
    # 文件上传大小限制--堡垒机录像及文件上传
    client_max_body_size 100m;

    # 设置UI部分的请求处理
    ## location 是请求的路由动作
    location /ui/ {
    
    
        # 尝试查找匹配的文件,如果找不到则返回根目录下的index.html
        try_files $uri / /index.html;
        # 设置别名,将请求映射到/opt/lina/目录下
        alias /opt/lina/;
    }

    # 设置Luna部分的请求处理
    location /luna/ {
    
    
        # 尝试查找匹配的文件,如果找不到则返回根目录下的index.html
        try_files $/uri / /index.html;
        # 设置别名,将请求映射到/opt/luna/目录下
        ## luna路径,如果修改安装目录,此处需修改
        alias /opt/luna/;
    }

    # 设置媒体文件路径的请求处理
    location /media/ {
    
    
        # 添加Content-Encoding头,启用gzip压缩
        add_header Content-Enconding gzip;
        # 设置根目录,将请求映射到/opt/jumpserver/data/目录下
        # 录像位置,如果修改安装目录,此处需要修改
        root /opt/jumpserver/data/;
    }

    # 设置静态资源路径的请求处理
    location /static/ {
    
    
        # 设置根目录,将请求映射到/opt/jumpserver/data/目录下
        # 静态资源,如果修改安装目录,此处需修改
        root /opt/jumpserver/data/;
    }

    # 设置Koko部分的请求处理
    location /koko/ {
    
    
        # 将请求代理到http://localhost:5000
        proxy_pass http://localhost:5000;
        # 禁用代理缓存
        proxy_buffering off;
        # 使用HTTP/1.1协议
        proxy_http_version 1.1;
        # 设置Upgrade头
        proxy_set_header Upgrade $http_upgrade;
        # 设置Connection头
        proxy_set_header Connection "Upgrade";
        # 设置X-Real-IP头
        proxy_set_header X-Real-IP $remote_addr;
        # 设置Host头
        proxy_set_header Host $host;
        # 设置X-Forwarded-For头
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 关闭访问日志记录
        access_log off;
    }

    # 设置Guacamole部分的请求处理
    location /guacamole/ {
    
    
        # 将请求代理到http://localhost:8081/
        proxy_pass http://localhost:8081/;
        # 禁用代理缓存
        proxy_buffering off;
        # 使用HTTP/1.1协议
        proxy_http_version 1.1;
        # 设置Upgrade头
        proxy_set_header Upgrade $http_upgrade;
        # 设置Connection头
        proxy_set_header Connection $http_connection;
        # 设置X-Real-IP头
        proxy_set_header X-Real-IP $remote_addr;
        # 设置Host头
        proxy_set_header Host $host;
        # 设置X-Forwarded-For头
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 关闭访问日志记录
        access_log off;
    }

    # 设置WebSocket部分的请求处理
    location /ws/ {
    
    
        # 设置X-Real-IP头
        proxy_set_header x-Real-IP $remote_addr;
        # 设置Host头
        proxy_set_header Host $host;
        # 设置X-Forwarded-For头
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 将请求代理到http://localhost:8070
        proxy_pass http:localhost:8070;
        # 使用HTTP/1.1协议
        proxy_http_version 1.1;
        # 禁用代理缓存
        proxy_buffering off;
        # 设置Upgrade头
        proxy_set_header Upgrade $http_upgrade;
        # 设置Connection头
        proxy_set_header Connection "upgrade";
    }

    # 设置API请求处理
    location /api/ {
    
    
        # 将请求代理到http://localhost:8080
        proxy_pass http://localhost:8080;
        # 设置X-Real-IP头
        proxy_set_header X-Real-IP $remote_addr;
        # 设置Host头
        proxy_set_header Host $host;
        # 设置X-Forwarded-For头
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 设置core请求处理
    location /core/ {
    
    
        # 将请求代理到http:localhost:8080
        proxy_pass http:localhost:8080;
        # 设置X-Real-IP头
        proxy_set_header X-Real-IP $remote_addr
        # 设置Host头
        proxy_set_header Host $host;
        # 设置X-Forwarded-For头
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 设置默认请求处理
    location / {
    
    
        # 重写URL,将所有请求重定向到/ui/目录下
        rewrite ^/(.*)$ /ui/$1 last;
    }
}

启动堡垒机

# 1. 启动数据库mysql,redis
systemctl enable --now mysqld redis

# 2. 激活python虚拟环境,启动jms
jms start -d

# 3. 启动koko程序
koko -d

# 4. 启动guacd
guacd start

# 5. 启动tomcat
bash /opt/tomcat/bin/startup.sh

# 5. 启动web服务器
nginx

给目标机器添加防火墙规则

# 只允许jumpServer堡垒机的ip可以ssh登录,其他机器拒绝
## 先允许堡垒机,再拒绝所有机器,顺序不能搞反
## 一般都在安全组中配置,而不是在iptables中配置
## 1.先允许指定机器连接ssh---优先级最高,顺序不能搞饭
iptables -I INPUT -s 堡垒机ip -p tcp --dport 22 -j ACCEPT
## 2.拒绝所有机器连接ssh
iptables -A INPUT -p tcp --dport 22 -j REJECT

猜你喜欢

转载自blog.csdn.net/omaidb/article/details/131941399