使用 IceFloor 在 OSX 上安装 PF 防火墙

使用 IceFloor 在 OSX 上安装 PF 防火墙

我已经在运行 Server 3.0.2 的 OSX 10.9 系统上使用 IceFloor 设置了 pf。一切似乎都很好,只是我无法使用 DNS 名称或来自 localhost 的公共 IP 连接到系统。例如,我可以从互联网连接到 http/端口 80,但不能使用公共 IP 从机器本身连接到。从机器到 localhost/127.0.0.1 的连接正常。这是我收到的日志(xxxx 是主机的公共 IP):

rule 7/0(match): block in on en0: x.x.x.x.80 > x.x.x.x.64460: Flags [R.], seq 1, ack 1, win 65535, length 0

以下是规则列表

$ sudo pfctl -s rules
[sudo] password for paul: 
No ALTQ support in kernel
ALTQ related functions disabled
scrub-anchor "icefloor.nat" all fragment reassemble
anchor "icefloor.nat" all
block drop in quick from <emergingthreats> to any
block drop out quick from any to <emergingthreats>
block drop in log quick from <_blacklist> to any
block drop out log quick from any to <_blacklist>
block drop in quick from no-route to any
block drop in quick from urpf-failed to any label "uRPF"
block drop log inet all label "Generic_blocks_(IPv4)"
block drop log inet6 all label "Generic_blocks_(IPv6)"
anchor "icefloor.groupblocks" all label "Blocks"
anchor "inspector.blocks" all label "Temp_blocks"
anchor "icefloor.exceptions" all label "Logs_exceptions"
anchor "icefloor.portknocking" all label "Hidden_services"
anchor "icefloor.genericipv6" all
anchor "icefloor.inbound" all label "Local_services"
anchor "icefloor.outbound" all label "All_traffic"
anchor "icefloor.outbound_nat" all label "NAT_clients_traffic"
anchor "icefloor.custom_rules" all

你能告诉我rule 7/0(match)是哪一个吗?为什么不允许从本地主机连接到公钥(在任何开放端口上)?这与no-routef 规则有关吗?还是两个Generic_blocks_-规则?

提前致谢,

保罗

答案1

我也遇到了这个问题,经过一番测试才弄清楚tcpdump

回答你的第一个问题,哪一个是rule 7/0(match):它是 IceFloor 自动添加的“Generic_blocks_(IPv4)”规则,用于阻止和记录所有未明确授权的流量。你可以pfctl -gsr以 root 身份运行来确认该规则的编号。

继续说为什么会被阻止。入站连接被阻止了。这与 no-route 或任何其他内容无关可见的规则集。它与本地处理 DNS 名称的方式有关。您的机器的路由表 ( ) 中有一个指向接口netstat -r的 DNS 名称条目。localhostlo0

日志条目包含一些令人费解的信息,特别是block in on en0,这让您相信接口 上发生了一些事情en0。但是,执行tcpdump -nvvvi en0 tcp and port 80表明实际上没有数据包在 上传输en0。但是,发现了 的数据包tcpdump -nvvvi lo0 tcp and port 80,从而证实流量(如预期)发生在 上lo0

默认的 IceFloor 配置 ( /Library/IceFloor/icefloor.conf) 是用包含 的一行生成的set skip on lo0。乍一看,这似乎是一行非常标准、受欢迎的行(参见http://www.openbsd.org/faq/pf/options.html)。 的其他部分lo0似乎不受 pf 规则的阻碍。凭直觉,我决定注释掉该行并添加一条新规则(就在表包含之后):pass quick on lo0。使用此修改后的配置重新加载后,我成功地通过我的 DNS 名称访问了我的 Web 服务器(问题解决了)。所以看起来该set skip on lo0行有一些问题。

手动修改文件的缺点icefloor.conf是,它会阻止您使用 IceFloor 界面中的“防火墙”选项卡。因为保存新配置将覆盖任何手动编辑。

相关内容