EBPFSnitch:基于EBPF的Linux应用程序防火墙

2021-03-14 22:00:11

EBPFSnitch是一个基于EBPF和NFQueue的Linux应用程序级防火墙。它由OpenSnitch和Douane的启发,但利用现代内核抽象,而无需内核模块。

EBPFSnitch守护程序在C ++ 20中实现。利用QT5在Python 3中实现的控制接口。

这是一个实验项目。此申请的安全性已由第三方审核,甚至是自己。可能是可以绕过的机制。目前,DaemonControl套接字未经身份验证,攻击者可能会使Self授权的用户界面核发。

EBPFSnitch支持过滤所有基于IPv4的协议(TCP / UDP / ICMP / etc)。过滤IPv6,应在不久的将来支持传入连接。

该项目的核心目标是与集装箱化应用相容。如果应用程序在容器中运行,则包含独立于基本系统或其他容器控制的容器。

另外,可以针对特定系统用户出现目标。不需要为每个用户的Firefox的每个实例的BlanketPermissions。

EBPFSnitch允许的选项:-h [--help]生成帮助消息-v [--version]打印版本--remove规则删除iptables规则 - Group Socket - Rules-Path arg文件加载/存储防火墙规则

控制接口和守护程序使用UNIX套接字进行通信。默认情况下,任何系统用户都可以访问套接字。建议将特定组与套接字连接到限制访问权限。例如 - Group ='轮子'

标记为持久性的防火墙规则存储在AJSON编码中的文件系统上。默认情况下,当前工作目录用于存储File规则.JSON。要指定自定义路径,请使用--rules-path选项。

EBPFSnitch目前需要最近的内核。最低支持的Versionis Linux 5.8。将来可能会降低此所需版本。

每个规则由一组条款组成,以及判决。每个子句与数据包的属性Matchesa属性。如果规则匹配中的每个子句,则该包与该规则匹配,并且使用该规则的验证(允许/拒绝)。

规则由配置优先级排序。每条规则都会尝试直到匹配isfound,并且可以确定判决。如果没有规则与数据包匹配,则DaemonWill将查询发送到接口,然后显示一个对话框,要求创建新规则以匹配该数据包。

默认规则不持久地持续到磁盘,并且当守护程序重新启动规则丢失时丢失。如果通过对话框检查持久性框,则将新rulewilt保存到磁盘,并在重新启动守护程序时处于活动状态。

sudo apt-get安装cmake clang libboost-all-dev libspdlog-dev \ libnetfilter-queue-dev libmnl-dev linux-tools-common nlohmann-json3-dev \ libbpf-dev linux-tools-generic python3 python3-pyqt5