长期支持版本

    社区创新版本

      一、A-Ops服务介绍

      A-Ops是用于提升主机整体安全性的服务,通过资产管理、漏洞管理、配置溯源等功能,识别并管理主机中的信息资产,监测主机中的软件漏洞、排查主机中遇到的系统故障,使得目标主机能够更加稳定和安全的运行。

      下表是A-Ops服务涉及模块的说明:

      模块说明
      aops-ceresA-Ops服务的客户端,
      提供采集主机数据与管理其他数据采集器(如gala-gopher)的功能。
      响应管理中心下发的命令,处理管理中心的需求与操作。
      aops-zeusA-Ops基础应用管理中心,主要负责与其他模块的中转站,默认端口:11111
      对外提供基本主机管理服务,主机与主机组的添加、删除等功能依赖此模块实现。
      aops-hermesA-Ops可视化操作界面,展示数据信息,提升服务易用性。
      aops-apolloA-Ops漏洞管理模块相关功能依赖此服务实现,默认端口:11116
      识别客户机周期性获取openEuler社区发布的安全公告,并更新到漏洞库中。
      通过与漏洞库比对,检测出系统和软件存在的漏洞。
      aops-vulcanusA-Ops工具库,除aops-ceres与aops-hermes模块外,其余模块须与此模块共同安装使用
      aops-tools提供基础环境一键部署脚本、数据库表初始化,安装后在**/opt/aops/scripts**目录下可见。
      gala-ragdollA-Ops配置溯源模块,通过git监测并记录配置文件的改动,默认端口:11114
      dnf-hotpatch-plugindnf插件,使得dnf工具可识别热补丁信息,提供热补丁扫描及热补丁修复功能。

      二、部署环境要求

      建议采用4台openEuler 20.03-LTS-SP3 机器部署,其中3台用于配置服务端,1台用于纳管(aops服务纳管的主机),且repo中需要配置update源FAQ:配置update源),具体用途以及部署方案如下:

      • 机器A:部署mysql、redis、elasticsearch等,主要提供数据服务支持,建议内存8G+。
      • 机器B:部署A-Ops的资产管理zeus服务+前端展示服务,提供完整的业务功能支持,建议内存6G+。
      • 机器C:部署A-Ops的漏洞管理配置溯源(gala-ragdoll),提供漏洞管理服务,建议内存4G+。
      • 机器D:部署A-Ops的客户端,用作一个被AOps服务纳管监控的主机(需要监管的机器中都可以安装aops-ceres)。
      机器编号配置IP部署模块
      机器A192.168.1.1mysql,elasticsearch, redis
      机器B192.168.1.2aops-zeus,aops-hermes
      机器C192.168.1.3aops-apollo,gala-ragdoll
      机器D192.168.1.4aops-ceres,dnf-hotpatch-plugin

      每台机器在部署前,请先关闭防火墙和SELinux

      • 关闭防火墙
      systemctl stop firewalld
      systemctl disable firewalld
      systemctl status firewalld
      setenforce 0
      
      • 禁用SELinux
      # 修改/etc/selinux/config文件中SELINUX状态为disabled
      
      vi /etc/selinux/config
      SELINUX=disabled
      
      # 更改之后,按下ESC键,键盘中输入 :wq 保存修改的内容
      

      注:此SELINUX状态配置在系统重启后生效。

      三、服务端部署

      3.1、 资产管理

      使用资产管理功能需部署aops-zeus、aops-hermes、mysql、redis服务。

      3.1.1、节点信息

      机器编号配置IP部署模块
      机器A192.168.1.1mysql,redis
      机器B192.168.1.2aops-zeus,aops-hermes

      3.1.2、部署步骤

      3.1.2.1、 部署mysql

      • 安装mysql
      yum install mysql-server -y
      
      • 修改mysql配置文件
      vim /etc/my.cnf
      
      • 在mysqld配置节下新增bind-address,值为本机ip
      [mysqld]
      bind-address=192.168.1.1
      
      • 重启mysql服务
      systemctl restart mysqld
      
      • 设置mysql数据库的root用户访问权限
      [root@localhost ~] mysql
      
      mysql> show databases;
      mysql> use mysql;
      mysql> select user,host from user; -- 此处出现host为localhost时,说明mysql只允许本机连接,外网和本地软件客户端则无法连接。
      
      +---------------+-----------+
      | user          | host      |
      +---------------+-----------+
      | root          | localhost |
      | mysql.session | localhost |
      | mysql.sys     | localhost |
      +---------------+-----------+
      3 rows in set (0.00 sec)
      
      mysql> update user set host = '%' where user='root'; -- 设置允许root用户任意IP访问。
      mysql> flush privileges; -- 刷新权限
      mysql> exit
      

      3.1.2.2、 部署redis

      • 安装redis
      yum install redis -y
      
      • 修改配置文件
      vim /etc/redis.conf
      
      • 绑定IP
      # It is possible to listen to just one or multiple selected interfaces using
      # the "bind" configuration directive, followed by one or more IP addresses.
      #
      # Examples:
      #
      # bind 192.168.1.100 10.0.0.1
      # bind 127.0.0.1 ::1
      #
      # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
      # internet, binding to all the interfaces is dangerous and will expose the
      # instance to everybody on the internet. So by default we uncomment the
      # following bind directive, that will force Redis to listen only into
      # the IPv4 lookback interface address (this means Redis will be able to
      # accept connections only from clients running into the same computer it
      # is running).
      #
      # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
      # JUST COMMENT THE FOLLOWING LINE.
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      bind 127.0.0.1 192.168.1.1 # 此处添加机器A的真实IP
      
      • 启动redis服务
      systemctl start redis
      

      3.1.2.3、 部署aops-zeus

      • 安装aops-zeus
      yum install aops-zeus -y
      
      • 修改配置文件
      vim /etc/aops/zeus.ini
      
      • 将配置文件中各服务的地址修改为真实地址,本指南中aops-zeus部署于机器B,故需把IP地址配为机器B的ip地址
      [zeus]
      ip=192.168.1.2  // 此处ip修改为机器B真实ip
      port=11111
      
      [uwsgi]
      wsgi-file=manage.py
      daemonize=/var/log/aops/uwsgi/zeus.log
      http-timeout=600
      harakiri=600
      processes=2		// 生成指定数目的worker/进程
      gevent=100		// gevent异步核数
      
      [mysql]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=3306
      database_name=aops
      engine_format=mysql+pymysql://@%s:%s/%s
      pool_size=100
      pool_recycle=7200
      
      [agent]
      default_instance_port=8888
      
      [redis]
      ip=192.168.1.1  // 此处ip修改为机器A真实ip
      port=6379
      
      [apollo]
      ip=192.168.1.3  // 此处ip修改为部署apollo服务的真实ip(建议apollo与zeus分开部署)。若不使用apollo的漏洞管理功能则可以不配置
      port=11116
      

      mysql数据库设置为密码模式,请参阅FAQ:密码模式下mysql服务配置链接字符串

      • 启动aops-zeus服务
      systemctl start aops-zeus
      

      注意:服务启动前请确保已 初始化aops-zeus数据库

      zeus服务启动失败,且报错内容包含mysql数据库连接失败,请排查是否设置mysql密码,如果是请参阅FAQ:密码模式下mysql服务启动失败

      3.1.2.4、 初始化aops-zeus数据库

      • 执行数据库初始化
      cd /opt/aops/scripts/deploy
      bash aops-basedatabase.sh init zeus
      

      注意:在未安装aops-tools工具包时,也可获取sql脚本通过mysql加载的方式初始化(sql脚本路径:/opt/aops/database/zeus.sql)

      FQA:密码模式下mysql数据库初始化

      FAQ:/opt/aops/scripts/deploy目录不存在

      3.1.2.5、 部署aops-hermes

      • 安装aops-hermes
      yum install aops-hermes -y
      
      • 修改配置文件
      vim /etc/nginx/aops-nginx.conf
      
      • 服务配置展示

        服务都部署在机器B,需将ngxin代理访问的各服务地址配置为机器B的真实ip

       # 保证前端路由变动时nginx仍以index.html作为入口
        location / {
            try_files $uri $uri/ /index.html;
            if (!-e $request_filename){
                rewrite ^(.*)$ /index.html last;
            }
        }
      	# 此处修改为aops-zeus部署机器真实IP
        location /api/ {
            proxy_pass http://192.168.1.2:11111/;
        }
        # 此处IP对应gala-ragdoll的IP地址,涉及到端口为11114的IP地址都需要进行调整
        location /api/domain {
            proxy_pass http://192.168.1.3:11114/;
            rewrite ^/api/(.*) /$1 break;
        }
      	# 此处IP对应aops-apollo的IP地址
        location /api/vulnerability {
            proxy_pass http://192.168.1.3:11116/;
            rewrite ^/api/(.*) /$1 break;
        }
      
      • 开启aops-hermes服务
      systemctl start aops-hermes
      

      3.2、 漏洞管理

      CVE管理模块在资产管理模块的基础上实现,在部署CVE管理模块前须完成资产管理模块的部署,然后再部署aops-apollo。

      数据服务部分aops-apollo服务的运行需要mysql、elasticsearch、redis数据库的支持。

      3.2.1、 节点信息

      机器编号配置IP部署模块
      机器A192.168.1.1elasticsearch
      机器C192.168.1.3aops-apollo

      3.2.2、 部署步骤

      资产管理

      3.2.2.1、 部署elasticsearch

      • 生成elasticsearch的repo源:
      echo "[aops_elasticsearch]
      name=Elasticsearch repository for 7.x packages
      baseurl=https://artifacts.elastic.co/packages/7.x/yum
      gpgcheck=1
      gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
      enabled=1
      autorefresh=1
      type=rpm-md" > "/etc/yum.repos.d/aops_elascticsearch.repo"
      
      • 安装elasticsearch:
      yum install elasticsearch-7.14.0-1 -y
      
      • 修改elasticsearch配置文件:
      vim /etc/elasticsearch/elasticsearch.yml
      
      # ------------------------------------ Node ------------------------------------
      #
      # Use a descriptive name for the node:
      #
      node.name: node-1
      
      # ---------------------------------- Network -----------------------------------
      #
      # By default Elasticsearch is only accessible on localhost. Set a different
      # address here to expose this node on the network:
      #
      # 此处修改为机器A真实ip
      network.host: 192.168.1.1
      #
      # By default Elasticsearch listens for HTTP traffic on the first free port it
      # finds starting at 9200. Set a specific HTTP port here:
      #
      http.port: 9200
      #
      # For more information, consult the network module documentation.
      #
      
      # --------------------------------- Discovery ----------------------------------
      #
      # Pass an initial list of hosts to perform discovery when this node is started:
      # The default list of hosts is ["127.0.0.1", "[::1]"]
      #
      #discovery.seed_hosts: ["host1", "host2"]
      #
      # Bootstrap the cluster using an initial set of master-eligible nodes:
      #
      cluster.initial_master_nodes: ["node-1"]
      # 跨域配置
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      
      • 重启elasticsearch服务
      systemctl restart elasticsearch
      

      3.2.2.2、 部署aops-apollo

      • 安装aops-apollo
      yum install aops-apollo -y
      
      • 修改配置文件
      vim /etc/aops/apollo.ini
      
      • 将apollo.ini配置文件中各服务的地址修改为真实地址
      [apollo]
      ip=192.168.1.3//此处修改为机器C的真实IP
      port=11116
      host_vault_dir=/opt/aops
      host_vars=/opt/aops/host_vars
      
      [zeus]
      ip=192.168.1.2	//此处修改为机器B的真实IP
      port=11111
      
      # hermes info is used to send mail.
      [hermes]
      ip=192.168.1.2	//此处修改为部署aops-hermes的真实IP,以机器B的IP地址为例
      port=80		//此处改为hermes服务实际使用端口
      
      [cve]
      cve_fix_function=yum
      # value between 0-23, for example, 2 means 2:00 in a day.
      cve_scan_time=2
      
      [mysql]
      ip=192.168.1.1 //此处修改为机器A的真实IP
      port=3306
      database_name=aops
      engine_format=mysql+pymysql://@%s:%s/%s
      pool_size=100
      pool_recycle=7200
      
      [elasticsearch]
      ip=192.168.1.1 //此处修改为机器A的真实IP
      port=9200
      max_es_query_num=10000000
      
      [redis]
      ip=192.168.1.1 //此处修改为机器A的真实IP
      port=6379
      
      [uwsgi]
      wsgi-file=manage.py
      daemonize=/var/log/aops/uwsgi/apollo.log
      http-timeout=600
      harakiri=600
      processes=2
      gevent=100
      

      mysql数据库设置为密码模式,请参阅密码模式下mysql服务配置链接字符串

      • 启动aops-apollo服务
      systemctl start aops-apollo
      

      注意:服务启动前请确保已 初始化aops-apollo数据库

      apollo服务启动失败,且报错内容包含mysql数据库连接失败,请排查是否设置mysql密码,如果是请参阅密码模式下mysql服务启动失败

      3.2.2.3、初始化aops-apollo数据库

      • apollo数据库初始化
      cd /opt/aops/scripts/deploy
      bash aops-basedatabase.sh init apollo
      

      注意:在未安装aops-tools工具包时,也可获取sql脚本通过mysql加载的方式初始化(sql脚本路径:/opt/aops/database/apollo.sql)

      密码模式下mysql数据库初始化

      /opt/aops/scripts/deploy目录不存在

      3.3、 配置溯源

      A-Ops配置溯源在机器管理的基础上依赖gala-ragdoll实现,同样在部署gala-ragdoll服务之前,须完成[资产管理](# 3.1、 资产管理)部分的部署。

      3.3.1、 节点信息

      机器编号配置IP部署模块
      机器C192.168.1.3gala-ragdoll

      3.3.2、 部署步骤

      资产管理

      3.3.2.1、 部署gala-ragdoll

      • 安装gala-ragdoll
      yum install gala-ragdoll python3-gala-ragdoll -y
      
      • 修改配置文件
      vim /etc/ragdoll/gala-ragdoll.conf
      

      将collect节点collect_address中IP地址修改为机器B的地址,collect_api与collect_port修改为实际接口地址

      [git]
      git_dir = "/home/confTraceTest"
      user_name = "user_name"
      user_email = "user_email"
      
      [collect]
      collect_address = "http://192.168.1.3"    //此处修改为机器B的真实IP
      collect_api = "/manage/config/collect"    //此处接口原为示例值,需修改为实际接口值/manage/config/collect
      collect_port = 11111                      //此处修改为aops-zeus服务的实际端口
      
      [sync]
      sync_address = "http://192.168.1.3"
      sync_api = "/manage/config/sync"          //此处接口原为示例值,需修改为实际接口值/manage/config/sync
      sync_port = 11111
      
      [objectFile]
      object_file_address = "http://192.168.1.3"
      object_file_api = "/manage/config/objectfile"   //此处接口原为示例值,需修改为实际接口值/manage/config/objectfile
      object_file_port = 11111
      
      [ragdoll]
      port = 11114
      
      • 启动gala-ragdoll服务:
      systemctl start gala-ragdoll
      

      3.4、客户端安装

      aops-ceres作为A-Ops模块的客户端,通过ssh协议与AOps管理中心进行数据交互,提供采集主机信息、响应并处理中心命令等功能。

      3.4.1、 节点信息

      机器编号配置IP部署模块
      机器D192.168.1.4aops-ceres

      3.4.2、 部署客户端

      yum install aops-ceres dnf-hotpatch-plugin -y
      

      FAQ

      Q1、最大连接数(MaxStartups)

      批量添加主机接口服务执行过程中会受到aops-zeus安装所在主机sshd服务配置中最大连接数(MaxStartups)的限制,会出现部分主机不能连接的情况,如有大量添加主机的需求,可考虑临时调增该数值。关于该配置项的修改可参考ssh文档

      Q2、504网关超时

      部分http访问接口执行时间较长,web端可能返回504错误,可向nginx配置中添加proxy_read_timeout配置项,并适当调大该数值,可降低504问题出现概率。

      Q3、防火墙

      若防火墙不方便关闭,请设置放行服务部署过程涉及的所有接口,否则会造成服务不可访问,影响A-Ops的正常使用。

      Q4、elasticasearch访问拒绝

      elasticsearch分布式部署多节点时,需调整配置跨域部分,允许各节点访问。

      Q5、mysql设置为密码模式

      • 服务配置mysql链接字符串

      mysql数据库链接设置密码模式(例如用户名为root,密码为123456),则需要调整**[mysql]配置节下engine_format**配置项(apollo、zeus同步调整),数据格式如下:

      [mysql]
      egine_format=mysql+pymysql://root:123456@%s:%s/%s
      
      • 初始化脚本aops-basedatabase.sh修改

      aops-basedatabase.sh脚本需要调整145行代码实现

      aops-basedatabase.sh调整前内容如下:

      database = pymysql.connect(host='$mysql_ip', port=$port, database='mysql', autocommit=True,client_flag=CLIENT.MULTI_STAT    EMENTS)
      

      aops-basedatabase.sh调整后内容如下:

      database = pymysql.connect(host='$mysql_ip', port=$port, database='mysql', password='密码', user='用户名', autocommit=True, client_flag=CLIENT.MULTI_STATEMENTS)
      
      • 服务启动时数据库连接错误

      /usr/bin/aops-vulcanus脚本需要调整178行代码实现

      /usr/bin/aops-vulcanus调整前内容如下:

      connect = pymysql.connect(host='$mysql_ip', port=$port, database='$aops_database')
      

      /usr/bin/aops-vulcanus调整后内容如下:

      connect = pymysql.connect(host='$mysql_ip', port=$port, database='$aops_database', password='密码', user='用户名')
      

      注意:当服务器不是以root用户登录时,需添加user="root"或mysql允许链接的用户名

      Q6、配置update源

      echo "[update]
      name=update
      baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/update/$basearch/
      enabled=1
      gpgcheck=0
      [update-epol]
      name=update-epol
      baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/EPOL/update/main/$basearch/
      enabled=1
      gpgcheck=0" > /etc/yum.repos.d/openEuler-update.repo
      

      注意: 其中openEuler-20.03-LTS-SP3 根据部署的系统版本具体调整,或可直接参与openeuler官网中针对repo源配置介绍

      Q7、/opt/aops/scripts/deploy目录不存在

      在执行数据库初始化时,提示不存在**/opt/aops/scripts/deploy**文件目录,执行安装aops-tools工具包

      yum install aops-tools -y
      

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份