j0k*_*ker 6 macos bsd firewall
我正在学习pf安装在Macbook(OS X Mountain Lion)上的数据包过滤器.
我无法理解的一件事是锚点,或者更具体地说,关于锚点的某些特征.你可以用以下形式编写锚点anchor "foo/*".请注意锚名称末尾的星号.我的问题是:这是做什么的?
这就是文档(http://www.openbsd.org/faq/pf/anchors.html)关于这个主题的内容:
由于锚可以嵌套,因此可以指定评估指定锚中的所有子锚:
Run Code Online (Sandbox Code Playgroud)anchor "spam/*"此语法会导致评估附加到垃圾邮件锚点的每个锚点中的每个规则.子锚将按字母顺序进行评估,但不会递归递归.始终相对于定义它们的锚点来评估锚点.
当我读到这个时,它意味着这个锚定义被spam按字母顺序替换为所有子锚.所以,如果spam/foo1和spam/foo2会存在,anchor "spam/*"将被替换anchor "spam/foo1"和anchor "spam/foo2".spam锚点内的其他规则将被忽略.但是看看默认的OS X配置我一定是错的:
$ pfctl -sr
scrub-anchor "com.apple/*" all fragment reassemble
anchor "com.apple/*" all
$ pfctl -a com.apple -sr
anchor "100.InternetSharing/*" all
anchor "200.AirDrop/*" all
anchor "250.ApplicationFirewall/*" all
anchor "300.NetworkLinkConditioner/*" all
Run Code Online (Sandbox Code Playgroud)
所以,根据我的理解,输出pfctl -sr也可以是:
$ pfctl -sr
scrub-anchor "com.apple/*" all fragment reassemble
anchor "100.InternetSharing/*" all
anchor "200.AirDrop/*" all
anchor "250.ApplicationFirewall/*" all
anchor "300.NetworkLinkConditioner/*" all
Run Code Online (Sandbox Code Playgroud)
但是,如果我现在查看ApplicationFirewall规则:
$ pfctl -a com.apple/250.ApplicationFirewall -sr
block drop in inet proto icmp all icmp-type echoreq
block drop in inet6 proto ipv6-icmp all icmp6-type echoreq
Run Code Online (Sandbox Code Playgroud)
此锚点仅包含过滤规则,不包含子锚点.如果我的解释是真的,那么这些不会被星号语法加载.但显然它们是,因为我无法在启用此锚点的情况下ping我的Macbook.
我希望你能理解我的这个语法是什么问题.有人能更清楚地向我解释一下吗?例子会有所帮助.
提前致谢!