#macos #firewall #packet #filter #pf #api-bindings

pfctl

用于与 macOS 上的数据包过滤器(PF)防火墙交互的库

11 个版本

0.5.0 2024 年 7 月 24 日
0.4.5 2022 年 12 月 28 日
0.4.4 2021 年 10 月 8 日
0.4.1 2021 年 2 月 23 日
0.1.0 2017 年 12 月 20 日

#7macOS 和 iOS API

Download history 1445/week @ 2024-05-02 1632/week @ 2024-05-09 1809/week @ 2024-05-16 1363/week @ 2024-05-23 1902/week @ 2024-05-30 1554/week @ 2024-06-06 1270/week @ 2024-06-13 1832/week @ 2024-06-20 1345/week @ 2024-06-27 1519/week @ 2024-07-04 1383/week @ 2024-07-11 1426/week @ 2024-07-18 2311/week @ 2024-07-25 1767/week @ 2024-08-01 2070/week @ 2024-08-08 1990/week @ 2024-08-15

8,638 每月下载量

MIT/Apache

220KB
6.5K SLoC

pfctl

用于与 macOS 上的数据包过滤器(PF)防火墙交互的库。

通过 ioctl 系统调用和 /dev/pf 设备控制 macOS 上的 PF 防火墙。

读取和写入 /dev/pf 需要 root 权限。因此,任何使用此 crate 的程序都必须以超级用户身份运行,否则创建 PfCtl 实例将会因“权限被拒绝”错误而失败。

操作系统兼容性

PF 是大多数(所有?)BSD 系统中使用的防火墙,但此 crate 目前仅支持 macOS 变体。如果能够在更多 BSD 系统上使其工作,那将是很好的,但到目前为止还没有在这方面投入工作。

用法和示例

有关如何使用此 crate 的各种功能的示例可以在 集成测试示例 中找到。

以下是一个简单的示例,说明如何启用防火墙并添加数据包过滤规则

extern crate pfctl;

// Create a PfCtl instance to control PF with:
let mut pf = pfctl::PfCtl::new().unwrap();

// Enable the firewall, equivalent to the command "pfctl -e":
pf.try_enable().unwrap();

// Add an anchor rule for packet filtering rules into PF. This will fail if it already exists,
// use `try_add_anchor` to avoid that:
let anchor_name = "testing-out-pfctl";
pf.add_anchor(anchor_name, pfctl::AnchorKind::Filter).unwrap();

// Create a packet filtering rule matching all packets on the "lo0" interface and allowing
// them to pass:
let rule = pfctl::FilterRuleBuilder::default()
    .action(pfctl::FilterRuleAction::Pass)
    .interface("lo0")
    .build()
    .unwrap();

// Add the filterig rule to the anchor we just created.
pf.add_rule(anchor_name, &rule).unwrap();

系统绑定

有关如何生成系统库的 Rust 绑定的说明,请参阅 generate_bindings.sh 中的注释

许可证:MIT/Apache-2.0

依赖项

~1–1.6MB
~35K SLoC