首页 文章 精选 留言 我的

精选列表

搜索[运维安全中心(堡垒机)],共10011篇文章
优秀的个人博客,低调大师

超详细:自动化之jumpserver堡垒入门到掌握

测试推荐环境 CPU: 64位双核处理器 内存: 4G DDR3 数据库:mysql 版本大于等于 5.6 mariadb 版本大于等于 5.5.6 环境 系统: CentOS 7 IP: 192.168.0.230 设置 selinux 和防火墙 [root@web1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:c5:33:97 brd ff:ff:ff:ff:ff:ff inet 192.168.0.230/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33 valid_lft 4169sec preferred_lft 4169sec inet6 fe80::20c:29ff:fec5:3397/64 scope link valid_lft forever preferred_lft forever [root@web1 ~]# iptables -F [root@web1 ~]# iptables -X [root@web1 ~]# iptables -Z [root@web1 ~]# getenforce Disabled [root@web1 ~]# # 修改字符集, 否则可能报 input/output error的问题, 因为日志里打印了中文 [root@web1 ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 [root@web1 ~]# export LC_ALL=zh_CN.UTF-8 [root@web1 ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf 一. 准备 Python3 和 Python 虚拟环境 1.1 安装依赖包 [root@web1 ~]# yum -y install wget gcc epel-release git 1.2 安装 Python3.6 [root@web1 ~]# yum -y install python36 python36-devel # 如果下载速度很慢, 可以换国内源 [root@web1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [root@web1 ~]# yum -y install python36 python36-devel 1.3 建立 Python 虚拟环境因为 CentOS 7 自带的是 Python2, 而 Yum 等工具依赖原来的 Python, 为了不扰乱原来的环境我们来使用 Python 虚拟环境 [root@web1 ~]# cd /opt [root@web1 opt]# python3.6 -m venv py3 [root@web1 opt]# source /opt/py3/bin/activate # 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行(py3) [root@localhost py3] 二. 安装 Jumpserver 2.1 下载或 Clone 项目 项目提交较多 git clone 时较大, 你可以选择去 Github 项目页面直接下载zip包。 [root@web1 opt ]# cd /opt/ [root@web1 opt ]# git clone https://github.com/jumpserver/jumpserver.git 2.2 安装依赖 RPM 包 [root@web1 ~]# cd /opt/jumpserver/requirements [root@web1 requirements ]# yum -y install $(cat rpm_requirements.txt) # 如果没有任何报错请继续 2.3 安装 Python 库依赖 [root@web1 requirements ]# pip install --upgrade pip setuptools [root@web1 requirements ]# pip install -r requirements.txt 或者 # 如果下载速度很慢, 可以换国内源 [root@web1 requirements ]# pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/ [root@web1 requirements ]# pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ 2.4 安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke [root@web1 requirements ]# yum -y install redis [root@web1 requirements ]# systemctl enable redis [root@web1 requirements ]# systemctl start redis 2.5 安装 MySQL 本教程使用 Mysql 作为数据库, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置 [root@web1 requirements ]# yum -y install mariadb mariadb-devel mariadb-server # centos7下安装的是mariadb [root@web1 requirements ]# systemctl enable mariadb [root@web1 requirements ]# systemctl start mariadb 2.6 创建数据库 Jumpserver 并授权 [root@web1 requirements ]# DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24` # 生成随机数据库密码 [root@web1 requirements ]# echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" [root@web1 requirements ]# mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '$DB_PASSWORD'; flush privileges;" 2.7 修改 Jumpserver 配置文件 [root@web1 requirements ]# cd /opt/jumpserver [root@web1 jumpserver]# cp config_example.yml config.yml [root@web1 jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50` # 生成随机SECRET_KEY [root@web1 jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16` # 生成随机BOOTSTRAP_TOKEN [root@web1 jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml [root@web1 jumpserver]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml [root@web1 jumpserver]# sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml [root@web1 jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml [root@web1 jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml [root@web1 jumpserver]# sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml [root@web1 jumpserver]# echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m" [root@web1 jumpserver]# echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m" [root@web1 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: 7hB9ogGBpfqqW3uqg5l8vq49FBbOKXESDaWfjvI5hdYBytfjXt # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制 BOOTSTRAP_TOKEN: IAvMqFnKUvmjjlLb # 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: cK2VQVUV16Q8F2U41flDfAFb 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 # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver 2.8 运行 Jumpserver [root@web1 jumpserver]# ./jms start all -d # 后台运行使用 -d 参数./jms start all -d # 新版本更新了运行脚本, 使用方式./jms start|stop|status|restart all 后台运行请添加 -d 参数 如果运行不报错, 请继续往下操作 三. 安装 SSH Server 和 WebSocket Server: Coco 3.1 下载或 Clone 项目 [root@web1 jumpserver]# cd /opt [root@web1 opt]# source /opt/py3/bin/activate [root@web1 opt]# git clone https://github.com/jumpserver/coco.git 3.2 安装依赖 [root@web1 opt]# cd /opt/coco/requirements [root@web1 requirements]# yum -y install $(cat rpm_requirements.txt) [root@web1 requirements]# pip install -r requirements.txt # 如果下载速度很慢, 可以换国内源 [root@web1 requirements]# pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ 3.3 修改配置文件并运行 [root@web1 requirements]# cd /opt/coco [root@web1 coco]# cp config_example.yml config.yml [root@web1 coco]# sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/coco/config.yml [root@web1 coco]# sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /opt/coco/config.yml [root@web1 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: IAvMqFnKUvmjjlLb # 启动时绑定的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: ERROR # 日志存放的目录 # LOG_DIR: logs # SSH白名单 # ALLOW_SSH_USER: all # SSH黑名单, 如果用户同时在白名单和黑名单,黑名单优先生效 # BLOCK_SSH_USER: # - # 和Jumpserver 保持心跳时间间隔 # HEARTBEAT_INTERVAL: 5 # Admin的名字,出问题会提示给用户 # ADMINS: '' # SSH连接超时时间 (default 15 seconds) # SSH_TIMEOUT: 30 # 语言 [en,zh] # LANGUAGE_CODE: zh # SFTP的根目录, 可选 /tmp, Home其他自定义目录 # SFTP_ROOT: /server/jms_sftp # SFTP是否显示隐藏文件 # SFTP_SHOW_HIDDEN_FILE: false [root@web1 coco]# source /opt/py3/bin/activate (py3) [root@web1 coco]# ./cocod start -d # 后台运行使用 -d 参数./cocod start -d Use eventlet dispatch Stop coco process Start coco process (py3) [root@web1 coco]# # 新版本更新了运行脚本, 使用方式./cocod start|stop|status|restart 后台运行请添加 -d 参数 四. 安装 Web Terminal 前端: Luna Luna 已改为纯前端, 需要 Nginx 来运行访问访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包, 直接解压不需要编译4.1 解压 Luna (py3) [root@web1 coco]# cd /opt/ (py3) [root@web1 opt]# wget https://github.com/jumpserver/luna/releases/download/1.4.8/luna.tar.gz (py3) [root@web1 opt]# tar xf luna.tar.gz (py3) [root@web1 opt]# chown -R root:root luna 五. 安装 Windows 支持组件(如果不需要管理 windows 资产, 可以直接跳过这一步) 5.1 安装依赖 (py3) [root@web1 opt]# mkdir /usr/local/lib/freerdp/ (py3) [root@web1 opt]# ln -s /usr/local/lib/freerdp /usr/lib64/freerdp (py3) [root@web1 opt]# rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro (py3) [root@web1 opt]# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm (py3) [root@web1 opt]# yum -y localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm (py3) [root@web1 opt]# yum install -y java-1.8.0-openjdk libtool (py3) [root@web1 opt]# yum install -y cairo-devel libjpeg-turbo-devel libpng-devel uuid-devel (py3) [root@web1 opt]# yum install -y ffmpeg-devel freerdp-devel freerdp-plugins pango-devel libssh2-devel libtelnet-devel libvncserver-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel ghostscript 5.2 编译安装 guacamole 服务 (py3) [root@web1 opt]# cd /opt (py3) [root@web1 opt]# git clone https://github.com/jumpserver/docker-guacamole.git (py3) [root@web1 opt]# cd /opt/docker-guacamole/ (py3) [root@web1 docker-guacamole ]# tar -xf guacamole-server-0.9.14.tar.gz (py3) [root@web1 docker-guacamole ]# cd guacamole-server-0.9.14 (py3) [root@web1 guacamole-server-0.9.14 ]# autoreconf -fi (py3) [root@web1 guacamole-server-0.9.14 ]# ./configure --with-init-dir=/etc/init.d (py3) [root@web1 guacamole-server-0.9.14 ]# make && make install (py3) [root@web1 guacamole-server-0.9.14 ]# cd .. (py3) [root@web1 docker-guacamole ]# rm -rf guacamole-server-0.9.14 (py3) [root@web1 docker-guacamole ]# ldconfig 5.3 配置 Tomcat (py3) [root@web1 docker-guacamole ]# mkdir -p /config/guacamole /config/guacamole/lib /config/guacamole/extensions # 创建 guacamole 目录 (py3) [root@web1 docker-guacamole ]# ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver-0.9.14.jar /config/guacamole/extensions/guacamole-auth-jumpserver-0.9.14.jar (py3) [root@web1 docker-guacamole ]# ln -sf /opt/docker-guacamole/root/app/guacamole/guacamole.properties /config/guacamole/guacamole.properties # guacamole 配置文件 (py3) [root@web1 docker-guacamole ]# cd /config (py3) [root@web1 config ]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz (py3) [root@web1 config ]# tar xf apache-tomcat-8.5.38.tar.gz (py3) [root@web1 config ]# rm -rf apache-tomcat-8.5.38.tar.gz (py3) [root@web1 config ]# mv apache-tomcat-8.5.38 tomcat8 (py3) [root@web1 config ]# rm -rf /config/tomcat8/webapps/* (py3) [root@web1 config ]# ln -sf /opt/docker-guacamole/guacamole-0.9.14.war /config/tomcat8/webapps/ROOT.war # guacamole client (py3) [root@web1 config ]# sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat8/conf/server.xml # 修改默认端口为 8081 (py3) [root@web1 config ]# sed -i 's/FINE/WARNING/g' /config/tomcat8/conf/logging.properties # 修改 log 等级为 WARNING (py3) [root@web1 config ]# wget https://github.com/ibuler/ssh-forward/releases/download/v0.0.5/linux-amd64.tar.gz (py3) [root@web1 config ]# tar xf linux-amd64.tar.gz -C /bin/ (py3) [root@web1 config ]# chmod +x /bin/ssh-forward 5.4 配置环境变量 (py3) [root@web1 config ]# export JUMPSERVER_SERVER=http://127.0.0.1:8080 # http://127.0.0.1:8080 指 jumpserver 访问地址 $ echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc # BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN (py3) [root@web1 config ]# export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN (py3) [root@web1 config ]# echo "export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc (py3) [root@web1 config ]# export JUMPSERVER_KEY_DIR=/config/guacamole/keys (py3) [root@web1 config ]# echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc (py3) [root@web1 config ]# export GUACAMOLE_HOME=/config/guacamole (py3) [root@web1 config ]# echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc 5.5 启动 Guacamole (py3) [root@web1 config ]# /etc/init.d/guacd start (py3) [root@web1 config ]# sh /config/tomcat8/bin/startup.sh 六. 配置 Nginx 整合各组件 6.1 安装 Nginx (py3) [root@web1 config ]# yum install yum-utils (py3) [root@web1 config ]# vi /etc/yum.repos.d/nginx.repo [nginx-stable]name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.key (py3) [root@web1 config ]# yum install -y nginx (py3) [root@web1 config ]# rm -rf /etc/nginx/conf.d/default.conf (py3) [root@web1 config ]# systemctl enable nginx 6.2 准备配置文件 修改 /etc/nginx/conf.d/jumpserver.conf (py3) [root@web1 config ]# vi /etc/nginx/conf.d/jumpserver.conf server { listen 80; # 代理端口, 以后将通过此端口进行访问, 不再通过8080端口 # server_name demo.jumpserver.org; # 修改成你的域名或者注释掉 client_max_body_size 100m; # 录像及文件上传大小限制 location /luna/ { try_files $uri / /index.html; alias /opt/luna/; # 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/; # 如果coco安装在别的服务器, 请填写它的ip 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/; # 如果coco安装在别的服务器, 请填写它的ip 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/; # 如果guacamole安装在别的服务器, 请填写它的ip 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; # 如果jumpserver安装在别的服务器, 请填写它的ip proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }} 6.3 运行 Nginx (py3) [root@web1 config ]# nginx -t # 确保配置没有问题, 有问题请先解决 # CentOS 7 (py3) [root@web1 config ]# systemctl start nginx (py3) [root@web1 config ]# systemctl enable nginx 6.4 开始使用 Jumpserver检查应用是否已经正常运行服务全部启动后, 访问http://192.168.0.230, 访问nginx代理的端口, 不要再通过8080端口访问默认账号: admin 密码: admin到Jumpserver 会话管理-终端管理 检查 Coco Guacamole 等应用的注册。 测试连接 如果登录客户端是 macOS 或 Linux, 登录语法如下 $ ssh -p2222 admin@192.168.244.144 $ sftp -P2222 admin@192.168.244.144 密码: admin 如果登录客户端是 Windows, Xshell Terminal 登录语法如下 $ ssh admin@192.168.244.144 2222 $ sftp admin@192.168.244.144 2222 密码: admin 如果能登陆代表部署成功 # sftp默认上传的位置在资产的 /tmp 目录下# windows拖拽上传的位置在资产的 Guacamole RDP上的 G 目录下 设置授权规则,重新连接 [root@web1 ~]# ssh leoheng@192.168.0.230 -p 2222 leoheng@192.168.0.230's password: leoheng, 欢迎使用Jumpserver开源跳板机系统 1) 输入 ID 直接登录 或 输入部分 IP,主机名,备注 进行搜索登录(如果唯一). 2) 输入 / + IP, 主机名 or 备注 搜索. 如: /ip 3) 输入 p 显示您有权限的主机. 4) 输入 g 显示您有权限的节点. 5) 输入 g + 节点ID 显示节点下主机. 如: g1 6) 输入 s 中/英文切换. 7) 输入 h 帮助. 0) 输入 r 刷新最新的机器和节点信息. 0) 输入 q 退出. Opt> p ID 主机名 IP 登录用户 备注 1 k8s 192.168.0.228 [leo] 页码: 1, 数量: 1, 总页数: 1, 总数量: 1 Opt> 1 开始连接到 leo@k8s 1.1 Last login: Fri Mar 8 15:11:05 2019 from 192.168.0.230 [leo@k8s ~]$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:1f:fd:1b brd ff:ff:ff:ff:ff:ff inet 192.168.0.228/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33 valid_lft 6579sec preferred_lft 6579sec inet6 fe80::20c:29ff:fe1f:fd1b/64 scope link valid_lft forever preferred_lft forever 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:c5:84:a3:7c brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever [leo@k8s ~]$ 6.5 设置邮件服务 (py3) [root@web1 opt]# yum install -y mailx ##安装邮件服务 (py3) [root@web1 opt]# vim /etc/mail.rc ##在配置文件最后添加 set from=**@****.com #(需修改)收件人显示的发件人名称,可填写你的名字等 set smtp=smtp.ym.163.com (需修改)你所使用的外部邮箱的smtp服务器地址,这里使用163的邮件服务器 set smtp-auth-user=**@****.com (需修改)你所使用的外部邮箱的用户名 set smtp-auth-password=******* (需修改)你所使用的外部邮箱密码 set smtp-auth=login 测试邮件发送 (py3) [root@web1 opt]# echo 111 |mailx -v -s "test info" ******@qq.com Resolving host smtp.ym.163.com . . . done. Connecting to 59.111.176.15:smtp . . . connected. 220 proxy-sm2.ym.internal ESMTP ready >>> EHLO web1 250-proxy-sm2.ym.internal 250-PIPELINING 250-8BITMIME 250-AUTH=LOGIN PLAIN 250-AUTH PLAIN LOGIN 250 STARTTLS >>> AUTH LOGIN 334 VXNlcm5hbWU6 >>> a2JAYnV5ZXJjYW1wLmNvbQ== 334 UGFzc3dvcmQ6 >>> YWNiZDY1NDMyMQ== 235 2.0.0 OK >>> MAIL FROM:<**@******.com> 250 2.1.0 Ok >>> RCPT TO:<******@qq.com> 250 2.1.5 Ok >>> DATA 354 End data with <CR><LF>.<CR><LF> >>> . 250 2.0.0 Ok: queued as 77CE7B41A88 >>> QUIT 221 2.0.0 Bye 邮箱收件情况 设置jms的邮件发送 更多的博客转移到个人博客上了,请点击以下链接:个人博客

优秀的个人博客,低调大师

开源堡垒jumpserver搭建

概述 之前说了国产良心kodexplorer,今天再说一个国内比较好的开源项目jumpserver,除此之外还可以的国内开源项目我觉得就是宝塔面板了。废话不多说上教程搭建。虽然说你可以看下面的教程不用听我瞎扯 http://docs.jumpserver.org/zh/docs/step_by_step.html 虽然说我的教程基本都是复制这个文档的,但是有的地方还是不一样的 前期初始化 首先关闭selinux vim /etc/selinux/config SELINUX=enforcing 改为 SELINUX=disabled 之后 setenforce 0 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 修改字符集 localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf 安装python3和python编译的依赖环境 首先安装变异python3前的依赖环境 yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git 之后下载python3编译安装 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 建立python的虚拟环境 cd /opt && python3 -m venv py3 && source /opt/py3/bin/activate 自动载入 Python 虚拟环境配置 这个是为了让你进入jumpserver这个文件夹的时候可以自动载入环境变量 cd /opt && git clone git://github.com/kennethreitz/autoenv.git && echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc && source ~/.bashrc 安装jumpserver clone项目 cd /opt/ && git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master && echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env 之后进入jumpserver这个文件夹会有一个提示你输入y就好,这样之后每次进入这个文件夹就会自动导入py3的环境变量 安装rpm包的依赖 cd /opt/jumpserver/requirements && yum -y install $(cat rpm_requirements.txt) 安装python依赖 pip install -r requirements.txt -i https://pypi.douban.com/simple/ 安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke yum -y install redis && systemctl enable redis && systemctl start redis 安装mariadb yum -y install mariadb mariadb-devel mariadb-server && systemctl enable mariadb && systemctl start mariadb 设置mariadb的root密码 执行mysql_secure_installation 之后按照流程走就好了 [root@bboysoul-centos-vm ~]# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password: Re-enter new password: Sorry, passwords do not match. New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] n ... skipping. By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! 创建数据库 Jumpserver 并授权 [root@bboysoul-centos-vm ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database jumpserver default charset 'utf8'; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'%' identified by '你的密码'; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> 修改 Jumpserver 配置文件 cd /opt/jumpserver && cp config_example.py config.py && vi config.py 下面是我的配置文件 """ jumpserver.config Jumpserver project setting file :copyright: (c) 2014-2017 by Jumpserver Team :license: GPL v2, see LICENSE for more details. """import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) class Config: # Use it to encrypt or decrypt data # SECURITY WARNING: keep the secret key used in production secret! 这个不用动,让他默认就好 SECRET_KEY = os.environ.get('SECRET_KEY') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x' # Django security setting, if your disable debug model, you should setting that ALLOWED_HOSTS = ['*'] 关闭debug模式,因为之后我们要安装nginx做代理的 # Development env open this, when error occur display the full process track, Production disable it DEBUG = os.environ.get("DEBUG") or False 日志级别变成警告就好,不然日志太多 # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/ LOG_LEVEL = os.environ.get("LOG_LEVEL") or 'WARNING' LOG_DIR = os.path.join(BASE_DIR, 'logs') # Database setting, Support sqlite3, mysql, postgres .... # See https://docs.djangoproject.com/en/1.10/ref/settings/#databases # SQLite setting: #DB_ENGINE = 'sqlite3' #DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3') # MySQL or postgres setting like: # DB_ENGINE = os.environ.get("DB_ENGINE") or 'mysql' # DB_HOST = os.environ.get("DB_HOST") or '127.0.0.1' # DB_PORT = os.environ.get("DB_PORT") or 3306 # DB_USER = os.environ.get("DB_USER") or 'jumpserver' # DB_PASSWORD = os.environ.get("DB_PASSWORD") or 'weakPassword' # DB_NAME = os.environ.get("DB_NAME") or 'jumpserver' 数据库设置,因为我们使用的是mysql DB_ENGINE = os.environ.get("DB_ENGINE") or 'mysql' DB_HOST = os.environ.get("DB_HOST") or '127.0.0.1' DB_PORT = os.environ.get("DB_PORT") or 3306 DB_USER = os.environ.get("DB_USER") or 'jumpserver' DB_PASSWORD = os.environ.get("DB_PASSWORD") or '你的密码' DB_NAME = os.environ.get("DB_NAME") or '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_HOST = os.environ.get("REDIS_HOST") or '127.0.0.1' REDIS_PORT = os.environ.get("REDIS_PORT") or 6379 REDIS_PASSWORD = os.environ.get("REDIS_PASSWORD") or '' REDIS_DB_CELERY = os.environ.get('REDIS_DB') or 3 REDIS_DB_CACHE = os.environ.get('REDIS_DB') or 4 def __init__(self): pass def __getattr__(self, item): return None class DevelopmentConfig(Config): pass class TestConfig(Config): pass class ProductionConfig(Config): pass Default using Config settings, you can write if/else for different env config = DevelopmentConfig() 下面是官方的配置文件,可以做个参考 """ jumpserver.config Jumpserver project setting file :copyright: (c) 2014-2017 by Jumpserver Team :license: GPL v2, see LICENSE for more details. """ import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) class Config: # Use it to encrypt or decrypt data # Jumpserver 使用 SECRET_KEY 进行加密,请务必修改以下设置 # SECRET_KEY = os.environ.get('SECRET_KEY') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x' SECRET_KEY = '请随意输入随机字符串(推荐字符大于等于 50位)' # Django security setting, if your disable debug model, you should setting that ALLOWED_HOSTS = ['*'] # DEBUG 模式 True为开启 False为关闭,默认开启,生产环境推荐关闭 # 注意:如果设置了DEBUG = False,访问8080端口页面会显示不正常,需要搭建 nginx 代理才可以正常访问 DEBUG = os.environ.get("DEBUG") or True # 日志级别,默认为DEBUG,可调整为INFO, WARNING, ERROR, CRITICAL,默认INFO LOG_LEVEL = os.environ.get("LOG_LEVEL") or 'WARNING' LOG_DIR = os.path.join(BASE_DIR, 'logs') # 使用的数据库配置,支持sqlite3, mysql, postgres等,默认使用sqlite3 # See https://docs.djangoproject.com/en/1.10/ref/settings/#databases # 默认使用SQLite3,如果使用其他数据库请注释下面两行 # DB_ENGINE = 'sqlite3' # DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3') # 如果需要使用mysql或postgres,请取消下面的注释并输入正确的信息,本例使用mysql做演示(mariadb也是mysql) DB_ENGINE = os.environ.get("DB_ENGINE") or 'mysql' DB_HOST = os.environ.get("DB_HOST") or '127.0.0.1' DB_PORT = os.environ.get("DB_PORT") or 3306 DB_USER = os.environ.get("DB_USER") or 'jumpserver' DB_PASSWORD = os.environ.get("DB_PASSWORD") or 'weakPassword' DB_NAME = os.environ.get("DB_NAME") or 'jumpserver' # Django 监听的ip和端口,生产环境推荐把0.0.0.0修改成127.0.0.1,这里的意思是允许x.x.x.x访问,127.0.0.1表示仅允许自身访问 # ./manage.py runserver 127.0.0.1:8080 HTTP_BIND_HOST = '0.0.0.0' HTTP_LISTEN_PORT = 8080 # Redis 相关设置 REDIS_HOST = os.environ.get("REDIS_HOST") or '127.0.0.1' REDIS_PORT = os.environ.get("REDIS_PORT") or 6379 REDIS_PASSWORD = os.environ.get("REDIS_PASSWORD") or '' REDIS_DB_CELERY = os.environ.get('REDIS_DB') or 3 REDIS_DB_CACHE = os.environ.get('REDIS_DB') or 4 def __init__(self): pass def __getattr__(self, item): return None class DevelopmentConfig(Config): pass class TestConfig(Config): pass class ProductionConfig(Config): pass # Default using Config settings, you can write if/else for different env config = DevelopmentConfig() 生成数据库表结构和初始化数据 cd /opt/jumpserver/utils && bash make_migrations.sh 运行jumpserver cd /opt/jumpserver && ./jms start all -d 默认的后台账号是admin admin 但是这个时候个人觉得不要去访问,到最后安装了nginx再去访问 安装 SSH Server 和 WebSocket Server: Coco 下载或 Clone 项目 cd /opt && source /opt/py3/bin/activate && git clone https://github.com/jumpserver/coco.git && cd coco && git checkout master && echo "source /opt/py3/bin/activate" > /opt/coco/.env 同样首次进入这个coco文件夹也是会有个提示你输入y就好 安装依赖 cd /opt/coco/requirements && yum -y install $(cat rpm_requirements.txt) && pip install -r requirements.txt -i https://pypi.douban.com/simple/ 修改配置文件并运行 cd /opt/coco && cp conf_example.py conf.py && vi conf.py 其实上面这个配置文件没什么好修改的,如果要修改可以修改一下日志级别,其他的自己看着办 之后运行coco ./cocod start -d 官方文档会让你在这个时候进入web界面接受什么注册,先别管他,直接进行下一步 安装 Web Terminal 前端: Luna 安装Luna cd /opt && wget https://github.com/jumpserver/luna/releases/download/1.4.1/luna.tar.gz && tar xvf luna.tar.gz && chown -R root:root luna 安装windows支持组建 就是可以管理windows服务器这样,官方推荐使用docker了,所以那么就使用docker镜像来安装就好了 安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && rpm --import http://mirrors.aliyun.com/docker-ce/linux/centos/gpg && yum makecache fast && yum -y install docker-ce && systemctl start docker && systemctl enable docker && systemctl status docker 启动 Guacamole 注意下面的jumpserver地址不能写127.0.0.1,因为是容器运行的所以写127.0.0.1就是容器本身了,写宿主机ip或者url就好 docker run --name jms_guacamole -d \ -p 8081:8080 -v /opt/guacamole/key:/config/guacamole/key \ -e JUMPSERVER_KEY_DIR=/config/guacamole/key \ -e JUMPSERVER_SERVER=http://<填写jumpserver的url地址> \ jumpserver/guacamole:latest 之后官方会说让你去web界面接收什么注册先别管他,继续下一步 配置 Nginx 整合各组件 安装nginx yum -y install nginx 配置nginx 首先新建下面这个文件 vim /etc/nginx/conf.d/jumpserver.conf 输入 server { listen 80; # 代理端口,以后将通过此端口进行访问,不再通过8080端口 client_max_body_size 100m; # 录像上传大小限制 location /luna/ { try_files $uri / /index.html; alias /opt/luna/; # 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/; # 如果coco安装在别的服务器,请填写它的ip 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 /guacamole/ { proxy_pass http://localhost:8081/; # 如果guacamole安装在别的服务器,请填写它的ip 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; # 如果jumpserver安装在别的服务器,请填写它的ip proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 保存退出之后编辑下面这个文件 vim /etc/nginx/nginx.conf 删除其中的server字段,就是下面内容 server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } 保存退出 运行nginx systemctl restart nginx && systemctl enable nginx 开始使用jumpserver 首先检查各组件是不是正常 cd /opt/jumpserver && ./jms status cd /opt/coco && ./cocod status 查看Guacamole是不是正常 docker ps 接着我们浏览器访问服务器的ip,默认的账号和密码都是admin 登陆完成之后我们就可以注册我们的两个组件了,点击会话管理->终端管理终端列表里面有两行全部点击接受就好 如果没有的话那么按照下面的顺序重新启动一下服务 首先关闭所有的服务 cd /opt/jumpserver && ./jms stop all cd /opt/coco && ./cocod stop docker stop jms_guacamole 接着按照我的顺序启动服务 cd /opt/jumpserver && ./jms start all -d 尤其要注意这步,一定要确保启动成功,尤其是配置低的机器很有可能启动失败的 cd /opt/jumpserver && ./jms status cd /opt/coco && ./cocod start -d docker start jms_guacamole 使用 关于使用我想说的是有两个概念一个是资产管理中的管理用户,一个是资产管理中的系统用户。 什么是管理用户,管理用户其实就是一台服务器的root,拥有这台服务器的最高权限,可以在这台服务器中创建系统用户。 什么是系统用户,系统用户就是你想添加到服务器中的用户,或者是系统中已经存在的用户,它可以是root。如果它没有被创建,那么jumpserver可以使用用户推送功能向服务器中创建用户 关于资产授权,当你创建完成资产之后这个资产也就是服务器是不属于任何用户的,你必须要创建资产授权,把资产授权给这个用户才可以让这个用户去访问 关于MFA二次认证,其实就是在登录的时候还要下载一个谷歌验证器使用里面的数字登录,就是类似以前的游戏将军令 欢迎关注Bboysoul的博客www.bboysoul.comHave Fun

优秀的个人博客,低调大师

《云数据中心构建实战:核心技术、管理、安全与高可用》——导读

前 言 为什么要写这本书 小的时候,家里有块菜地,常常和爸爸拎着桶浇灌菜园。后来,种的菜越来越多,拎桶浇水常常累得爸爸腰酸背痛。于是,便铺设了一根长长的管子直通菜园,用的时候打开水龙头,不肖几分钟整个菜地就被灌溉完了。 那个时候还小,不晓得也不考虑水是怎么来的。只觉得这种方法速度快了不少,还能随心所欲地大面积喷水,这可比拎桶要爽得多。 随着年龄的增长,我知道了水是来自江河湖泊、地下水及地表水,经过沉淀、消毒、过滤、净化等工艺流程,最后通过配水泵站和管道输送到居民家里。 相对于自来水的汲取和输送,相信老百姓更关心的是:水的价格是涨还是降?每天打开水龙头会不会停水?如果哪一天需要大量的用水,能不能供应得上? 事实上,万物相通! 作为一个用户是不会考虑网页用什么语言编码,也不会考虑数据存储在什么环境之中,更不会关心这个大环境采用什么管理平

优秀的个人博客,低调大师

标记 (TAG) 您的堡垒(bastionhost)资源

标签的基本知识 标签是资源Meta信息,标签是一些充当元数据的词和短语,支持用户自定义和系统预制。每个标签都包含一个键(Key)和一个值(Value)。标签是一种资源的属性描述。 标签与资源是 多对多的关系。 标签可让您按各种标准(例如用途、所有者或环境)对 阿里云 资源进行分类。这在您具有相同类型的许多资源时会很有用,您可以根据分配给资源的标签快速识别特定资源。 标签对阿里云资源没有任何语义意义,应严格按字符串进行解析。同时,标签不会自动分配至您的资源。您可以修改标签的key和value,还可以随时删除资源的标签。您可以将标签的值设为空的字符串,但是不能将其设为空值。如果您添加的标签的值与该实例上现有标签的值相同,新的值就会覆盖旧值。如果删除资源,资源的所有标签也会被删除。 可以使用管理控制台 和 API 处理标签。 标签设计详情见最佳实践

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册