使用Netfilter的NFQUEUE与伯克利数据包过滤器(BPF)进行数据包过滤

问题描述 投票:1回答:1

我刚刚读了in these answers关于在linux中开发数据包过滤器的两个选项。

第一个是使用iptables和netfilter,可能使用NFQUEUElibnetfilter_queue库。

第二种是使用BPF(Berkeley Packet Filter),它似乎在快速阅读中具有类似的过滤功能。

那么,哪些替代方案是创建数据包过滤器的更好方法?有什么区别?我的软件将作为网关代理运行,或者“中间人”应该从一台计算机接收数据包(目的地地址到另一台计算机,而不是过滤器的本地地址),并在一些计算机之后发送过滤。

非常感谢!

linux iptables netfilter bpf
1个回答
0
投票

虽然我的理解仅限于理论,但我在调试Kubernetes网络实现时做了一些阅读,因此可以尝试回答这个问题。

从广义上讲,netfiltereBPF(BPF的后继者)都实现了一个在处理数据包时执行某些逻辑的虚拟机。 netfilter的实施似乎力求与iptables之前的实施兼容,基本上是iptables的更高效的继承者。

但是,使用iptables时仍然存在性能问题 - 特别是当有大量的iptables规则时。 eBPF的结构方式可以缓解一些性能问题;特别:

  • eBPF可以卸载到“智能网络”
  • 可以构建eBPF以更有效地查找规则

虽然它最初用于网络处理,但eBPF也用于内核检测(sysdig,iovisor)。它有一个更大的用例集,但正因为如此,可能是一个更加艰难的学习曲线。

所以,总结一下:

  • 使用您熟悉的内容,除非您遇到性能问题
  • 看看eBPF

相关:

笔记:

  • eBPF是cBPF的继承者,并已在内核中取代它
  • 我出于习惯在这里明确提到了eBPF
© www.soinside.com 2019 - 2024. All rights reserved.