跟踪 iptables 规则

跟踪 iptables 规则

我今天才第一次开始深入研究 iptables,所以对任何天真表示歉意。

作为参考,我正在使用

  • Ubuntu 22.04.4 LTS(果酱水母)
  • iptables v1.8.7 (nf_tables)
  • UFW 0.36.1

现在,我知道(或者更确切地说,最近了解到)ufw 只是 iptables 的包装。我决定想要了解幕后发生的事情,所以我开始阅读和探索。我似乎无法理解 iptables 如何与 ufw 一起处理数据包。让我们从INPUT链开始,我相信这是任何传入数据包都会开始的地方。

Chain INPUT (policy DROP)
target                   prot opt source   destination
ufw-before-logging-input all  --  anywhere anywhere
ufw-before-input         all  --  anywhere anywhere
ufw-after-input          all  --  anywhere anywhere
ufw-after-logging-input  all  --  anywhere anywhere
ufw-reject-input         all  --  anywhere anywhere
ufw-track-input          all  --  anywhere anywhere

我觉得如果我正确理解了一切,那么这里的第一行ufw-before-logging-input all -- anywhere anywhere意味着从任何地方、任何端口进入的任何数据包都将被传递到链中ufw-before-logging-input。如果它从该链返回而没有被接受、丢弃或拒绝,那么它将被传递到下一个链,在这种情况下ufw-before-input,依此类推,直到它被接受、丢弃或拒绝(即。 ,直到遇到终止操作)。

好的,让我们看看任何数据包将传递到的第一个链,ufw-before-logging-input

Chain ufw-before-logging-input (1 references)
target     prot opt source               destination

这里实际上什么都没有,所以我们继续讨论ufw-before-input链条

Chain ufw-before-input (1 references)
target           prot opt source   destination
ACCEPT           all  --  anywhere anywhere
ACCEPT           all  --  anywhere anywhere     ctstate RELATED,ESTABLISHED
ufw-logging-deny all  --  anywhere anywhere     ctstate INVALID
DROP             all  --  anywhere anywhere     ctstate INVALID
ACCEPT           udp  --  anywhere anywhere     udp spt:bootps dpt:bootpc
ufw-not-local    all  --  anywhere anywhere
ACCEPT           udp  --  anywhere host.name    udp dpt:mdns
ACCEPT           udp  --  anywhere w.x.y.z      udp dpt:num
ufw-user-input   all  --  anywhere anywhere

这就是我感到困惑的地方。第一行看起来我们只是接受任何数据包,ACCEPT all -- anywhere anywhere但是......我的防火墙规则有效,它们阻止流量。

那么,我在这里缺少什么?

(注意,尝试将其发布在堆栈溢出,但他们把我送到了这里。只需包含此内容,以防万一您通过 Google 搜索并发现此内容在其他地方重复。)

答案1

那么,我在这里缺少什么?

-v选项为了冗长的:

-v, --详细

详细输出。这个选项使 list 命令显示接口名称、规则选项(如果有)和 TOS 掩码。还列出了数据包和字节计数器,[...]

您可能使用过类似的东西:

# iptables -L  ufw-before-input
Chain ufw-before-input (1 references)  
target            prot  opt  source    destination                                        
ACCEPT            all   --   anywhere  anywhere                                           
ACCEPT            all   --   anywhere  anywhere         ctstate RELATED,ESTABLISHED      
ufw-logging-deny  all   --   anywhere  anywhere         ctstate INVALID                  
DROP              all   --   anywhere  anywhere         ctstate INVALID
[...]

不会显示界面。相反-v

# iptables -v -L ufw-before-input
Chain ufw-before-input (1 references)
pkts  bytes  target            prot  opt  in   out  source    destination                                        
   6    504  ACCEPT            all   --   lo   any  anywhere  anywhere                                           
  12   1032  ACCEPT            all   --   any  any  anywhere  anywhere         ctstate RELATED,ESTABLISHED      
   0      0  ufw-logging-deny  all   --   any  any  anywhere  anywhere         ctstate INVALID                  
   0      0  DROP              all   --   any  any  anywhere  anywhere         ctstate INVALID                  
[...]

可以看到ACCEPT规则是针对输入接口的lo:无条件允许环回交通,以及仅有的lo界面。其他任何事情都会继续链遍历。

无论如何,这种格式并不真正适合再现性,特别是在问答中显示规则集时。检查特殊(例如:具有记忆状态)匹配或目标的状态可能仍然有用。更好地使用其中之一iptables -S或者iptables-save(对于整个规则集或至少整个表)。

# iptables -S ufw-before-input
-N ufw-before-input
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
[...]

iptables -S还可以接受-v在其他状态中显示计数器的选项。同样iptables-save使用 use显示计数器iptables-save -ciptables-save旨在提供适合iptables-restore允许保存和恢复规则集的输出。还可以使用两次-v(例如:-vv) withiptables显示附加调试信息。

相关内容