jumpserver跳板機

1.1跳板機

跳板機就是一臺服務,開發或者運維人員在維護的過程當中首先要統一登陸到這臺機器上,如何在登陸到目標設備進行維護或操做html

跳板機的缺點前端

1.沒有實現對運維人員的行爲控制和審計python

服務器出現了問題,沒法追責mysql

1.2 堡壘機介紹

在一個特定網絡環境下,爲了保障網絡和數據不受外界入侵和破壞,而運用各類技術手段實時收集和監控網咯環境中每個組成部分的系統狀態、安全事件、網絡活動,以便集中報警、及時處理及審計定責。nginx

咱們又把堡壘機叫作跳板機,簡易的跳板機功能簡單,主要核心功能時遠程登陸服務器和日誌審計。git

比較優秀的開源軟件jumpserver,認證、受權、審計、自動化、資產管理github

商業堡壘機:齊治,CitrixXenAppweb

1.3 搭建簡易堡壘機

具有堡壘機的條件時,該機器有公網和私網IP,其中私網和機房其餘機器互通redis

設計堡壘機思路sql

  • 跳板機安全設置(iptables端口限制、登陸限制sshd_config)

  • 用戶、目錄權限限制

1.4Jumpserver概述

Jumpserver是一款使用python,Django開發的開源跳板機系統,爲了互聯網企業提供了雙因子認證,受權,審計自動化運維等功能。

官方地址:http://www.jumpserver.org/

1.5 jumpserver能夠實現的功能

1.6搭建Junmpserver跳板機/堡壘機

組件說明

  • Jumpserver 爲管理後臺, 管理員能夠經過 Web 頁面進行資產管理、用戶管理、資產受權等操做, 用戶能夠經過 Web 頁面進行資產登陸, 文件管理等操做
  • koko 爲 SSH Server 和 Web Terminal Server 。用戶可使用本身的帳戶經過 SSH 或者 Web Terminal 訪問 SSH 協議和 Telnet 協議資產
  • Coco 爲 SSH Server 和 Web Terminal Server 。用戶可使用本身的帳戶經過 SSH 或者 Web Terminal 訪問 SSH 協議和 Telnet 協議資產
  • Luna 爲 Web Terminal Server 前端頁面, 用戶使用 Web Terminal 方式登陸所須要的組件
  • Guacamole 爲 RDP 協議和 VNC 協議資產組件, 用戶能夠經過 Web Terminal 來鏈接 RDP 協議和 VNC 協議資產 (暫時只能經過 Web Terminal 來訪問)

端口說明

  • Jumpserver 默認端口爲 8080/tcp 配置文件 jumpserver/config.yml
  • koko 默認 SSH 端口爲 2222/tcp, 默認 Web Terminal 端口爲 5000/tcp 配置文件在 koko/config.yml
  • coco 默認 SSH 端口爲 2222/tcp, 默認 Web Terminal 端口爲 5000/tcp 配置文件在coco/config.yml
  • Guacamole 默認端口爲 8081/tcp, 配置文件 /config/tomcat9/conf/server.xml
  • Nginx 默認端口爲 80/tcp
  • Redis 默認端口爲 6379/tcp
  • Mysql 默認端口爲 3306/tcp

服務器環境

[root@oldboyedu nginx]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
#jumpserver版本
jumpserver:1.5.2

第一個歷程:安裝依賴關係

[root@oldboyedu ~]# yum -y install wget gcc epel-release git

第二個歷程:安裝緩存數據庫(redis)

[root@oldboyedu ~]# yum -y install redis
[root@oldboyedu ~]# systemctl start redis
[root@oldboyedu opt]# systemctl enable redis

第三個歷程:安裝mysql數據庫

[root@oldboyedu ~]# yum -y install mariadb mariadb-devel mariadb-server
[root@oldboyedu ~]# systemctl start mariadb
[root@zabbix ~]# systemctl enable mariadb

第四個歷程:建立數據庫Jumpserver而且受權

[root@oldboyedu ~]# mysql
MariaDB [(none)]> create database jumpserver default charset 'utf8';
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'aaa123456';
MariaDB [(none)]> FLUSH PRIVILEGES;

第五個歷程:安裝python

編譯安裝

  • 安裝依賴包
# yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
  • 編譯安裝
# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
# tar xvf Python-3.6.1.tar.xz  && cd Python-3.6.1
# ./configure && make && make install

yum安裝

[root@oldboyedu ~]# yum -y install python36 python-devel
[root@oldboyedu ~]# cd /opt/
# 配置並載入 Python3 虛擬環境
[root@oldboyedu opt]# python3.6 -m venv py3
[root@oldboyedu opt]# source /opt/py3/bin/activate
(py3) [root@oldboyedu opt]# 
 # 退出虛擬環境可使用 deactivate 命令

第六個歷程:下載jumpserver

(py3) [root@oldboyedu opt]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
(py3) [root@oldboyedu jumpserver]# cd /opt/jumpserver/
(py3) [root@oldboyedu jumpserver]# 
#切換jumpserver主版本
(py3) [root@oldboyedu jumpserver]# git checkout master
已經位於 'master'
(py3) [root@oldboyedu jumpserver]#

第七個歷程:安裝jumpserver依賴包

(py3) [root@oldboyedu jumpserver]# cd /opt/jumpserver/requirements/
(py3) [root@oldboyedu requirements]# yum -y install $(cat rpm_requirements.txt)

第八個歷程:安裝jumpserver的python庫依賴

(py3) [root@oldboyedu requirements]# pip install --upgrade pip setuptools
(py3) [root@oldboyedu requirements]# pip install -r requirements.txt -i https://pypi.douban.com/simple/

第九個歷程:修改Jumpserver配置文件

(py3) [root@oldboyedu jumpserver]# cp config_example.yml config.yml
(py3) [root@oldboyedu jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: aaa123456/g" /opt/jumpserver/config.yml
(py3) [root@oldboyedu jumpserver]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: aaa123456/g" /opt/jumpserver/config.yml
(py3) [root@oldboyedu jumpserver]# sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
(py3) [root@oldboyedu jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
(py3) [root@oldboyedu jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
(py3) [root@oldboyedu jumpserver]# 
(py3) [root@oldboyedu jumpserver]# sed -i "s/DB_PASSWORD: /DB_PASSWORD: aaa123456/g" /opt/jumpserver/config.yml
(py3) [root@oldboyedu jumpserver]# 
(py3) [root@oldboyedu jumpserver]# cat config.yml 
# SECURITY WARNING: keep the secret key used in production secret!
# 加密祕鑰 生產環境中請修改成隨機字符串,請勿外泄, 可以使用命令生成 
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
SECRET_KEY: aaa123456

# SECURITY WARNING: keep the bootstrap token used in production secret!
# 預共享Token coco和guacamole用來註冊服務帳號,不在使用原來的註冊接受機制
BOOTSTRAP_TOKEN: aaa123456

# Development env open this, when error occur display the full process track, Production disable it
# DEBUG 模式 開啓DEBUG後遇到錯誤時能夠看到更多日誌
DEBUG: false

# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/
# 日誌級別
LOG_LEVEL: ERROR
# LOG_DIR: 

# Session expiration setting, Default 24 hour, Also set expired on on browser close
# 瀏覽器Session過時時間,默認24小時, 也能夠設置瀏覽器關閉則過時
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true

# Database setting, Support sqlite3, mysql, postgres ....
# 數據庫設置
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases

# SQLite setting:
# 使用單文件sqlite數據庫
# DB_ENGINE: sqlite3
# DB_NAME: 

# MySQL or postgres setting like:
# 使用Mysql做爲數據庫
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: aaa123456
DB_NAME: jumpserver

# When Django start it will bind this host and port
# ./manage.py runserver 127.0.0.1:8080
# 運行時綁定端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080

# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
# REDIS_PASSWORD: 
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4

# Use OpenID authorization
# 使用OpenID 來進行認證設置
# BASE_SITE_URL: http://localhost:8080
# AUTH_OPENID: false  # True or False
# AUTH_OPENID_SERVER_URL: https://openid-auth-server.com/
# AUTH_OPENID_REALM_NAME: realm-name
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret
# AUTH_OPENID_IGNORE_SSL_VERIFICATION: True
# AUTH_OPENID_SHARE_SESSION: False
#
# Use Radius authorization
# 使用Radius來認證
# AUTH_RADIUS: false
# RADIUS_SERVER: localhost
# RADIUS_PORT: 1812
# RADIUS_SECRET: 


# OTP settings
# OTP/MFA 配置
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
(py3) [root@oldboyedu jumpserver]# 
(py3) [root@oldboyedu jumpserver]# ./jms start all

第十個歷程:下載coco

[root@oldboyedu ~]# cd /opt/
(py3) [root@oldboyedu opt]# git clone https://github.com/jumpserver/coco.git

第十一個歷程:安裝coco依賴包

(py3) [root@oldboyedu coco]# cd /opt/coco/requirements/
(py3) [root@oldboyedu requirements]# yum -y install $(cat rpm_requirements.txt)

第十二個歷程:安裝coco的python依賴包

(py3) [root@oldboyedu requirements]# pip install -r requirements.txt -i https://pypi.douban.com/simple/

第十三個歷程:修改coco配置文件

(py3) [root@oldboyedu opt]# cd coco/
(py3) [root@oldboyedu coco]# cp config_example.yml config.yml 
(py3) [root@oldboyedu coco]# sed -i 's/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: aaa123456/g' config.yml
(py3) [root@oldboyedu coco]# cat config.yml 
# 項目名稱, 會用來向Jumpserver註冊, 識別而已, 不能重複
# NAME: {{ Hostname }}

# Jumpserver項目的url, api請求註冊會使用
CORE_HOST: http://127.0.0.1:8080

# Bootstrap Token, 預共享祕鑰, 用來註冊coco使用的service account和terminal
# 請和jumpserver 配置文件中保持一致,註冊完成後能夠刪除
BOOTSTRAP_TOKEN: aaa123456

# 啓動時綁定的ip, 默認 0.0.0.0
# BIND_HOST: 0.0.0.0

# 監聽的SSH端口號, 默認2222
# SSHD_PORT: 2222

# 監聽的HTTP/WS端口號,默認5000
# HTTPD_PORT: 5000

# 項目使用的ACCESS KEY, 默認會註冊,並保存到 ACCESS_KEY_STORE中,
# 若是有需求, 能夠寫到配置文件中, 格式 access_key_id:access_key_secret
# ACCESS_KEY: null

# ACCESS KEY 保存的地址, 默認註冊後會保存到該文件中
# ACCESS_KEY_FILE: data/keys/.access_key

# 加密密鑰
# SECRET_KEY: null

# 設置日誌級別 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
# LOG_LEVEL: INFO

# 日誌存放的目錄
# LOG_DIR: logs

# SSH白名單
# ALLOW_SSH_USER: all

# SSH黑名單, 若是用戶同時在白名單和黑名單,黑名單優先生效
# BLOCK_SSH_USER:
#   -

# 和Jumpserver 保持心跳時間間隔
# HEARTBEAT_INTERVAL: 5

# Admin的名字,出問題會提示給用戶
# ADMINS: ''

# SSH鏈接超時時間 (default 15 seconds)
# SSH_TIMEOUT: 15

# 語言 [en,zh]
# LANGUAGE_CODE: zh

# SFTP的根目錄, 可選 /tmp, Home其餘自定義目錄
# SFTP_ROOT: /tmp

# SFTP是否顯示隱藏文件
# SFTP_SHOW_HIDDEN_FILE: false

# 是否複用和用戶後端資產已創建的鏈接(用戶不會複用其餘用戶的鏈接)
# REUSE_CONNECTION: true
(py3) [root@oldboyedu coco]# 
(py3) [root@oldboyedu coco]# ./cocod start

第十四個歷程:下載Luna

(py3) [root@oldboyedu opt]# wget https://demo.jumpserver.org/download/luna/1.5.2/luna.tar.gz
(py3) [root@oldboyedu opt]# tar xf luna.tar.gz 
(py3) [root@oldboyedu opt]# chown -R root.root luna.tar.gz 
(py3) [root@oldboyedu opt]#

第十五個歷程:配置Nginx整合各組件

(py3) [root@oldboyedu opt]# cd /etc/nginx/
(py3) [root@oldboyedu nginx]# 
(py3) [root@oldboyedu nginx]# mkdir jumpserver
(py3) [root@oldboyedu nginx]# cat jumpserver/jumpserver.conf 
server {
    listen 80;

    client_max_body_size 100m; 

    location /luna/ {
        try_files $uri / /index.html;
        alias /opt/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/;
        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/;
        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/;
        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;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
(py3) [root@oldboyedu nginx]# 

(py3) [root@oldboyedu nginx]# grep -Ev '#|^$' nginx.conf.default >nginx.conf
(py3) [root@oldboyedu nginx]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    include   /etc/nginx/jumpserver/jumpserver.conf;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
}
(py3) [root@oldboyedu nginx]# 
(py3) [root@oldboyedu nginx]# systemctl restart nginx

重啓nginx服務在瀏覽器輸入:http://10.0.1.201

用戶名:admin 
密碼:admin

相關文章
相關標籤/搜索