JumpServer 部署架構圖
JumpServer 功能架構圖
- JumpServer 是廣受歡迎的開源堡壘機,是符合 4A 規範的專業運維安全審計系統。
- JumpServer 使用 Python 開發,配備了業界領先的 Web Terminal 方案,互動介面美觀、使用者體驗好。
- JumpServer 採納分散式架構,支援多機房跨區域部署,支援橫向擴充套件,無資產數量及併發限制
為什麼需要跳板機,堡壘機?
其實運維工作,出現各種問題是在所難免的,不僅要有很好的分析處理能力,而且還要避免問題再次發生。
要清楚認識到出現問題的真實原因:
- 沒有規範管理,人與伺服器之間的界限不清晰;
- 沒有實名機制,登入伺服器前沒有實名驗證;
- 沒有密碼託管,伺服器的密碼太多,很難做到定期修改,自己保管怕丟失;
- 沒有操作預警,對高危、敏感的操作無法做到事前防禦;
- 沒有傳輸控制,對重要伺服器無法控制檔案傳輸;
- 沒有回溯過程,不能完整還原運維過程;
跳板機概述
- 跳板機屬於內控堡壘機範疇,是一種用於單點登入的主機應用系統。跳板機就是一臺伺服器,維護人員在維護過程中,首先要統一登入到這臺伺服器上,然後從這臺伺服器再登入到目標裝置進行維護。但跳板機並沒有實現對運維人員操作行為的控制和審計,此外,跳板機存在嚴重的安全風險,一旦跳板機系統被攻入,則將後端資源風險完全暴露無遺。
- 跳板機優缺點
- 優勢:集中式進行管理
- 缺點:沒有實現對運維人員操作行為的控制與審計,使用跳板機的過程中還是會出現誤操作,違規操作等導致的事故,一旦出現操作事故很難定位到原因和責任人。
堡壘機概述
- 堡壘機的理念起於跳板機,人們逐漸認識到跳板機的不足,需要更新,更好的安全技術理念來實現運維操作管理,需要一種能滿足角色管理與授權審批,資訊資源訪問控制,操作記錄和審計,系統變更和維護控制要求,並生成一些統計比報表配合管理規範來不斷提升IT內控的合規性的產品。結合了跳板機的優點堡壘機應運而生,它有效地降低了運維操作風險,使得運維操作管理變得更簡單,更安全。
- 堡壘機作用
- 核心系統運維和安全審計管控;
- 過濾和攔截非法訪問,惡意攻擊,阻斷不合法命令,審計監控,報警,責任追蹤;
- 報警,記錄,分析,處理;
堡壘機核心功能
- 單點登入功能
支援對X11、Linux、Unix、資料庫、網路裝置、安全裝置等一系列授權賬號進行密碼的自動化週期更改,簡化密碼管理,讓使用者無需記憶眾多系統密碼,即可實現自動登入目標裝置,便捷安全;
- 賬號管理
裝置支援統一賬戶管理策略,能夠實現對所有伺服器、網路裝置、安全裝置等賬號進行集中管理,完成對賬號整個生命週期的監控,並且可以對裝置進行特殊角設定,如:審計巡檢員、運維操作員、裝置管理員等自定義,以滿足審計需求;
- 身份認證
裝置提供統一的認證介面,對使用者進行認證,支援身份認證模式包括動態口令、靜態密碼、硬體key、生物特徵等多種認證方式,裝置具有靈活的定製介面,可以與其他第三方認證伺服器直接結合;
安全的認證模式,有效提高了認證的安全性和可靠性;
- 資源授權
裝置提供基於使用者、目標裝置、時間、協議型別IP、行為等要素實現細粒度的操作授權,最大限度保護使用者資源的安全;
- 訪問控制
裝置支援對不同使用者進行不同策略的制定,細粒度的訪問控制能夠最大限度的保護使用者資源的安全,嚴防非法、越權訪問事件的發生;
- 操作審計
裝置能夠對字串、圖形、檔案傳輸、資料庫等安全操作進行行為審計;透過裝置錄影方式監控運維人員對作業系統、安全裝置、網路裝置、資料庫等進行的各種操作,對違規行為進行事中控制;對終端指令資訊能夠進行精確搜尋,進行錄影精確定位;
堡壘機應用場景
- 多個使用者使用同一賬號
多出現在同一工作組中,由於工作需要,同時系統管理員賬號唯一,因此只能多使用者共享同一賬號;如果發生安全事故,不僅難以定位賬號的實際使用者和責任人,而且無法對賬號的使用範圍進行有效控制,存在較大的安全風險和隱患;
- 一個使用者使用多個賬號
目前一個維護人員使用多個賬號時較為普遍的情況,使用者需要記憶多套口令同時在多套主機系統、網路裝置之間切換,降低工作效率,增加工作複雜度;
- 缺少統一的許可權管理平臺,難以實現更細粒度的命令許可權控制
維護人員的許可權大多是粗放管理,無基於最小許可權分配原則的使用者許可權管理,難以實現更細粒度的命令許可權控制,系統安全性無法充分保證;
- 無法制定統一的訪問審計策略,審計粒度粗。
各個網路裝置、主機系統、資料庫是分別單獨審計記錄訪問行為,由於沒有統一審計策略,而且各系統自身審計日誌內容深淺不一,難以及時透過系統自身審計發現違規操作行為和追查取證;
- 傳統的網路安全審計系統無法對維護人員經常使用的SSH、RDP等加密、圖形操作協議進行內容審計。
準備環境
[root@JumpServer ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@JumpServer ~]# uname -r 3.10.0-1160.el7.x86_64 [root@JumpServer ~]# setenforce 0 [root@JumpServer ~]# systemctl stop friewalld [root@JumpServer ~]# hostname -I 172.16.70.181 [root@JumpServer ~]# yum update -y [root@JumpServer ~]# yum install wget curl tar gettext iptables vim net-tools lrzsz tree -y
搭建Jumpserver
[root@JumpServer ~]# cd /opt [root@JumpServer opt]# wget https://github.com/jumpserver/installer/releases/download/v2.28.6/jumpserver-installer-v2.28.6.tar.gz [root@JumpServer opt]# tar -xf jumpserver-installer-v2.28.6.tar.gz [root@JumpServer opt]# mv jumpserver-installer-v2.28.6 jumpserver [root@JumpServer opt]# ls jumpserver compose config-example.txt config_init jmsctl.sh LICENSE locale quick_start.sh README.md scripts static.env utils [root@JumpServer opt]# tree jumpserver jumpserver ├── compose │ ├── docker-compose-app.yml │ ├── docker-compose-db-tls.yml │ ├── docker-compose-es.yml │ ├── docker-compose-init-db.yml │ ├── docker-compose-init-tls.yml │ ├── docker-compose-init-xpack.yml │ ├── docker-compose-lb.yml │ ├── docker-compose-mariadb.yml │ ├── docker-compose-minio.yml │ ├── docker-compose-mysql.yml │ ├── docker-compose-network_ipv6.yml │ ├── docker-compose-network.yml │ ├── docker-compose-redis.yml │ ├── docker-compose-task.yml │ └── docker-compose-xpack.yml ├── config-example.txt ├── config_init │ ├── core │ │ └── config.yml │ ├── koko │ │ └── config.yml │ ├── mariadb │ │ └── mariadb.cnf │ ├── mysql │ │ └── my.cnf │ ├── nginx │ │ ├── cert │ │ │ ├── server.crt │ │ │ └── server.key │ │ └── lb_http_server.conf │ ├── README.md │ └── redis │ └── redis.conf ├── jmsctl.sh ├── LICENSE ├── locale │ ├── en │ │ └── LC_MESSAGES │ │ ├── jumpserver-installer.mo │ │ └── jumpserver-installer.po │ └── zh_CN │ └── LC_MESSAGES │ ├── jumpserver-installer.mo │ └── jumpserver-installer.po ├── quick_start.sh ├── README.md ├── scripts │ ├── 0_prepare.sh │ ├── 1_config_jumpserver.sh │ ├── 2_install_docker.sh │ ├── 3_load_images.sh │ ├── 4_install_jumpserver.sh │ ├── 5_db_backup.sh │ ├── 6_db_restore.sh │ ├── 7_upgrade.sh │ ├── 8_uninstall.sh │ ├── const.sh │ ├── docker.service │ └── utils.sh ├── static.env └── utils ├── build.sh └── messages.sh 16 directories, 48 files
- 根據需要修改配置檔案模板, 如果不瞭解用途可以跳過修改此配置檔案, 系統會自動填入。
[root@JumpServer opt]# ls jumpserver/config-example.txt jumpserver/config-example.txt
執行安裝
[root@JumpServer opt]# bash jumpserver/jmsctl.sh install ██╗██╗ ██╗███╗ ███╗██████╗ ███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗ ██║██║ ██║████╗ ████║██╔══██╗██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗ ██║██║ ██║██╔████╔██║██████╔╝███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝ ██ ██║██║ ██║██║╚██╔╝██║██╔═══╝ ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗ ╚█████╔╝╚██████╔╝██║ ╚═╝ ██║██║ ███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║ ╚════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝ Version: v2.28.6 1. Check Configuration File Path to Configuration file: /opt/jumpserver/config /opt/jumpserver/config/config.txt [ √ ] /opt/jumpserver/config/nginx/cert/server.crt [ √ ] /opt/jumpserver/config/nginx/cert/server.key [ √ ] complete >>> Install and Configure Docker 1. Install Docker Starting to download Docker engine ... Starting to download Docker Compose binary ... complete 2. Configure Docker Do you want to support IPv6? (y/n) (default n): complete 3. Start Docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service. complete >>> Loading Docker Image [jumpserver/redis:6.2] ...... [jumpserver/mariadb:10.6] ...... [jumpserver/core:v2.28.6] ...... [jumpserver/koko:v2.28.6] ...... [jumpserver/lion:v2.28.6] ...... [jumpserver/magnus:v2.28.6] ...... [jumpserver/web:v2.28.6] ...... complete >>> Install and Configure JumpServer 1. Configure Private Key SECRETE_KEY: NmUxMzRkNTYtNTk5MS1kM2I0LWJiZTUtZmIwMWE0YzNhYWM1 BOOTSTRAP_TOKEN: NmUxMzRkNTYtNTk5MS1kM2I0 complete 2. Configure Persistent Directory Do you need custom persistent store, will use the default directory /data/jumpserver? (y/n) (default n): complete 3. Configure MySQL Do you want to use external MySQL? (y/n) (default n): complete 4. Configure Redis Do you want to use external Redis? (y/n) (default n): complete 5. Configure External Port Do you need to customize the JumpServer external port? (y/n) (default n): complete 6. Init JumpServer Database ...... complete >>> The Installation is Complete 1. You can use the following command to start, and then visit cd /opt/jumpserver ./jmsctl.sh start 2. Other management commands ./jmsctl.sh stop ./jmsctl.sh restart ./jmsctl.sh backup ./jmsctl.sh upgrade For more commands, you can enter ./jmsctl.sh --help to understand 3. Web access http://172.16.70.181:80 Default username: admin Default password: admin 4. SSH/SFTP access ssh -p2222 admin@172.16.70.181 sftp -P2222 admin@172.16.70.181 5. More information Official Website: https://www.jumpserver.org/ Documentation: https://docs.jumpserver.org/
安裝完成後,配置檔案詳情
[root@JumpServer opt]# cat jumpserver/config/config.txt # JumpServer configuration file example. # # 如果不瞭解用途可以跳過修改此配置檔案, 系統會自動填入 # 完整引數文件 https://docs.jumpserver.org/zh/master/admin-guide/env/ ################################## 映象配置 ################################### # # 國內連線 docker.io 會超時或下載速度較慢, 開啟此選項使用華為雲映象加速 # 取代舊版本 DOCKER_IMAGE_PREFIX # # DOCKER_IMAGE_MIRROR=1 ################################## 安裝配置 ################################### # # JumpServer 資料庫持久化目錄, 預設情況下錄影、任務日誌都在此目錄 # 請根據實際情況修改, 升級時備份的資料庫檔案(.sql)和配置檔案也會儲存到該目錄 # VOLUME_DIR=/data/jumpserver # 加密金鑰, 遷移請保證 SECRET_KEY 與舊環境一致, 請勿使用特殊字串 # (*) Warning: Keep this value secret. # (*) 勿向任何人洩露 SECRET_KEY # SECRET_KEY=NmUxMzRkNTYtNTk5MS1kM2I0LWJiZTUtZmIwMWE0YzNhYWM1 # 元件向 core 註冊使用的 token, 遷移請保持 BOOTSTRAP_TOKEN 與舊環境一致, # 請勿使用特殊字串 # (*) Warning: Keep this value secret. # (*) 勿向任何人洩露 BOOTSTRAP_TOKEN # BOOTSTRAP_TOKEN=NmUxMzRkNTYtNTk5MS1kM2I0 # 日誌等級 INFO, WARN, ERROR # LOG_LEVEL=ERROR # JumpServer 容器使用的網段, 請勿與現有的網路衝突, 根據實際情況自行修改 # DOCKER_SUBNET=192.168.250.0/24 # ipv6 nat, 正常情況下無需開啟 # 如果宿主不支援 ipv6 開啟此選項將會導致無法獲取真實的客戶端 ip 地址 # USE_IPV6=0 DOCKER_SUBNET_IPV6=fc00:1010:1111:200::/64 ################################# MySQL 配置 ################################## # 外接 MySQL 需要輸入正確的 MySQL 資訊, 內建 MySQL 系統會自動處理 # DB_HOST=mysql DB_PORT=3306 DB_USER=root DB_PASSWORD=NmUxMzRkNTYtNTk5MS1kM2I0LW DB_NAME=jumpserver # 如果外接 MySQL 需要開啟 TLS/SSL 連線, 參考 https://docs.jumpserver.org/zh/master/install/install_security/#ssl # # DB_USE_SSL=True ################################# Redis 配置 ################################## # 外接 Redis 需要請輸入正確的 Redis 資訊, 內建 Redis 系統會自動處理 # REDIS_HOST=redis REDIS_PORT=6379 REDIS_PASSWORD=NmUxMzRkNTYtNTk5MS1kM2I0LW # 如果使用外接 Redis Sentinel, 請手動填寫下面內容 # # REDIS_SENTINEL_HOSTS=mymaster/192.168.100.1:26379,192.168.100.1:26380,192.168.100.1:26381 # REDIS_SENTINEL_PASSWORD=your_sentinel_password # REDIS_PASSWORD=your_redis_password # REDIS_SENTINEL_SOCKET_TIMEOUT=5 # 如果外接 Redis 需要開啟 TLS/SSL 連線, 參考 https://docs.jumpserver.org/zh/master/install/install_security/#redis-ssl # # REDIS_USE_SSL=True ################################## 訪問配置 ################################### # 對外提供服務埠, 如果與現有服務衝突請自行修改 # 如果不想對外提供訪問可以使用 127.0.0.1:<port>, eg: 127.0.0.1:33060 # HTTP_PORT=80 SSH_PORT=2222 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 ################################## 元件配置 ################################### # 元件註冊使用, 預設情況下向 core 容器註冊, 叢集環境需要修改為叢集 vip 地址 # CORE_HOST=http://core:8080 PERIOD_TASK_ENABLED=True # Core Session 定義, # SESSION_COOKIE_AGE 表示閒置多少秒後 session 過期, # SESSION_EXPIRE_AT_BROWSER_CLOSE=true 表示關閉瀏覽器即 session 過期 # # SESSION_COOKIE_AGE=86400 SESSION_EXPIRE_AT_BROWSER_CLOSE=True # Lion 開啟字型平滑, 最佳化體驗 # JUMPSERVER_ENABLE_FONT_SMOOTHING=True ################################# XPack 配置 ################################# # XPack 包, 開源版本設定無效 # RDP_PORT=3389 ################################## 其他配置 ################################## # 終端使用宿主 HOSTNAME 標識, 首次安裝自動生成 # SERVER_HOSTNAME=JumpServer # 當前執行的 JumpServer 版本號, 安裝和升級完成後自動生成 # CURRENT_VERSION=v2.28.6 ============================================================================== # 配置檔案前後對比如下 [root@JumpServer opt]# diff jumpserver/config-example.txt jumpserver/config/config.txt 24c24 < SECRET_KEY= --- > SECRET_KEY=NmUxMzRkNTYtNTk5MS1kM2I0LWJiZTUtZmIwMWE0YzNhYWM1 31c31 < BOOTSTRAP_TOKEN= --- > BOOTSTRAP_TOKEN=NmUxMzRkNTYtNTk5MS1kM2I0 53c53 < DB_PASSWORD= --- > DB_PASSWORD=NmUxMzRkNTYtNTk5MS1kM2I0LW 65c65 < REDIS_PASSWORD= --- > REDIS_PASSWORD=NmUxMzRkNTYtNTk5MS1kM2I0LW 124c124 < SERVER_HOSTNAME=${HOSTNAME} --- > SERVER_HOSTNAME=JumpServer 128c128 < CURRENT_VERSION= --- > CURRENT_VERSION=v2.28.6 ============================================================================= [root@JumpServer opt]# tree jumpserver/config jumpserver/config ├── config.txt # 主配置檔案 ├── core │ └── config.yml # core yml 格式配置檔案,可以留空,使用 config.txt 設定 ├── koko │ └── config.yml # koko yml 格式配置檔案,可以留空,使用 config.txt 設定 ├── mariadb │ └── mariadb.cnf # mariadb 配置檔案 ├── mysql │ └── my.cnf # mysql 配置檔案 ├── nginx # nginx 配置檔案 │ ├── cert │ │ ├── server.crt │ │ └── server.key │ └── lb_http_server.conf └── redis └── redis.conf # redis 配置檔案 7 directories, 9 files
jumpserver命令解析
[root@JumpServer opt]# bash jumpserver/jmsctl.sh --help 或 [root@JumpServer opt]# jmsctl --help JumpServer Deployment Management Script Usage: ./jmsctl.sh [COMMAND] [ARGS...] ./jmsctl.sh --help Installation Commands: install Install JumpServer upgrade [version] Upgrade JumpServer check_update Check for updates JumpServer reconfig Reconfiguration JumpServer Management Commands: start Start JumpServer stop Stop JumpServer close Close JumpServer restart Restart JumpServer status Check JumpServer down Offline JumpServer uninstall Uninstall JumpServer More Commands: load_image Loading docker image backup_db Backup database restore_db [file] Data recovery through database backup file raw Execute the original docker-compose command tail [service] View log
啟動jumpserver
[root@JumpServer opt]# jmsctl status NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS jms_mysql jumpserver/mariadb:10.6 "docker-entrypoint.s…" mysql 13 minutes ago Up 13 minutes (healthy) 3306/tcp jms_redis jumpserver/redis:6.2 "docker-entrypoint.s…" redis 13 minutes ago Up 13 minutes (healthy) 6379/tcp [root@JumpServer opt]# jmsctl start [+] Running 8/8 ⠿ Container jms_redis Healthy 0.6s ⠿ Container jms_mysql Healthy 0.6s ⠿ Container jms_core Healthy 11.9s ⠿ Container jms_magnus Started 14.1s ⠿ Container jms_celery Started 12.4s ⠿ Container jms_web Started 12.6s ⠿ Container jms_koko Started 12.4s ⠿ Container jms_lion Started 12.5s [root@JumpServer opt]# jmsctl status NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS jms_celery jumpserver/core:v2.28.6 "./entrypoint.sh sta…" celery About a minute ago Up About a minute (healthy) 8070/tcp, 8080/tcp jms_core jumpserver/core:v2.28.6 "./entrypoint.sh sta…" core About a minute ago Up About a minute (healthy) 8070/tcp, 8080/tcp jms_koko jumpserver/koko:v2.28.6 "./entrypoint.sh" koko About a minute ago Up About a minute (healthy) 0.0.0.0:2222->2222/tcp, :::2222->2222/tcp, 5000/tcp jms_lion jumpserver/lion:v2.28.6 "./entrypoint.sh" lion About a minute ago Up About a minute (healthy) 4822/tcp, 8081/tcp jms_magnus jumpserver/magnus:v2.28.6 "./entrypoint.sh" magnus About a minute ago Up About a minute (healthy) 0.0.0.0:30000-30100->30000-30100/tcp, :::30000-30100->30000-30100/tcp jms_mysql jumpserver/mariadb:10.6 "docker-entrypoint.s…" mysql 15 minutes ago Up 15 minutes (healthy) 3306/tcp jms_redis jumpserver/redis:6.2 "docker-entrypoint.s…" redis 15 minutes ago Up 15 minutes (healthy) 6379/tcp jms_web jumpserver/web:v2.28.6 "/docker-entrypoint.…" web About a minute ago Up About a minute (healthy) 0.0.0.0:80->80/tcp, :::80->80/tcp
頁面訪問
- http://ip:80,預設賬號密碼:admin,admin;首次登入需修改密碼。