【问题标题】:How to read iptables TRACE logs (policy numbers)如何读取 iptables TRACE 日志(策略编号)
【发布时间】:2017-06-04 12:54:51
【问题描述】:

所以我加了

sudo iptables -t raw -A PREROUTING -p tcp --dport 25 -j TRACE

还有

sudo iptables -t raw -A OUTPUT -p tcp --dport 25 -j TRACE

当我 grep 系统日志以获取 TRACE 时,我得到的输出如下所示

Jan 19 09:14:46 dev109 kernel: [29067248.683235] TRACE: raw:OUTPUT:rule:2 IN= OUT=eth0  ...
Jan 19 09:14:46 dev109 kernel: [29067248.683244] TRACE: raw:OUTPUT:policy:5 IN= OUT=eth0 ...
Jan 19 09:14:46 dev109 kernel: [29067248.683254] TRACE: mangle:OUTPUT:policy:1 IN= OUT=eth0 ...
Jan 19 09:14:46 dev109 kernel: [29067248.683262] TRACE: filter:OUTPUT:policy:1 ...
Jan 19 09:14:46 dev109 kernel: [29067248.683269] TRACE: mangle:POSTROUTING:policy:1 ...
Jan 19 09:14:46 dev109 kernel: [29067248.683432] TRACE: raw:OUTPUT:rule:4 IN= OUT=eth0 ...
Jan 19 09:14:46 dev109 kernel: [29067248.683441] TRACE: raw:OUTPUT:policy:5 IN= OUT=eth0 ...

我想了解保单编号指的是policy:1 == ACCEPT?如果是,policy:5 是什么意思?

【问题讨论】:

    标签: iptables trace policy


    【解决方案1】:

    我想根据@OscarAkaElvis 和其他人写的答案提供一个简单的解释。

    每条链都有一个默认策略,打印出规则就可以看到。在这里,我们可以看到filter表中的INPUT链有一个默认策略ACCEPT

    # iptables -L -t filter
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     icmp --  anywhere             anywhere             /* 000 accept all icmp */
    ACCEPT     all  --  anywhere             anywhere             /* 001 accept all to lo interface */
    REJECT     all  --  anywhere             127.0.0.0/8          /* 002 reject local traffic not on loopback interface */ reject-with icmp-port-unreachable
    

    https://backreference.org/2010/06/11/iptables-debugging/ 中所述,日志消息的格式为TRACE: tablename:chainname:type:rulenum

    对于策略,格式的最后一部分是type:rulenumrulenum 数字指的是策略的默认规则,即最后一条规则。它基本上是“您添加到链中的规则数量”+ 1。

    以下是使用原始问题中提出的链的两种解释:

    • mangle:OUTPUT:policy:1 此链 (mangle:OUTPUT) 不包含任何规则。默认规则是第一个也是唯一的规则。因此号码是:1
    • raw:OUTPUT:policy:5 这个链包含 4 条规则。因此,默认为规则 #5。

    【讨论】:

      【解决方案2】:

      policy:1type:rulenum。或者换一种说法type="policy"rulenum=1

      仔细阅读this。具体来说:

      追踪 该目标标记数据包,以便内核将记录与数据包匹配的每个规则,因为这些规则遍历表、链、 规则。 (日志需要 ipt_LOG 或 ip6t_LOG 模块。)使用字符串前缀记录数据包:

      "TRACE: tablename:chainname:type:rulenum" 其中 type 可以是 "rule" 用于普通规则,"return" 用于用户末尾的隐式规则 为内置链的策略定义了链和“策略”。 它只能在原始表中使用。

      现在让我们从问题TRACE: mangle:OUTPUT:policy:1 中取一个前缀并应用我们学到的知识:

      tablename = mangle
      chainname = OUTPUT
      type      = policy]
      rulenum   = 1
      

      【讨论】:

      • 这是一个非常简洁的答案,但在阅读了十几次之后,它让我到达了我需要的地方。我编辑了答案以帮助更好地解释。单独的时候,第一句话很难理解。
      • 也提出了这个问题并进行了一些测试:policy:5 似乎是指您的链中虚构的最后一个“规则”,其中考虑了策略。所以loonyuni的追踪链应该有4个明确的规则。
      • 我不明白最后一个虚构的最后规则 5 是否意味着它被接受或丢弃。
      • @Johnathan 那不是默认策略吗?
      • @U.Windl 你如何确定?
      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 2011-03-05
      • 2022-08-04
      • 2022-06-28
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多