我提出了一个问题这里,但是我发现了一些新元素,所以我更愿意开辟一个新的。
这是我的情况,可以重现:
全新 Centos7 操作系统。配置两个接口 eth1 和 eth2,IP 地址分别为 X 和 Y
-----------------> @X CENTOS @Y -----------------> @Z -------
dst_IP = A dst_IP = A
src_IP = B dst_IP = B
编辑 /etc/firewalld/zones/TEST.xml,添加两个接口,激活伪装。firewalld 目标默认设置为“default”。
添加以下路线:
Destination Gateway GenMask
A Z 255.255.255.255
然后激活 ip forward 并停用 rp_filter :
sysctl net.ipv4.ip_forward=1
sysctl net.ipv4.conf.eth1.rp_filter=2
sysctl net.ipv4.conf.eth2.rp_filter=2
在这种情况下,如果我将数据包 (@dest=A) 路由到 CentOS,该包裹被路由至 Z。 -> 为什么防火墙不阻止它?因为没有规则接受它
如果我禁用伪装,该包裹不再被路由。 -> 为什么?
在激活伪装的情况下,如果我将目标从默认更改为 DROP,则 paquet 不再路由 -> 因此“默认”目标并不严格等同于“DROP”目标。到底有什么区别?我找不到有关此内容的任何信息
答案1
首先,您正在激活rp_filter
它,而不是停用它(要停用,您必须将其设置为零)。
信息关于反向路径过滤。
有一个问题很容易回答:没有伪装,目标路由器可以看到源 IP 为 B,但没有正确的路由来发送回复。由于这个原因以及反向路径过滤,数据包被丢弃。
其次,您必须区分防火墙和转发防火墙。一个用于将其中一个接口 IP 作为目标/源 IP(即来自/前往设备!)的数据包,另一个用于仅通过设备的数据包。
那么发生了什么?您的 CentOS 看到一个数据包,其源 IP 为 B,目标 IP 为 A,并正在尝试转发它。为此,它查看其路由表 - 有一个活动的路由,所有发往目标 A 的数据包都应通过路由器 Z。
现在伪装开始生效 - 源 IP B 被 Y 替换,并且数据包被转发到 Z - 仍然使用目标 IP A!
我只能猜测防火墙的作用 - 您必须发布完整的防火墙规则集才能看懂 - 但我的猜测是,您混淆了“通过 Z 路由”和“目的地 Z”。后者可能会被丢弃,而前者则不会。
请发布完整的防火墙规则集以获得最终答案!
答案2
更精确:
对于这个问题,我只考虑这样一个事实:在 Centos 接口 @Y 上监听时,数据包被路由或丢弃。我没有考虑 Z 的回复,如果我在不调整 Z 配置的情况下在 CentOS 上激活/停用伪装,那实际上不起作用。
在这种情况下,如何解释伪装激活会对路由数据包在通过接口 @Y 之前被防火墙丢弃或不丢弃产生影响?至于防火墙中的“默认”目标?
我的防火墙规则集完全是空的,我从新的 CentOS 进行了此设置以解决这个问题。没有添加 iptables 或防火墙规则。
iptables -L -n
以下是和的结果iptables -L -t nat -n
:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
INPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_direct all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_IN_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_IN_ZONES all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_OUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_OUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
OUTPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD_IN_ZONES (1 references)
target prot opt source destination
FWDI_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
FWDI_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_IN_ZONES_SOURCE (1 references)
target prot opt source destination
Chain FORWARD_OUT_ZONES (1 references)
target prot opt source destination
FWDO_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
FWDO_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_OUT_ZONES_SOURCE (1 references)
target prot opt source destination
Chain FORWARD_direct (1 references)
target prot opt source destination
Chain FWDI_TEST (2 references)
target prot opt source destination
FWDI_TEST_log all -- 0.0.0.0/0 0.0.0.0/0
FWDI_TEST_deny all -- 0.0.0.0/0 0.0.0.0/0
FWDI_TEST_allow all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FWDI_TEST_allow (1 references)
target prot opt source destination
Chain FWDI_TEST_deny (1 references)
target prot opt source destination
Chain FWDI_TEST_log (1 references)
target prot opt source destination
Chain FWDO_TEST (2 references)
target prot opt source destination
FWDO_TEST_log all -- 0.0.0.0/0 0.0.0.0/0
FWDO_TEST_deny all -- 0.0.0.0/0 0.0.0.0/0
FWDO_TEST_allow all -- 0.0.0.0/0 0.0.0.0/0
Chain FWDO_TEST_allow (1 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW
Chain FWDO_TEST_deny (1 references)
target prot opt source destination
Chain FWDO_TEST_log (1 references)
target prot opt source destination
Chain INPUT_ZONES (1 references)
target prot opt source destination
IN_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
IN_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
Chain INPUT_ZONES_SOURCE (1 references)
target prot opt source destination
Chain INPUT_direct (1 references)
target prot opt source destination
Chain IN_TEST (2 references)
target prot opt source destination
IN_TEST_log all -- 0.0.0.0/0 0.0.0.0/0
IN_TEST_deny all -- 0.0.0.0/0 0.0.0.0/0
IN_TEST_allow all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain IN_TEST_allow (1 references)
target prot opt source destination
Chain IN_TEST_deny (1 references)
target prot opt source destination
Chain IN_TEST_log (1 references)
target prot opt source destination
Chain OUTPUT_direct (1 references)
target prot opt source destination
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
PREROUTING_direct all -- 0.0.0.0/0 0.0.0.0/0
PREROUTING_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
PREROUTING_ZONES all -- 0.0.0.0/0 0.0.0.0/0
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
OUTPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
POSTROUTING_direct all -- 0.0.0.0/0 0.0.0.0/0
POSTROUTING_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
POSTROUTING_ZONES all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT_direct (1 references)
target prot opt source destination
Chain POSTROUTING_ZONES (1 references)
target prot opt source destination
POST_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
POST_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
Chain POSTROUTING_ZONES_SOURCE (1 references)
target prot opt source destination
Chain POSTROUTING_direct (1 references)
target prot opt source destination
Chain POST_TEST (2 references)
target prot opt source destination
POST_TEST_log all -- 0.0.0.0/0 0.0.0.0/0
POST_TEST_deny all -- 0.0.0.0/0 0.0.0.0/0
POST_TEST_allow all -- 0.0.0.0/0 0.0.0.0/0
Chain POST_TEST_allow (1 references)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain POST_TEST_deny (1 references)
target prot opt source destination
Chain POST_TEST_log (1 references)
target prot opt source destination
Chain PREROUTING_ZONES (1 references)
target prot opt source destination
PRE_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
PRE_TEST all -- 0.0.0.0/0 0.0.0.0/0 [goto]
Chain PREROUTING_ZONES_SOURCE (1 references)
target prot opt source destination
Chain PREROUTING_direct (1 references)
target prot opt source destination
Chain PRE_TEST (2 references)
target prot opt source destination
PRE_TEST_log all -- 0.0.0.0/0 0.0.0.0/0
PRE_TEST_deny all -- 0.0.0.0/0 0.0.0.0/0
PRE_TEST_allow all -- 0.0.0.0/0 0.0.0.0/0
Chain PRE_TEST_allow (1 references)
target prot opt source destination
Chain PRE_TEST_deny (1 references)
target prot opt source destination
Chain PRE_TEST_log (1 references)
target prot opt source destination