pfctl 简介

Sep 27, 2022 • 预计阅读时间 1 分钟

在 macOS 10.10 开始,系统防火墙工具由 ipfw 替换为了 pfctl,关于 pf 防火墙的使用手册可以参考这里: https://murusfirewall.com/Documentation/OS%20X%20PF%20Manual.pdf

开启 IP 转发功能

开启 IPv4 转发功能:

$ sudo sysctl net.inet.ip.forwarding=1

net.inet.ip.forwarding: 0 -> 1

开启 IPv6 转发功能:

$ sudo sysctl net.inet6.ip6.forwarding=1

net.inet6.ip6.forwarding: 0 -> 1

以上操作只是临时生效,重启系统后就恢复默认值。

BTW:网上比较旧的文章写的是 sysctl -w net.inet.ip.forwarding=1 ,多了个 -w 参数, 通过 man sysctl 查看帮助文档看到:The -w option has been deprecated and is silently ignored.,这个参数可以不用了。

使用 pfctl 设置端口转发

简单介绍一下 pf 防火墙的开启和关闭,默认 pf 防火墙是关闭状态。

开启:

$ sudo pfctl -e

No ALTQ support in kernel
ALTQ related functions disabled
pf enabled

关闭:

$ sudo pfctl -d

No ALTQ support in kernel
ALTQ related functions disabled
pf disabled

pf 默认的配置文件路径是 /etc/pf.conf

官方文档里不建议使用 -e, -d 来硬管理 pf 防火墙的开启和关闭,而是应该在最后启用的引用被释放时自动关闭,这样比较管理资源比较优雅:

$ sudo pfctl -E -f /etc/pf.conf

pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

No ALTQ support in kernel
ALTQ related functions disabled
pf enabled
Token : 9782614659941713109

使用 -E 选项开启 pf 并对引用计数,返回一个 Token 值。

然后使用 -X 对 Token 自动管理:

$ sudo pfctl -X 9782614659941713109

No ALTQ support in kernel
ALTQ related functions disabled
pf disabled
macOS
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

Swift Package Tools Version 的写法

Windows 11 安装 Microsoft Store