对于特定的 SRC IP 使用 iptables 规则的顺序是什么?

对于特定的 SRC IP 使用 iptables 规则的顺序是什么?

我想在几个小时内阻止来自特定地址的流量。我用firehol管理我的规则。

以下规则确实会阻止我的目标时间内的所有流量

ACCEPT     all  --  anywhere          anywhere             ctstate NEW,ESTABLISHED TIME from 06:00:00 to 16:00:00 UTC

针对特定IP修改相同的规则

ACCEPT     all  --  10.10.10.21          anywhere             ctstate NEW,ESTABLISHED TIME from 06:00:00 to 16:00:00 UTC
ACCEPT     all  --  anywhere             anywhere             ctstate NEW,ESTABLISHED

不会阻塞 的流量10.10.10.21。该顺序看起来是正确的(从更具体到更一般),所以我想知道可能缺少什么?

(请注意,这只是与时间限制相关的摘录iptables -L- 为特定 IP 添加特定规则时会发生变化的规则(与阻止上述时间之外的所有流量的 -working- 规则相反)

答案1

如果您只有 ACCEPT 规则,但某些流量最终被阻止,则意味着您的规则的策略是 DROP。因此,您的第一次尝试会拒绝所有未经明确授权的流量。你的第二次尝试拒绝所有未明确授权的流量,但第二条规则允许大多数流量(它只阻止一些应该允许通过的内容,例如 ICMP 错误 - 您应该始终允许RELATED通过)。

第一个匹配适用。规则 1 在特定时间窗口内允许来自 10.10.10.21 的流量。规则 2 始终允许(几乎)所有流量。由于规则 1 是规则 2 的子集,因此它是多余的。

要在指定时间窗口之外拒绝来自 10.10.10.21 的流量,您需要修改规则 2 以排除来自 10.10.10.21 的流量,或者在其间添加一条拒绝流量的规则。我认为第二个选项更清楚。

iptables -A INPUT -j ACCEPT -s 10.10.10.21 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -m time --timestart 06:00:00 --timestop 16:00
iptables -A INPUT -j REJECT -s 10.10.10.21 -m conntrack --ctstate NEW,ESTABLISHED,RELATED
iptables -A INPUT -j ACCEPT -m conntrack --ctstate NEW,ESTABLISHED,RELATED
iptables -A INPUT -j REJECT

注意你应该总是对被阻止的流量使用 REJECT,而不是 DROP。您无法将链策略设置为 DROP,这就是为什么我在最后添加了显式 REJECT 规则的原因。

相关内容