kubernetes--监控容器运行时:Falco

news2025/1/27 12:42:16

目录

Falco介绍

Falco架构

 Falco的安装

告警规则示列

威胁场景测试:

监控容器创建的不可信任进程(自定义规则)

 Falco支持五种输出告警方式falco.yaml:

Falco告警集中化展示:


Falco介绍

Falco是一个Linux安全工具,它使用系统调用来保护和监控系统。

       Falco最初是由Sysdig开发的,后来加入CNCF孵化器,成为首个加入CNCF的运行时安全项目。

       Falco提供了一组默认规则,可以监控内核态的异常行为,例如

  1. 对于系统目录/etc、/usr/bin、/usr/sbin的读写行为
  2. 文件所有权、访问权限的变更
  3. 从容器打开shell会话
  4. 容器生成新进程
  5. 特权容器启动

项目地址: https://github.com/falcosecurity/falco

Falco架构

rule engine:角色引擎,需要配置文件

通过内核中的模块检测系统调用,满足则输出到目标或者设备,手机和存储。支持对k8s审计日志的收集。

 Falco的安装

【】rpm --import https://falco.org/repo/falcosecurity-3672BA8F.asc

【】curl -s -o /etc/yum.repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo

【】yum install epel-release -y

#【】yum update  #更新系统,不更新系统会起不来。falco是一个守护进程

【】yum install falco -y

【】systemctl start falco

【】systemctl enable falco

【】lsmod|grep falco

报此错可以考虑升级内核3.10.0-1160.el7.x86_64

falco配置文件目录:/etc/falco

  1. falco.yaml   falco配置于输出告警通知方式
  2. falco_rules.yaml  规则文件,默认已经定义很多威胁场景
  3. falco_rules.loacl.yaml   自定义扩展规则文件
  4. k8s_audit_rules.yaml  K8s审计日志规则

安装文档:https://falco.org/zh/docs/installation

告警规则示列

(falco_rules.local.yaml):

- rule: The program "sudo" is run in a container
  desc: An event will trigger every time you run sudo in a container
  condition: evt.type = execve and evt.dir=< and container.id != host and proc.name = sudo
  output: "Sudo run in container (user=%user.name %container.info parent=%proc.pname 
cmdline=%proc.cmdline)"
  priority: ERROR
  tags: [users, container]

参数说明:

  1. rule:规则名称,唯一
  2. desc:规则的描述
  3. condition:条件表达式
  4. output:符合条件事件的输出格式
  5. priority:告警的优先级
  6. tags:本条规则的tags分类

威胁场景测试:

       falco_rules.yaml(默认规则),里面的写法和标准写法不太一样,好多是类似于变量的重复引用所以可以简写

1、监控系统二进制文件目录读写(默认规则) $PATH目录

2、监控根目录或者/root目录写入文件(默认规则)

3、监控运行交互式Shell的容器(默认规则)进入容器会被监控

4、监控容器创建的不可信任进程(自定义规则)

验证:tail -f /var/log/message

监控容器创建的不可信任进程(自定义规则)

监控容器创建的不可信任进程规则,在falco_rules.local.yaml文件添加:以nginx为例

- rule: Unauthorized process on nginx containers
  condition: spawned_process and container and container.image 
startswith nginx and not proc.name in (nginx)
#运行新镜像,必须是容器,并且容器镜像开头是nginx 并设置白名单
  desc: test
  output: "Unauthorized process on nginx containers (user=%user.name container_name=%container.name container_id=%container.id image=%container.image.repository shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline terminal=%proc.tty)"
  priority: WARNING

condition表达式解读:

• spawned_process 运行新进程

• container 容器

• container.image startswith nginx 以nginx开头的容器镜像

• not proc.name in (nginx) 不属于nginx的进程名称(允许进程名称列表)

重启falco应用新配置文件:

systemctl restart falco

测试

 

 Falco支持五种输出告警方式falco.yaml:

  1. 输出到标准输出(默认启用)
  2. 输出到文件
  3. 输出到Syslog(默认启用)
  4. 输出到HTTP服务
  5. 输出到其他程序(命令行管道方式)

告警配置文件:/etc/falco/falco.yaml

例如输出到指定文件:将上面的json_output: false改为true  json方便后面的分析

file_output:
  enabled: true
  keep_alive: false#改为true是持续写入保持打开状态,false是有事件再打开写入	 
  filename: /var/log/falco_events.log

 上下两个也可以关了,没必要重复收集影响性能

Falco告警集中化展示:

 

  1. FalcoSideKick:一个集中收集并指定输出,支持大量方式输出,例如influxdb、Elasticsearch等

       项目地址:https://github.com/falcosecurity/falcosidekick

  1. FalcoSideKick-UI:告警通知集中图形展示系统

       项目地址 https://github.com/falcosecurity/falcosidekick-ui

部署Falco UI:

#输出给ui  falcosidekick收集数据,ui的容器端口为2802  数据接口是2801
docker run -d \
-p 2801:2801 \
--name falcosidekick \
-e WEBUI_URL=http://11.0.1.21:2802 \
falcosecurity/falcosidekick

 【】docker run -d -p 6379:6379 redislabs/redisearch:2.2.4


docker run -d \
-p 2802:2802 \
-e FALCOSIDEKICK_UI_REDIS_URL=11.0.1.21:6379 \
--name falcosidekick-ui \
falcosecurity/falcosidekick-ui

修改falco配置文件指定http方式输出:

json_output: true
json_include_output_property: true
http_output:
  enabled: true
  url: "http://192.168.31.71:2801/"

UI访问地址:http://192.168.31.71:2802/ui/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用chatgpt来提高你的编程能力,简直如虎添翼

下面大家跟着我的问题&#xff0c;可以跟着我一起向 chatgpt老师学习&#xff0c;相信我的问题可能你也会感兴趣。在Java中&#xff0c;boolean类型的数组默认初始化为false。也就是说&#xff0c;如果你创建了一个boolean类型的数组&#xff0c;但是没有初始化它&#xff0c;那…

嵌入式 Linux进程间通信之信号量

目录 一、信号量 1、信号量概述 2、什么是信号量 3、信号量的分类 4、进程获取共享资源要执行的操作 5、System V IPC 机制&#xff1a;信号量 5.1 semget函数 5.2 semop函数 5.3 semctl函数 一、信号量 1、信号量概述 信号量集&#xff1a;由若干个信号组成的集合&a…

JUC并发编程之Semaphore-应用与深度源码剖析

目录 JUC并发编程之Semaphore-应用与深度源码剖析 1. Semaphore 是什么&#xff1f; 2.怎么使用Semaphore&#xff1f; 2.1构造方法 2.2 重要方法 2.3 基本使用 需求场景 基础版代码实现 tryAcquire()引入代码实现 acquireUninterruptibly(),acquire()对比代码实现 3.…

【C++】C++11——简介|列表初始|简化声明|nullptr与范围for|STL中的变化

文章目录一、C11简介二、列表初始化三、简化声明四、nullptr与范围for五、STL中一些变化一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于TC1主要是对C98标准中的漏洞进行修复…

Easyrecovery16免费的电脑硬盘恢复数据软件

在我们的日常生活和工作中&#xff0c;很容易发生一些意外情况&#xff0c;比如误删文件。这种情况下&#xff0c;您可能会感到非常困惑和担心&#xff0c;担心文件已经永久丢失&#xff0c;无法恢复。但是&#xff0c;在大多数情况下&#xff0c;即使您误删了文件&#xff0c;…

Nativefier把网页打包成exe

前要&#xff1a; 今天遇到一个需求&#xff0c;之前的应用都是用的h5挂载在企业微信的小应用&#xff0c;但是现在需要电脑运行的exe安装包&#xff01; 所以需要用到nativefier导报工具&#xff1a;nativefier是一个使用electron将网页转换为app的插件&#xff0c;写这篇博客…

二、SpringMVC注解式开发

1. RequestMapping注解 此注解就是来映射服务器访问的路径 可加在方法上,是为此方法注册一个可以访问的名称(路径) 可以加在类上,相当于是包名(虚拟路径),区分不同类中相同的action的名称 可区分get请求和post请求 package com.powernode.controller;import org.springframe…

liunx下安装node exporter

1 建立文件夹 cd /opt mkdir software 下载最新的包&#xff0c;并解压 https://prometheus.io/download/ 下载 curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz 3.解压 tar -xvf node_exporter-0.…

Gorm根据关系模型中的属性查询原模型数据

type ExamResult struct {gorm.ModelExamManagementID uintExamManagement ExamManagement json:"examManagement" // 一场考试&#xff0c;其中有试卷&#xff0c;有试题&#xff0c;有试题答案//MarkExamPaperRecord MarkExamPaperRecord //每一场考试对应的结…

测试经理:“你做了三年测试,连服务端的接口测试都不会?”

服务端的接口测试我们一般从功能开始进行测试&#xff0c;比如请求参数和响应参数的校验&#xff0c;业务逻辑或业务规则的校验&#xff0c;数据库操作的校验。 功能正常后会根据需要进行安全相关的检查、性能测试以及系列扩展测试&#xff0c;比如与历史版本的兼容性测试、接…

【微信小程序】-- WXS 脚本(二十九)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

【Java基础】Linux系统

CONTENT一、常用命令时间日期关机&重启登录&注销运行级别找回root用户密码&#xff08;CentOS 7&#xff09;二、文件管理显示当前工作路径显示文件和目录切换目录创建文件&目录删除文件&目录拷贝文件&目录移动文件&目录 / 重命名查找文件&目录查看…

java启动命令中-D和--的区别

目录一、java -D 添加参数二、java -- 添加参数在 SpringBoot 项目中&#xff0c;启动时&#xff0c;通过 -D 或 -- 添加参数&#xff0c;都可以直接覆盖 yml 或 properties 配置文件中的同名配置&#xff0c;如果不存在则相当于添加了一个配置。 一、java -D 添加参数 java -D…

【面试题】三道面试题让你掌握JavaScript中的执行上下文与作用域以及闭包

前言大厂面试题分享 面试题库前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库大家好&#xff0c;笔者呢最近再回顾JavaScript知识时&#xff0c;又看到了JavaScript的一些较为常见的内容&#xff0c;仔细看了之后发现…

1-1 微服务架构概述

文章目录微服务架构概述1-1. 系统进化理论概述集中式系统&#xff1a;分布式系统1-2. 系统进化理论背景1-3. 什么是微服务架构1-4. 微服务架构的优缺点1-5. 为什么选择 Spring Cloud 构建微服务认识 Spring Cloud2-1. Spring Cloud 是什么2-2. Spring Cloud 的版本2-3 Spring C…

2.2操作系统-进程管理:前趋图、前趋图与PV操作

2.1操作系统-进程管理&#xff1a;前趋图\前趋图与PV操作前趋图前趋图与PV操作练习前趋图与PV操作&#xff0c;一般出现了&#xff0c;分值在2~3分左右&#xff0c;技巧性很强。 前趋图 前趋图是为了描述一个程序的各部分间的依赖关系&#xff0c;或者是一个大的计算的各个子…

【c++类与对象 】

目录&#xff1a;前言一、基础引入1.类的定义2.类的权限3.类的封装4.类的实例化5.计算类对象的大小结构体内存对齐规则空类的大小二、this指针this引入this指针的特性经典例题三、类的六个默认成员函数1、构造 && 析构构造函数析构函数2、拷贝 && 赋值拷贝构造…

display:inline-flex使用

凡是使用了display:inline-flex布局的容器&#xff08;不管是行内元素还是块级元素&#xff09;&#xff0c;将会变为弹性容器&#xff0c;它的宽高都将可以被设置&#xff0c;并且该容器整体对外表现为一个行内块元素。 span也可以设置宽高&#xff0c;并且div和span它们都没有…

【C++】缺省参数函数重载

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、缺省参数1.1 缺省参数的概念1…

关于new和delete的一些思考,为什么不能在析构函数中调用delete释放对象的内存空间,new和delete的原理

最近在写代码的时候&#xff0c;觉得每次new出来的对象都需要去delete好麻烦&#xff0c;于是直接把delete写到了析构函数中&#xff0c;在析构函数里面写了句delete this&#xff0c;结果调用析构函数的时候死循环了&#xff0c;不是很理解原因&#xff0c;于是去研究了一下。…