Networking
使用 eBPF 阻止程序的網路訪問?
我知道 XDP 可用於丟棄數據包/控製網路,但是我們如何在程序級別實現類似的事情呢?
核心不知道我們正在執行什麼程序,那麼如何使用 eBPF(類似於Opensnitch)阻止特定程序的網路訪問?
OpenSnitch 不會使用 eBPF 阻止數據包。
它確實使用 eBPF,但用於跟踪核心堆棧中不同點的數據包,並收集有關這些數據包的指標和元數據,包括有關相關流所附加到的程序的資訊。您可以在 OpenSnitch 的目錄中查看相關的探針。
然後這些資訊通過 eBPF 映射傳遞到使用者空間,使用者空間代理插入新規則
iptables
或nftables
阻止數據包。(它可以使用 XDP 程序代替阻塞,但您仍然需要將收集數據的跟踪程序與網路堆棧中用於阻塞數據包的任何程序分開。)如果你想在系統範圍內設置一些東西來丟棄與特定程序相關的數據包,你可能想要採用類似的方法:設置一個跟踪部分來辨識連接與哪個程序相關,然後將此資訊提供給另一個丟棄數據包的組件。
相反,如果您已經確定了要監視的特定程序,並且要為其過濾數據包(允許一些,但不是所有數據包),那麼您可以使用其他一些 eBPF 掛鉤(套接字或 cgroup -related) 將程序附加到特定的套接字或網路堆棧函式。