【问题标题】:How does Pfctl set firewall rules to kernel extensionPfctl 如何为内核扩展设置防火墙规则
【发布时间】:2018-10-03 12:05:14
【问题描述】:

我想构建一个基于守护进程的进程来配置网络内核模块防火墙功能。

目前,我可以使用pfctl 和描述过滤规则的各种配置文件来控制这个内核防火墙。但是,我希望首先使用 C++/Objective-C API 将规则注入到数据包中。

例如,要在我的设置中阻止来自任何网络接口的 IP 地址,需要将block from any to <ip_addr> 添加到/etc/pf.conf 文件并通过sudo pfctl -d 重新加载防火墙,然后sudo pfctl -e -f /etc/pf.conf

是否有任何选项可以使用ioctl 或其他系统调用直接与内核防火墙通信?

编辑: pfctl 的源代码是here,但我仍在尝试破译如何生成正确的 ioctl 命令以设置新规则..

【问题讨论】:

    标签: macos system-calls ioctl darwin xnu


    【解决方案1】:

    您在链接中添加的源代码是 pf 子系统本身(在内核中)的源代码,而不是 pfctl(8) 实用程序的源代码。但是,如果您在 XNU 源代码中查看 pf.c 旁边的内容,您将在 pf_var.h (http://newosxbook.com/src.jl?tree=xnu&ver=4570.41.2&file=bsd/net/pfvar.h) 中看到以 DIOCSTART 开头的 PF IOCTL 的完整列表。这应该为您提供添加规则、删除、修改等所需的所有信息。只需打开 /dev/pf,您就可以直接使用 ioctl(2)s。另一个想法是在 lldb 下运行 pfctl(在 ioctl 上有一个断点),看看规则(第三个 ioctl 参数)在内存中的样子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2022-12-23
      • 1970-01-01
      • 2015-06-17
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多