我在使用为 OSSEC 3.7.0 定义的自定义解码器时遇到了一些问题。我只需要从我的日志中提取和srcip
,但 OSSEC 的解码器还会提取和,而我不需要这些。我的解决方案是定义另一个解码器,只提取我想要的字段(dstip
protocol
iptables
srcport
dstport
如果您有更好的解决方案,请分享!)。
这是我做的:
我把这个解码器放在里面/var/ossec/etc/decoder.xml
(iptables
和iptables-1
解码器之间):
<decoder name="iptables-noports">
<parent>iptables</parent>
<type>firewall</type>
<prematch_pcre2>^NOPORTS IN=</prematch_pcre2>
<pcre2>^\S+ .+ SRC=(\S+) DST=(\S+) .+ </pcre2>
<pcre2>PROTO=(\w+) </pcre2>
<order>srcip,dstip,protocol</order>
</decoder>
我配置了 OSSEC 来分析该/var/log/ulog/syslogemu.log
文件。由于我在 Docker 容器内运行所有内容,因此我必须将所有日志重定向到此文件,因为网络命名空间中的日志消息被故意抑制。
iptables
我用来生成日志的命令是:
iptables -A INPUT -p tcp -j NFLOG --nflog-group 0 --nflog-prefix "kernel: NOPORTS"
然后,我在里面定义了这个测试规则/var/ossec/rules/local_rules.xml
:
<rule id="100009" level="1">
<if_sid>4100</if_sid>
<decoded_as>iptables</decoded_as>
<description>Individual TCP SYN request detected</description>
<dstip>192.168.1.1</dstip>
</rule>
完成所有这些后,我通过运行以下命令来测试我的规则:
/var/ossec/bin/ossec-logtest -U 100009:1:iptables
并提供此日志条目(我从中复制粘贴syslogemu.log
):
Nov 9 16:58:35 myserver kernel: NOPORTS IN=eth0 OUT= MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.2 DST=192.168.1.1 LEN=44 TOS=00 PREC=0x00 TTL=50 ID=38150 PROTO=TCP SPT=49448 DPT=4445 SEQ=4283765322 ACK=0 WINDOW=1024 SYN URGP=0 MARK=0
这是我得到的输出:
2023/11/10 10:32:04 ossec-testrule: INFO: Reading local decoder file.
2023/11/10 10:32:04 ossec-testrule: INFO: Started (pid: 1656).
ossec-testrule: Type one log per line.
Nov 9 16:58:35 myserver kernel: NOPORTS IN=eth0 OUT= MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.2 DST=192.168.1.1 LEN=44 TOS=00 PREC=0x00 TTL=50 ID=38150 PROTO=TCP SPT=49448 DPT=4445 SEQ=4283765322 ACK=0 WINDOW=1024 SYN URGP=0 MARK=0
**Phase 1: Completed pre-decoding.
full event: 'Nov 9 16:58:35 myserver kernel: NOPORTS IN=eth0 OUT= MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.2 DST=192.168.1.1 LEN=44 TOS=00 PREC=0x00 TTL=50 ID=38150 PROTO=TCP SPT=49448 DPT=4445 SEQ=4283765322 ACK=0 WINDOW=1024 SYN URGP=0 MARK=0 '
hostname: 'myserver'
program_name: 'kernel'
log: 'NOPORTS IN=eth0 OUT= MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.2 DST=192.168.1.1 LEN=44 TOS=00 PREC=0x00 TTL=50 ID=38150 PROTO=TCP SPT=49448 DPT=4445 SEQ=4283765322 ACK=0 WINDOW=1024 SYN URGP=0 MARK=0 '
**Phase 2: Completed decoding.
decoder: 'iptables'
srcip: '192.168.1.2'
dstip: '192.168.1.1'
proto: 'TCP'
**Phase 3: Completed filtering (rules).
Rule id: '100009'
Level: '1'
Description: 'Individual TCP SYN request detected'
lf->decoder_info->name: 'iptables'
ut_decoder_name : 'iptables'
0
如您所见,它按预期工作。但是,如果我实际尝试运行 OSSEC,它不会检测到任何东西。如果我删除自定义解码器并重新启动 OSSEC,它会再次开始工作。为什么?我该如何修复它?