长期支持版本

    一、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备份