当启动Falco时,它会加载一些文件,首先加载主(也是唯一的)配置文件,如启动日志所示:
Falco的默认配置文件为 /etc/falco/falco.yaml ,这也是安装时提供配置文件的位置。如有需要,可以在运行Falco时使用-c命令行参数指定配置文件路径。不管文件位置在哪里,配置文件都必须是一个YAML文件,包含所需的键值对。让我们一起看一些常见的配置选项。
最重要的选项之一,也是你在配置文件中能找到的第一个选项,就是要加载的规则文件列表:
除了命名(为了向后兼容),rules_file允许你指定多个条目,每个条目可以是一个规则文件,也可以是一个包含规则文件的目录。如果条目是一个文件,Falco会直接读取它;如果是目录,Falco将读取该目录中的每个文件。
需要注意的是,这里的顺序十分重要。文件将按照所显示的顺序进行加载(目录中的文件将按字母顺序加载)。用户可以通过简单地在列表后面出现的文件中覆盖预定义规则来自定义规则。例如,假设你想关闭规则Write below binary dir(包含在 /etc/falco/falco_rules.yaml 中),你要做的就是编辑 /etc/falco/falco_rules.local.yaml (它出现在列表中上述规则文件的下面,可用于添加本地覆盖)并写入:
Falco提供一组选项来控制输出通道,允许你指定安全通知的目的地。此外,你可以同时启用多个输出通道。你可以很容易地在配置文件 /etc/falco/falco.yaml 中找到这些选项,因为它们的键都以_output作为后缀。
默认情况下,只有两个输出通道被启用:stdout_output和syslog_output,前者指示Falco将警报消息发送到标准输出,后者将警报消息发送到系统日志记录守护进程,它们的配置为:
Falco提供了其他几个高级的内置输出通道,例如:
当file_output被启用时,Falco将把它的警报写到由子键filename指定的文件中。
其他输出通道允许你以更复杂的方式使用警报,并与第三方集成。例如,如果你想将Falco输出传递给本地程序,可以使用如下配置:
启用后,Falco将为每个警报执行程序,并将其内容写入程序的标准输出。你可以将子键program设置为任何有效的shell命令,这也是展示你最喜爱的单行命令的绝佳机会。
如果需要与webhook集成,一个更方便的选择是使用http_output输出通道:
对于每个警报,Falco将向指定的url发送一个简单的HTTP POST请求。这使得Falco与其他工具连接起来非常容易,比如连接Falcosidekick,它可以将警报转发到Slack、Teams、Discord、Elasticsearch等目的地。
最后,Falco还附带了gRPC API和相应的输出grpc_output。启用gRPC API和gRPC输出通道允许你连接Falco到falco-exporter,它会将指标导出到Prometheus。
你可以在Falcosecurity GitHub开源项目中( https://oreil.ly/CF0Bk )找到Falcosidekick和falco-exporter。在第12章中,你将会再次见到这些工具并学习如何使用输出。