想象一下,我在 iptables 中有 3 条规则:
- 检查 IP 是否在 ipset 中列入白名单,然后接受。
- 检查用户是否尝试连接到端口 22,然后将其删除。
- 检查用户是否尝试连接到端口 80,然后接受它。
这是规则的示例(不是真实的):
iptables -A INPUT -m set --match-set whitelist src -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
但是我想这样做,如果用户被列入白名单(第一条规则),那么不要接受它,而是将其跳过/重定向到第三条规则(跳过第二条规则),就像这张照片上一样(我知道如果数据包被接受,那么完成了,这只是示例,我不知道如何进行跳转):
所以我想问你,我怎样才能在链中设置这个“跳过”。
子问题:如果可能的话,是否也可以将其重定向到另一个链到特定规则?
更新:真实场景
iptables -A INPUT -m set --match-set whitelist src -j ACCEPT
iptables -A INPUT -m geoip --src-cc DE -j DROP
... other rules ...
如您所见,我只将德国列入白名单,如果德国的 IP 通过第二条规则,那么我将检查它是否有其他规则,但我也使用列入白名单的 IP。
因此,如果某些 IP 被列入白名单(主要不是德国),那么我不想检查它是否是德国 IP(因为它会失败),而是 IP 应该跳转到其他规则(第 3 行)并跳过国家/地区检查。
去功能呢?
自定义链可用于更轻松地组织事物。在自定义链中还有一个更有用的“终端”目标:
RETURN
在调用规则之后立即返回并执行规则。RETURN
在基础链中只是应用了默认策略,所以没有太多使用。询问的示例变为:
有时反转逻辑和分组也可以工作。对于这种简单的情况,等效方法只是:
对于更新后的场景:删除未列入白名单或来自 DE(或 ...)的所有内容。对于其他例外情况,只需
-j RETURN
在-j DROP
更新 2:更改了逻辑,
DE
因为 OP 也更改了它......如果根据 OP 的更改,德国的流量下降,这里,非德国的流量继续。据我所知,您不能跳过链中的规则。如果规则匹配,您绝对可以“跳转”到另一个链。例如,
iptables -A INPUT -p tcp -j tcp_packet_chain
将匹配所有 TCP 数据包并将它们跳转到“tcp_packet_chain”。重要的是要注意,如果数据包在链中未被接受或拒绝,您将返回到原始链中的下一条规则。