宜信 [洞察] Docker本地部署手册

11,769 阅读7分钟

MedusaSorcerer的博客


专栏目录

专栏详情

洞察介绍

github.com/creditease-…
洞察 是宜信安全部用来对公司内部系统所出现的安全漏洞进行线上全生命周期管理的漏洞管理平台。

组成:

组成部分组成说明
应用系统资产管理对公司应用系统资产进行管理,包括系统名称、域名、重要级别、部门、负责人等
漏洞生命周期管理对公司应用系统产生的安全漏洞进行线上提交、通告、知悉、复测、分类、风险计算、修复期限计算、邮件提醒、漏洞数据分析统计等
安全知识库管理对安全知识、管理制度进行集中存放、线上学习、安全培训、知识传承等

角色:

角色分类角色说明说明文档
匿名用户公司内部未登录用户github.com/creditease-…
普通用户普通登录用户,指公司研发、业务、产品经理等github.com/creditease-…
安全人员安全部门进行漏洞测试、提交、跟踪修复的人员等github.com/creditease-…
安全管理员安全部门对漏洞进行审核的管理人员github.com/creditease-…
超级管理员最高权限账号,对用户的角色进行分配github.com/creditease-…

本地安装

在公司内网部署洞察的时候会遇到很多问题, 我会带你避雷

  • 安装 Docker 添加环境变量, 这儿将忽略安装 Docker 的过程

  • 执行 vi /etc/docker/daemon.json, 增加我们可访问的公司 Docker 镜像

    {
        "registry-mirrors": [
            "公司镜像地址"
        ]
    }
    
  • 重启 Docker: systemctl restart docker.service

  • 查看镜像是否生效: docker info | grep Mirrors -A 1

  • 依据公司镜像网站安装实际的镜像 MySQL 资源: docker pull 镜像的MySQL地址

  • 启动 MySQL 容器, 启动端口 3306, 开放端口 6606

    docker run -d -p 127.0.0.1:6606:3306 \
    --name open_source_mysqldb \
    -e MYSQL_ROOT_PASSWORD=root \
    mysql:5.7.13
    
  • 连接 MySQL 进行数据配置, 我们采用两种方式执行:

    • 本地存在 MySQL 驱动:
      mysql -h 127.0.0.1 -P 6606 -u root -p
      Enter password:root
      
    • 本地不存在 MySQL 驱动:
      • 连接交互式容器: docker exec -it 容器名称或ID bash
      • 连接 MySQL
        mysql -h 127.0.0.1 -P 3306 -u root -p
        Enter password:root
        
  • MySQL 交互式环境的数据配置

    >>> CREATE DATABASE IF NOT EXISTS vuldb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    
    >>> grant all on vuldb.* to vuluser@'%' identified by 'vulpassword';
    
    >>> flush privileges;
    
    >>> quit
    
  • 在 GITHUB 下载源码至本地: https://github.com/creditease-sec/insight.git

  • 修改配置文件:

    • srcpm/config.py

      # 修改公司邮箱后缀
      
      # 公司邮箱后缀限制,只能使用公司邮箱注册账号。
      CORP_MAIL = '@qq.com'
      
      # 修改邮件CC抄送列表
      
      # 平台发送的每封邮件的邮件抄送列表,可以设置发送给安全部邮箱列表,可自行修改,也可以保持不变为空
      '''
      示例:
      CC_EMAIL = [
          'xxx1@creditease.cn',
          'xxx2@creditease.cn',
      ]
      '''
      CC_EMAIL = [
      ]
      
      # 修改开发模式的邮箱服务器和发件邮箱配置
      
      # 以开发模式的配置运行,使用测试邮件服务器,并开启debug模式
      
      # 平台发邮件账号设置
      SRCPM_MAIL_SENDER = '安全部 <sec_creditease@sina.com>'
      
      # 发送邮件的服务器设置,邮箱密码由系统变量中读取
      MAIL_SERVER = 'smtp.sina.com'
      MAIL_PORT = 587
      MAIL_USE_TLS = True
      MAIL_USERNAME = os.environ.get(
          'MAIL_USERNAME') or 'sec_creditease@sina.com'
      MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') or ''
      
      # 修改生产模式的邮箱服务器和发件邮箱配置
      
      # 以生产模式的配置运行,使用生产邮件服务器,并关闭debug模式
      
      # 平台发邮件账号设置
      SRCPM_MAIL_SENDER = '安全部 <xxx@creditease.cn>'
      
      # 发送邮件的服务器设置,账号密码由系统变量中读取
      MAIL_SERVER = 'x.x.x.x'
      MAIL_PORT = 25
      MAIL_USE_TLS = False
      MAIL_USERNAME = os.environ.get(
          'MAIL_USERNAME') or 'xxx@creditease.cn'
      MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') or ''
      
    • mail_sender.py

      # 修改定时周期邮件配置
      
      # 平台发送的每封邮件的邮件抄送列表,可以设置发送给安全部邮箱列表,可自行修改,也可以保持不变为空
      '''
      示例:
      CC_EMAIL = [
          'xxx1@creditease.cn',
          'xxx2@creditease.cn',
      ]
      '''
      CC_EMAIL = [
      ]
      
      
      #主机名设置
      SERVER_NAME = 'xxx.creditease.corp'
      
      # 平台发邮件账号设置
      SRCPM_MAIL_SENDER = '安全部 <xxx@creditease.cn>'
      
      
      # 发送邮件的服务器设置,账号密码由系统变量中读取
      MAIL_SERVER = 'x.x.x.x'
      MAIL_PORT = 25
      MAIL_USE_TLS = False
      MAIL_USERNAME = os.environ.get(
          'MAIL_USERNAME') or 'xxx@creditease.cn'
      MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') or ''
      
    • srcpm/app/src/forms.py

      # 修改漏洞来源下拉列表
      
      ''' 下拉选项 '''
      source_choices = [
          ('',''), 
          (u'安全部', u'安全部'), 
          (u'YISRC', u'YISRC'), 
          (u'公众平台', u'公众平台'), 
          (u'合作伙伴', u'合作伙伴')
      ]
      
  • 将修改的项目文件上传至部署服务器上准备部署

  • 官方需要你获取镜像资源, 内网不可访问外网的情况可参考下面的方式

    • 官方命令: docker pull daocloud.io/liusheng/vulpm_docker:latest
    • 找一个可访问外网的 Linux 主机或者 Ubuntu 机器使用 Docker 下载镜像包
    • 使用 Docker 打包镜像: docker save -o 保存的文件名.tar 镜像名称
    • 将打包的镜像 tar 文件上传至部署服务器上
    • 将打包的镜像 tar 文件解压: docker load -i 保存的文件名.tar
    • 查看你的镜像: docker images
  • 在项目根目录下部署和启动APP

    # 在项目目录下启动容器,确保当前目录下存在srcpm文件夹
    # MAIL_PASSOWRD替换为自己邮箱服务器的密码
    # [安装的 tar 包镜像ID或者名称] 替换成你的镜像信息
    
    # 不开放远程访问: 将 0.0.0.0 修改成 127.0.0.1
    # 修改服务开放端口: 将 9000 修改成开放的端口
    
    docker run -d -p 0.0.0.0:9000:5000 \
    --link open_source_mysqldb:db \
    --name open_source_srcpm \
    -v $PWD/srcpm:/opt/webapp/srcpm \
    -e DEV_DATABASE_URL='mysql://vuluser:vulpassword@db/vuldb' \
    -e SrcPM_CONFIG=development \
    -e MAIL_PASSWORD='你的邮箱服务器密码' \
    [安装的 tar 包镜像ID或者名称] \
    sh -c 'supervisord -c srcpm/supervisor.conf && supervisorctl -c srcpm/supervisor.conf start all && tail -f srcpm/log/gunicorn.err && tail -f srcpm/log/mail_sender.err'
    
  • 初始化数据库:

    • 进入 Docker 容器

      >>> docker exec -it open_source_srcpm bash
      >>> cd srcpm
      
    • 创建数据库表,添加超级管理员账号,账号为 admin@admin.com 密码为 11

      >>> python manage.py db init
      >>> python manage.py db migrate
      >>> python manage.py db upgrade
      
      >>> python manage.py shell
      >>> admin = LoginUser(username='admin', email='admin@admin.com', password_hash='pbkdf2:sha1:1000$bLXlzNNn$6f8a286571a361ca99ede2ca3b9163e346f8a3ca', role_name=u'\u8d85\u7ea7\u7ba1\u7406\u5458', confirmed=1)
      >>> db.session.add(admin)
      >>> db.session.commit()
      >>> exit()
      
    • 权限分配表:

      路由端点功能描述具备访问权限的角色(admin具备所有权限)
      admin.index管理后台-首页安全管理员,安全人员
      admin.login_user_read管理后台-用户查看-
      admin.login_user_related管理后台-用户关联-
      admin.login_user_modify管理后台-用户修改-
      admin.login_user_delete管理后台-用户删除-
      admin.role_add管理后台-角色增加-
      admin.role_read管理后台-角色读取-
      admin.role_modify管理后台-角色修改-
      admin.perm_modify管理后台-权限修改-
      admin.role_perm_delete管理后台-角色权限删除-
      admin.depart_add管理后台-部门增加安全管理员
      admin.depart_read管理后台-部门查看安全管理员
      admin.depart_modify管理后台-部门修改安全管理员
      admin.depart_delete管理后台-部门删除安全管理员
      admin.user_add管理后台-员工增加安全管理员
      admin.user_read管理后台-员工查看安全管理员
      admin.user_modify管理后台-员工修改安全管理员
      admin.user_delete管理后台-员工删除安全管理员
      admin.assets_add管理后台-资产增加安全管理员,安全人员
      admin.assets_add_ajax管理后台-资产增加AJAX安全管理员,安全人员
      admin.assets_read管理后台-资产查看安全管理员,安全人员
      admin.assets_modify管理后台-资产修改安全管理员,安全人员
      admin.assets_delete管理后台-资产删除安全管理员
      admin.vul_type_add管理后台-漏洞类型增加安全管理员
      admin.vul_type_read管理后台-漏洞类型查看安全管理员
      admin.vul_type_modify管理后台-漏洞类型修改安全管理员
      admin.vul_type_delete管理后台-漏洞类型删除安全管理员
      src.vul_report_deleteSRC-漏洞报告删除安全管理员
      src.vul_report_admin_editSRC-漏洞报告管理编辑-
      src.vul_report_reviewSRC-漏洞报告审核安全管理员
      src.vul_report_review_ajaxSRC-漏洞报告审核AJAX安全管理员
      src.vul_report_send_emailSRC-漏洞报告发送邮件安全管理员
      src.vul_report_knownSRC-漏洞报告-已知悉提交安全管理员,普通用户
      src.vul_report_dev_finishSRC-漏洞报告-申请复测安全管理员,普通用户
      src.vul_report_vul_cataSRC-漏洞报告-漏洞层面提交安全管理员,安全人员
      src.vul_report_attack_checkSRC-漏洞报告-攻击发现提交安全管理员,安全人员
      src.vul_report_retest_resultSRC-漏洞报告-复测结果提交安全管理员,安全人员
      src.vul_report_retest_ajaxSRC-漏洞报告-复测结果提交AJAX安全管理员,安全人员
      src.vul_report_addSRC-漏洞报告-增加安全管理员,安全人员
      src.upload_imgSRC-漏洞报告-上传安全管理员,安全人员
      src.vul_review_listSRC-漏洞报告-未审核列表安全管理员,安全人员
      src.assets_readSRC-资产查看安全管理员,安全人员,普通用户
      src.assets_addSRC-资产增加安全管理员,安全人员
      src.assets_add_ajaxSRC-资产增加AJAX安全管理员,安全人员
      src.assets_modifySRC-资产修改安全管理员,安全人员
      main.index_countMAIN-漏洞报告统计-
      main.index_stats_timeMAIN-漏洞处理时间统计-
      drops.managerSRC-知识库管理安全管理员,安全人员
  • 主页: http://IP:Port/srcpm/

  • 登录: http://IP:Port/srcpm/auth/login

  • 默认账户

    用户名密码
    admin@admin.com11

部署完成