为什么我不能在我的 iptables OUTPUT 链上使用 REJECT 策略?

ND *_*eek 11 networking gentoo iptables

我目前将 OUTPUT 链设置为 DROP。我想将其更改为 REJECT,以便我知道是我的防火墙阻止我到达某个地方,而不是我尝试访问的任何服务出现问题(立即拒绝而不是超时)。但是,iptables 似乎并不关心这一点。如果我手动编辑我保存的规则文件并尝试恢复它,我得到iptables-restore v1.4.15: Can't set policy 'REJECT' on 'OUTPUT' line 22: Bad policy name并且它拒绝加载规则。如果我尝试手动设置 ( iptables -P OUTPUT REJECT),我会得到iptables: Bad policy name. Run 'dmesg' for more information.但 dmesg 中没有输出。

我已经确认适当的规则被编译到内核中,并且我已经重新启动以确保它被加载:

# CONFIG_IP_NF_MATCH_TTL is not set
CONFIG_IP_NF_FILTER=y
***
CONFIG_IP_NF_TARGET_REJECT=y
***
CONFIG_IP_NF_TARGET_LOG=y
CONFIG_IP_NF_TARGET_ULOG=y
Run Code Online (Sandbox Code Playgroud)

(添加星号以突出适用规则)

我能找到的所有内容都表明 REJECT 是一个有效的策略/目标(一般而言),但我找不到任何表明它对 INPUT、FORWARD 或 OUTPUT 链无效的内容。我的 Google-fu 没有帮助。我在 Gentoo 上,如果这有什么不同的话。这里有人有任何见解吗?

Sha*_*off 15

REJECT目标扩展,而链策略必须是目标。手册页说(虽然不是很清楚),但它所说的某些内容是完全错误的。

该策略只能是ACCEPTDROP内置链。如果你想要拒绝所有不匹配前面规则的数据包的效果,只需确保最后一条规则匹配所有内容并添加一个带有REJECT目标扩展名的规则。换句话说,在添加所有相关规则后,执行iptables -t filter -A OUTPUT -j REJECT.

有关更多详细信息,请参阅 netfilter 列表上的“可能的链策略是什么”主题