字数 1435,阅读大约需 8 分钟
上篇整合飞牛 NAS 的安全监控和日志收集,全方位安保呵护!我是以 agent 模式进行部署在测试环境的飞牛 NAS 里的,这种模式也是最推荐的,可以享受 wazuh 最全的功能,比如主动防御能力。然而我生产环境的飞牛 NAS 却采用了免 agent 模式,不是我不想 agent,是不能那样做,奈何家庭网络资源条件有限!
如果我资源充沛,毋庸置疑,我非军事化区、内网可信区、内网保密区各来一套 wazuh,美滋滋,但是那是不可能的,我前年没给服务器扩内存,现在这逆天行情就此作罢,在安全面前适当妥协,尽可能提升一点安全性,免得装了 agent 共用一套非信任区的 wazuh 管理平台,把非信任区的安全风险引渡到信任区,我这些年的安全建设岂不白忙活?免 agent 就免吧,能达到安全监控目的就好。我飞牛 NAS 主机的一个策略就是,wazuh 的告警日志一直保留,归档日志则保留最近 180 天的日志,满足日常的各种审计,协助排查故障之类的。下图是记录的飞牛 NAS 一些 ssh 敏感活动日志。

wazuh 的免 agent 模式一是可以用在我这种严格网络区域隔离场景,还可以用在不支持 agent 的网络设备里,比如 openwrt、路由器、防火墙等,只要支持标准的 syslog 日志外发即可,事实上很多都支持。在满足这个基本条件之后,就能享受 wazuh 天然自带的安全检测能力,你只管外发给它,它会自动检测,异常部分就会入库到告警日志里边,非常的人性化。
既然用到了 syslog,就得有服务接收端,wazuh 早就考虑到这个问题,只是默认并未开启,在 manager 容器里把 syslog 服务开启吧,在/var/ossec/etc/ossec.conf的 1514 端口下边加上如下配置监听 514 端口。
...
<remote>
<connection>syslog</connection>
<port>514</port>
<protocol>udp</protocol>
<allowed-ips>0.0.0.0/0</allowed-ips>
<local_ip>0.0.0.0</local_ip>
</remote>
...我飞牛 NAS 上有两个自定义的日志需要额外自行处理外,一个是 traefik、一个雷池 waf,其他默认全部转发即可,由于这两个日志都是纯 json 格式,我拿雷池 WAF 作为示例配置,新建一个雷池 waf 的日志监控配置/etc/rsyslog.d/safeline.conf,内容如下:
module(load="imfile" PollingInterval="1")
global(
workDirectory="/var/spool/rsyslog"
privDropToGroup="adm"
)
input(
type="imfile"
File="/vol1/1000/tools/safeline/data/logs/waf-*.log"
Tag="safeline:"
PersistStateInterval="25000"
reopenOnTruncate="on"
addMetadata="on"
Severity="info"
Facility="local7"
)这里需要特别注意一个小细节,不然会比较坑,我捣腾了老久才搞定,Tag 后边一定记得加个冒号,不然 wazuh 死活无法解析 promgram_name。然后在 rsyslog 主配置里/etc/rsyslog.conf末尾加一条全部转发规则就可以了,不要追加任何格式日志模版,就光秃秃的就好。
*.* @10.32.8.3:514日志源头算是到位了,接着回到 manager 容器里边。配置自定义解码规则,在/var/ossec/etc/decoders/local_decoder.xml加上如下内容:
<decoder name="safeline_parent">
<program_name>safeline</program_name>
</decoder>
<decoder name="safeline_child">
<parent>safeline_parent</parent>
<plugin_decoder offset="after_parent">JSON_Decoder</plugin_decoder>
</decoder>配置自定义匹配规则,在/var/ossec/etc/rules/local_rules.xml加上如下内容:
<group name="safeline,waf,">
<rule id="100013" level="12">
<program_name>safeline</program_name>
<description>Safeline WAF logs grouped.</description>
<options>no_full_log</options>
</rule>
<rule id="100014" level="3">
<if_sid>100013</if_sid>
<field name="attack_type">超时</field>
<description>Safeline WAF logs grouped.</description>
<options>no_full_log</options>
</rule>
<rule id="100015" level="3">
<if_sid>100013</if_sid>
<field name="policy_name">全局黑名单封禁规则</field>
<description>Safeline WAF logs grouped.</description>
<options>no_full_log</options>
</rule>
</group>像之前用 agent 采集雷池纯 json 日志是通过@source 的标签来辨别源头,这次 rsyslog 外发过来的就是标准的 syslog 头,直接通过程序名或主机名来辨别即可。
至此核心的配置就算完结了,记得如果需要开启全量日志归档功能,需要在 manager 容器主配置里开启 logall 和 logall_json,同时还需要在 filebeat 里配置开启归档模块,最后还需要在 wazuh 面板里加归档索引,才能在 wazuh 的面板里看到效果。至于告警通知可参考往期文章实现,外置的 python 脚本,其实定制性挺强的!各位可以尝试配置一个 ssh 枚举告警通知,挺酷的。
评论区