FreeBSD 中的防火墙 ipfw

FreeBSD 中的防火墙 ipfw

我对 FreeBSD 中 IPFW 防火墙的功能有疑问。我的场景如下: 在此输入图像描述

所有这些机器都运行 FreeBSD,并且都是虚拟机。问题是我不明白一件事。如果我在防火墙机器的 IPFW 中添加一条规则来阻止从机器 2 到机器 1 的 ping,我不知道为什么这个阻止是双向的。我的意思是,我制定了这条规则:

ipfw add 02000 deny icmp from 10.0.2.2 to 10.0.1.2

据我所知,防火墙将阻止任何从10.0.2.2(图中右侧的机器)到10.0.1.2(图中左侧的机器)的 ICMP 数据包,但实际发生的情况是,机器 2 无法 ping 到机器 1,但是机器1也无法ping通机器2!这是为什么? IPFW的规则如下: 在此输入图像描述

ping 图片: 在此输入图像描述 在此输入图像描述

答案1

如果您从 10.0.2.1 ping 10.0.2.2,则 ping 回复(从 10.0.2.2 到 10.0.2.1)也是一个 icmp 数据包,因此它符合规则并被阻止。

要获得您想要的行为,请将规则更改为:

ipfw add 02000 deny icmp from 10.0.2.2 to 10.0.1.2 icmptypes 8

其中类型 8 是“echo-r​​equest”,类型 0 是“echo-r​​eply”。

或者在2000之前添加一条规则,只允许回复,并继续阻止所有其他ICMP数据包: ipfw add 01999 allow icmp from 10.0.2.2 to 10.0.1.2 icmptypes 0 ipfw add 02000 deny icmp from 10.0.2.2 to 10.0.1.2

答案2

您可以使用 确认机器 2 是否正在接收并响应 ICMP 数据包tcpdump,例如:

sudo tcpdump -i eth0 icmp

在您所描述的情况下,ping不会成功,因为来自机器 2 的返回数据包将被机器 1 上的防火墙阻止。

相关内容