自定义日志过滤器
自定义日志过滤器
功能需求
默认情况下,在 log filter 中配置日志过滤器时(FortiOS 7.0 及以上版本),只能指定某个分类的日志的开启和关闭;对于记录的日志级别,只能指定≥一个级别的日志的记录(例如日志级别设置为 warning,则会记录 warning、error、critical、alert、emergency 级别的所有日志)。
FortiGate # config log disk filter FortiGate (filter) # set ? severity Log to disk every message above and including this severity level. forward-traffic Enable/disable forward traffic logging. local-traffic Enable/disable local in or out traffic logging. multicast-traffic Enable/disable multicast traffic logging. sniffer-traffic Enable/disable sniffer traffic logging. ztna-traffic Enable/disable ztna traffic logging. anomaly Enable/disable anomaly logging. voip Enable/disable VoIP logging. dlp-archive Enable/disable DLP archive logging. FortiGate (filter) # set severity ? emergency Emergency level. alert Alert level. critical Critical level. error Error level. warning Warning level. notification Notification level. information Information level. debug Debug level.有些情况下,用户想要自定义本地或 syslog 日志的类型或级别。
-举例 1:只需要记录或发送流量日志中包含源地址为 192.168.100.77 或 192.168.100.177,同时,协议为 TCP 的日志。 -举例 2:只需要记录或发送事件日志中级别为 alert 或 information,同时用户为 test 的日志。
这种情况下通过简单的 log filter 是无法实现的。
解决方案
通过配置 free-style 类型的 log filter,允许用户为每个日志记录设备配置个性化的日志类型/级别组合。筛选器可以包括日志类别和特定日志字段,可以创建为包含(include)关系和排除(exclude)关系,该方式需要通过 CLI 配置,配置方法如下,可配置多个 free-style ID,多个 free-style ID 过滤的日志均会被记录/发送。
config log disk filter
config free-style
edit <id>
set category <option>
set filter <string>
set filter-type {include | exclude}
next
end
end| 选项 | 说明 |
|---|---|
category <option> | 日志类型: traffic, event, virus, webfilter, attack, spam, anomaly, voip, dlp, app-ctrl, waf, dns, ssh, ssl, file-filter, icap, ztna |
filter <string> | 过滤关键字,可填写多个关键字,通过“or”或“and”字符指定多个关键字之间的关系,举例: set filter "((srcip 192.168.100.77) and (dstip 8.8.8.8)) or (srcip 192.168.100.177)",表示过滤源目 IP 字段为 192.168.100.177 和 8.8.8.8,或源地址为 192.168.100.177 的日志。 |
| filter-type {include exclude} | 过滤器类型: include 表示包含,exclude 表示排除 |
配置举例
我们使用功能需求中的举例 1 和举例 2 来进行配置。
举例 1
只需要记录流量日志中包含源地址为 192.168.100.77 或 192.168.100.177,同时,协议为 TCP 的日志。
在 FortiGate 的 CLI 下配置 free-style 类型的过滤器,需要注意的是,freestyle 过滤的日志类型和级别,需要在 filter 中开启(同理可以配置 syslog 和 FortiAnalyzer 日志的过滤器)。
config log disk filter set forward-traffic enable //首先需要确认流量日志的总开关是开的// set set severity information //freestyle日志记录的流量日志的级别为information,所以filter中的日志级别至少要设置为information// config free-style edit 1 set category traffic set filter "((srcip 192.168.100.77) or (srcip 192.168.100.177)) and proto 6" set filter-type include next end end进入 FortiGate 的“日志 & 报表 → 转发流量”页面,查看相关日志,可以看到只有源地址为 192.168.100.77 或 192.168.100.177,同时,协议为 TCP 的流量日志被记录。

使用 CLI 设置该 freestyle 过滤器,以及过滤器的 dump。
FortiGate # execute log filter free-style "((srcip 192.168.100.77) or (srcip 192.168.100.177)) and (proto 6)" FortiGate # execute log display ... FortiGate # execute log filter dump category: traffic device: disk start-line: 11 view-lines: 10 max-checklines: 0 HA member: log search mode: on-demand pre-fetch-pages: 2 Filter: ((srcip 192.168.100.77) or (srcip 192.168.100.177)) and (proto 6) Oftp search string: (and (or proto==6) (or (or srcip==192.168.100.177) (or srcip==192.168.100.77)))
举例 2
只需要记录或发送事件日志中级别为 alert 或 information,同时用户为 test 的日志。
在 FortiGate 的 CLI 下配置 free-style 类型的过滤器,需要注意的是,freestyle 过滤的日志类型和级别,需要在 filter 中开启(同理可以配置 syslog 和 FortiAnalyzer 日志的过滤器)。
config log disk filter set set severity information //freestyle日志记录的事件日志的级别为warning或information,所以filter中的日志级别至少要设置为information// config free-style edit 1 set category traffic set filter "((level alert) or (level information)) and (user test)" set filter-type include next end end使用 admin 账户登录 FortiGate,进入“日志 & 报表 → 事件 → 系统事件”页面,查看相关日志,可以看到事件日志中只有级别为 alert 或 information,同时用户为 test 的日志。

使用 CLI 设置该 freestyle 过滤器,以及过滤器的 dump。
FortiGate # execute log filter free-style "((level alert) or (level information)) and (user test)" FortiGate # execute log display ... FortiGate # execute log filter dump category: traffic device: disk start-line: 1 view-lines: 10 max-checklines: 0 HA member: log search mode: on-demand pre-fetch-pages: 2 Filter: ((level alert) or (level information)) and (user test) Oftp search string: (and (or user=="test" not-exact) (or (or level=="information" not-exact) (or level=="alert" not-exact)))
举例 3
Syslog 发送的日志中排除本地流量日志、流量日志、应用控制日志和 Web 过滤日志,剩余其他类型日志正常发送。
在 FortiGate 的 CLIconfig log syslogd filter下配置关闭local-traffic发送。配置 free-style 类型的过滤器(同理可以配置 Disk 和 FortiAnalyzer 日志的过滤器)。
重要
set filter "(logid *)"可以表示该分类下的所有日志。
config log syslogd filter
set local-traffic disable
config free-style
edit 3
set category traffic
set filter "(logid *)"
set filter-type exclude
next
edit 4
set category app-ctrl
set filter "(logid *)"
set filter-type exclude
next
edit 5
set category webfilter
set filter "(logid *)"
set filter-type exclude
next
end
end注意事项
在 6.4 版本中 freestyle 的 log filter 配置方式与 7.0 有所不同,6.4 版本中自定义 filter 中多个条件的关系为或(or)。如果 6.4 版本配置了自定义的 log filter 后,再升级到 7.0 版本后,或(or)的关系配置会被转换为与(and)的关系,请在升级后自行手动更改(将 and 改为 or)。
6.4版本: config log disk filter set severity information set filter "event-level(warning) logid(44547)" //6.4版本中filter中的多个条件关系为或(or)// set filter-type include end 7.0版本: config log disk filter config free-style edit 1 set category event set filter "((level warning error critical alert emergency) and (logid 44547))" //升级到7.0后,配置被转换为与(and)的关系// next end end多个 free-style ID 之间为与(and)的关系,多个 free-style ID 过滤的日志均会被记录/发送。