• 安装管理后台
    • 快速开始
      • 安装数据库
      • 启动管理后台
    • 高级配置
      • 后台负载均衡
      • ElasticSearch 负载均衡
      • 配置项详细说明
        • Beego 相关
        • OpenRASP 相关
        • 开启 HTTPS
    • 后台运维
      • 升级后台
      • 找回密码
      • 查看后台版本
      • 定期备份
    • 其他说明
      • Logstash 配置
    • FAQ
      • 1. 常见启动失败原因
      • 2. 管理后台打开后空白、按钮点不动等问题
      • 3. ElasticSearch "Result window is too large" 错误
      • 4. 我的主机名显示为 "im-not-resolvable"
      • 5. 管理后台打不开,Chrome 浏览器提示 ERR_CONNECTION_REFUSED
      • 6. 无法发送邮件报警,提示 5XX 错误
      • 7. ElasticSearch X-Pack 使用说明
      • 8. 自己编译的后台,访问前端服务器 8086 端口提示 404 错误
      • 9. 误删ES索引,如何处理?

    安装管理后台

    快速开始

    在开始之前,请先根据 软件下载 里的说明,下载 rasp-cloud.tar.gz,并解压缩到本地。

    安装数据库

    目前,我们使用了 ElasticSearch 和 MongoDB 两种数据库。前者用来存储报警和统计信息,后者用来存储应用、账号密码等信息。

    目前我们对数据库的要求是,

    • MongoDB 版本大于等于 3.6
    • ElasticSearch 版本大于等于 5.6,小于 7.0 具体如何安装数据库,这里不在赘述。

    启动管理后台

    首先,编辑 conf/app.conf 文件,修正 ElasticSearch 和 MongoDB 两个服务器的地址。如果这两个服务器都安装在了本机,且使用默认端口,请跳过此步骤:

    1. [prod]
    2. EsAddr = http://127.0.0.1:9200
    3. EsUser =
    4. EsPwd =
    5. MongoDBAddr = 127.0.0.1:27017
    6. MongoDBUser =
    7. MongoDBPwd =

    关于 MongoDB 认证配置,可参考 mongoDB Linux 认证配置、重置密码、远程登录配置详解 文章操作。

    然后,在终端里执行如下命令,启动后台服务器:

    1. ./rasp-cloud -d

    最后,在浏览器里打开 http://your-ip:8086,登录管理后台。其中用户名固定为 openrasp,初始密码为 admin@123。如果不能访问,请检查防火墙设置,或者检查 logs/api/agent-cloud.log 下面的错误信息。

    登录成功后,请根据 管理后台 - 添加主机 文档,了解如何添加第一台主机。

    高级配置

    后台负载均衡

    在实际场景中,我们需要部署多个服务器,才能处理来自数十万主机的连接。因此,我们将管理后台拆分为 Agent 接口服务器 (AgentServer)前端服务器 (PanelServer)。前者用于跟agent通信,比如心跳、日志上传,可以部署多个;后者用于展示数据、定时报警、修改配置,用户可访问这个后台来查看报警,只能部署一个

    在百度,我们会启动一个前端服务器,

    1. ./rasp-cloud -type=panel -d

    然后在不同的机房,分别启动一个 agent 服务器(使用同一份 conf/app.conf 配置文件即可

    1. ./rasp-cloud -type=agent -d

    服务器部署完成后,请根据 管理后台 - 设置后台信息 文档,将所有的Agent服务器填入。之后就可以在 添加主机 界面上,生成自动安装命令了。

    容量说明: 目前,在2核4GB的主机上,按照3分钟一个心跳计算,大概单台机器可容纳 1000个 客户端。

    ElasticSearch 负载均衡

    在使用ES集群时,EsAddr 填写一个服务器的地址即可。我们自动会调用 /_nodes/ 接口获取全部服务器信息并轮询,以避免单点问题。

    配置项详细说明

    一下配置均为在 conf/app.conf 中配置

    Beego 相关

    常用 beego 配置项如下,更多设置请参考 beego 官网 文档,

    参数说明默认值
    appname应用名称
    httpporthttp 监听端口8086
    runmode运行模式,dev 为开发模式,prod 为线上模式prod
    OpenRASP 相关

    OpenRASP 可用配置项目如下,

    参数说明默认值
    EsAddrElasticsearch 服务器地址,多个地址用逗号隔开http://127.0.0.1:9200
    EsUserElasticsearch 用户名 (X-Pack)
    EsPwdElasticsearch 密码 (X-Pack)
    EsTTLElasticsearch 数据过期时间,单位/天365
    MongoDBAddrMongoDB 连接地址,多个地址用逗号隔开127.0.0.1:27017
    MongoDBName使用的 MongoDB 的数据库名称openrasp
    MongoPoolLimitMongoDB 连接池最大限制2048
    MongoDBUserMongoDB 认证用户名,该用户需要有操作 openrasp 数据库的权限,有认证才需要配置
    MongoDBPwdMongoDB 认证密码
    MaxPlugins每个App最多保留多少插件,超过删除最老的30
    CookieLifeTime登录 cookie 有效期,单位/小时168
    AlarmLogMode报警日志采集模式,file 模式将日志落地到文件,可配合 logstash 上传到 es;es 模式将日志直接写入到 ESes
    AlarmBufferSizees 模式下日志缓冲区大小,当日志量过大,缓冲区满的情况下,将会出现日志丢失300
    AlarmCheckInterval报警检查间隔时间,单位秒120
    开启 HTTPS

    在 conf/app.conf 中加入以下配置即可,修改后重启后台生效:

    1. EnableHTTPS=true
    2. EnableHttpTLS = true
    3. HttpsPort = 443
    4. HTTPSCertFile = "cert.pem"
    5. HTTPSKeyFile = "cert.key"

    后台运维

    升级后台

    请登录到每一台部署了 rasp-cloud 的主机,并按照如下步骤进行升级:

    • 备份原来的配置文件,conf/app.conf
    • 下载新的安装包,解压缩到相同目录
    • 检查是否需要更新配置文件
    • 执行命令 ps aux | grep rasp-cloud 找到后台进程 PID
    • 对上述进程发出 HUP 信号,e.g kill -HUP $PID
    • 检查后台是否可以正常访问

    找回密码

    请登录到后台所在的主机,执行如下命令,根据提示重置密码。目前密码强度要求是 8-50 位,必须包含数字和字母。

    1. ./rasp-cloud -type=reset

    查看后台版本

    请登录到后台所在的主机,执行如下命令即可:

    1. %> ./rasp-cloud -version
    2. 1.0.0 RC1

    定期备份

    在百度,我们以小时级别对 MongoDB 和 ElasticSearch 数据库进行备份。其中,MongoDB 需要备份 openrasp 数据库,可以使用 mongodump + mongorestore 实现;ElasticSearch 需要备份如下索引,可以用 snapshot 方式备份:

    1. real-openrasp-report-data-{appid}
    2. real-openrasp-attack-alarm-{appid}
    3. real-openrasp-policy-alarm-{appid}
    4. real-openrasp-error-alarm-{appid}

    当然,如果公司有DBA团队,可以考虑托管给他们。

    其他说明

    Logstash 配置

    当 AlarmLogMode 设置为 file 时,可使用 Logstash 采集文件日志。Logstash 样例配置如下,使用前请先修正日志路径

    1. input{
    2. file{
    3. path=>[
    4. ## 1. 修改该处,将 $cloud-agent-home 替换为部署的 agent 模式后台的根目录
    5. "$cloud-agent-home/openrasp-logs/attack-alarm/attack.log"
    6. ]
    7. start_position => "beginning"
    8. type => "attack-alarm"
    9. codec => "json"
    10. }
    11. file{
    12. path=>[
    13. ## 2. 修改该处,将 $cloud-agent-home 替换为部署的 agent 模式后台的根目录
    14. "$cloud-agent-home/openrasp-logs/policy-alarm/policy.log"
    15. ]
    16. start_position => "beginning"
    17. type => "policy-alarm"
    18. codec => "json"
    19. }
    20. }
    21. output {
    22. if [type] == "attack-alarm" {
    23. elasticsearch {
    24. ## 3. 修改 ES 地址
    25. hosts => "0.0.0.0:9200"
    26. index => 'real-openrasp-%{type}-%{[app_id]}'
    27. timeout => 30
    28. document_type => '%{type}'
    29. }
    30. }
    31. if [type] == "policy-alarm"{
    32. elasticsearch {
    33. ## 4. 修改 ES 地址
    34. hosts => "0.0.0.0:8200"
    35. index => 'real-openrasp-%{type}-%{[app_id]}'
    36. timeout => 30
    37. document_type => '%{type}'
    38. action => 'update'
    39. document_id => '%{[upsert_id]}'
    40. doc_as_upsert => true
    41. }
    42. }
    43. }

    FAQ

    1. 常见启动失败原因

    日志会打印到 logs/api/agent-cloud.log 里。如果启动时没有增加 -d 参数,我们将同时在前台打印错误消息,e.g

    1. 2018/12/14 09:55:11.393 [I] [environment.go:62] ===== start type: default =====
    2. 2018/12/14 09:55:11.408 [E] [mongo.go:54] [30002] init mongodb failed: no reachable servers

    目前定义的错误如下,

    错误码说明
    30001日志初始化失败,如文件权限问题
    30002MongoDB 初始化失败,如 MongoDB 地址无法连接
    30003ES 初始化失败,如 ES 地址无法连接
    30004配置错误 ,如未配置 Domain
    30005启动模式错误,启动使用了 agent, panel 之外的,不支持模式
    30006管理员密码初始化失败
    30007geoip 初始化失败,如 geoip 数据库文件权限问题
    30008后台管理员用户名密码重置失败
    30009创建默认 app 失败
    30010-d 参数启动后台失败

    具体错误信息请查看 nohup 控制台输出

    2. 管理后台打开后空白、按钮点不动等问题

    我们目前只兼容 Google Chrome 浏览器。如果页面出现任何问题,请按下 F12 调出开发工具,并检查控制台是否有错误输出。如下图中的红色字样:

    console

    如果发现这种问题,请加入QQ群联系我们处理。

    3. ElasticSearch "Result window is too large" 错误

    如果你搜索的时间范围太大,ES 可能会爆出如下错误:

    Result window is too large, from + size must be less than or equal to: [10000] but was [281280]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.

    这是因为你搜索的时间范围很大,导致ES需要对大量的数据进行排序。解决方法是打开 config/elasticsearch.yml,修改或者增加 index.max_result_window 配置,将它调整为一个较大的值。当然,修改这个值会消耗更多的内存。

    4. 我的主机名显示为 "im-not-resolvable"

    在 Java 版本里,我们使用了 InetAddress 来获取主机名称,如果这个主机名在 /etc/hosts 下面没有对应的记录,Java 将抛出 Unknown host 异常。在这种情况下,我们会将主机名设置为 im-not-resolvable,并让程序继续运行。

    解决方法是,在 /etc/hosts 下面为你的主机名添加一条记录:

    1. 127.0.0.1 myhostname

    添加后,重启 Java 服务器生效。再次启动时,我们会注册一个新的agent到后台。

    5. 管理后台打不开,Chrome 浏览器提示 ERR_CONNECTION_REFUSED

    默认情况下,后台监听地址为 0.0.0.0:8086。如果你无法访问服务器,请检查防火墙是否开启对应端口。对于基于 netfilter 的防火墙,你可以执行如下命令开放 8086 端口:

    1. iptables -I INPUT -p tcp --dport 8086 -j ACCEPT

    6. 无法发送邮件报警,提示 5XX 错误

    国内某些免费邮箱,不支持密码登录,需要申请授权码进行登录。如果你在使用下列邮箱,请参考他们的 FAQ 文档进行配置:

    • 网易邮箱: 126/163/yeah.net
    • QQ 邮箱: qq.com/vip.qq.com

    7. ElasticSearch X-Pack 使用说明

    目前,后台使用的索引名称前缀为:

    • real-openrasp-X (alias)
    • openrasp-X 如果你在使用 X-Pack,且需要按照索引名称前缀进行授权,可以根据上述规则添加认证。若要查看当前 ES 的索引和别名列表,可访问如下URL:
    1. http://elasticsearch_hostname:port/_cat/indices?v
    2. http://elasticsearch_hostname:port/_cat/alias?v

    8. 自己编译的后台,访问前端服务器 8086 端口提示 404 错误

    前端文件在 dist 目录下,如果前端服务器返回 404 则说明这个目录不存在,或者 dist/index.html 不存在。

    9. 误删ES索引,如何处理?

    ES索引里只保存报警信息,误删索引不会导致agent信息丢失。若要完全重置ES,请先删除所有以 real-openrasp-openrasp- 开头的索引,并重新启动 rasp-cloud 即可。rasp-cloud 会在启动时检查并重新创建索引。