将流量转发到 iptables 中的自定义密钥链

Forwarding traffic to custom key chain in iptables

我需要有关 iptables 的帮助。当我使用命令 iptables -L

时,我有以下 iptables 规则
Chain INPUT (policy DROP)

target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh

Chain FORWARD (policy DROP)

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

Chain MYSSH (0 references)

target     prot opt source               destination

现在我想向我的过滤器 table 的 INPUT 链添加一条规则,它将所有 ssh 流量发送到 MYSSH 链。我必须确保这条新规则遵循(而不是先于)RELATED,ESTABLISHED 规则,因此它不适用于现有连接!

我试过:

iptables -I INPUT 1 -p tcp -m MYSSH --dport 22 -j ACCEPT

但这不起作用。你能告诉我怎么做吗?

这是超级用户的问题,但没关系。我今天戴上了管理员帽。 :P

最主要的是你可以像 ACCEPTREJECTDROP 一样使用你的链作为目标,所以你想将它作为 -j 选项传递, 即

iptables -A INPUT -p tcp --dport 22 -j MYSSH

将附加一条规则,通过 MYSSH 链将所有 TCP 流量传输到端口 22 到 INPUT 链。

另一个问题是在哪里插入这条规则。通常,当我手动执行此类操作时(这些天我通常使用 shorewall,因为它更易于维护),我只使用 iptables -A 命令并按正确的顺序使用 运行 它们。在您的情况下,您似乎想将其作为第二条或第三条规则插入到包罗万象

之前
ACCEPT     all  --  anywhere             anywhere 

规则(虽然这可能有一些额外的条件,如果没有 -viptables -L 将不会显示;我不知道)。那我们看看

iptables -I INPUT 2 -p tcp --dport 22 -j MYSSH

iptables -I INPUT 3 -p tcp --dport 22 -j MYSSH

取决于你想要它的位置。

请注意,顺便说一下,如果这个包罗万象的规则没有我没有看到的附加条件,则永远不会达到下面的规则。