如何理解为什么iptables将数据包视为无效?


11

我设置了一些iptables规则,以便它记录并丢弃无效(--state INVALID)的数据包。阅读日志如何理解为什么该数据包被视为无效?例如,以下内容:

Nov 29 22:59:13 htpc-router kernel: [6550193.790402] ::IPT::DROP:: IN=ppp0 OUT= MAC= SRC=31.13.72.7 DST=136.169.151.82 LEN=40 TOS=0x00 PREC=0x00 TTL=242 ID=5104 DF PROTO=TCP SPT=80 DPT=61597 WINDOW=0 RES=0x00 ACK RST URGP=0

Answers:


25

使用状态数据包检查时,数据包可以处于各种状态。

  • 新增:数据包不是任何已知流或套接字的一部分,并且TCP标志的SYN位为ON。
  • 建立:数据包与跟踪的流或套接字匹配,CONNTRACK并且具有任何TCP标志。在完成初始TCP握手之后,必须关闭SYN位才能使数据包处于建立状态。
  • 相关:数据包与任何已知的流或套接字都不匹配,但由于存在一个以其为谓词的现有套接字,因此该数据包是预期的(例如,当端口21上存在现有FTP会话时,端口20上的数据或UDP数据用于TCP端口5060上的现有SIP连接)。这需要关联的ALG。
  • 无效:如果以前的状态均未应用,则数据包处于状态INVALID。这可能是由于各种类型的隐身网络探针引起的,或者可能意味着您用尽了所有CONNTRACK条目(您还应该在日志中看到这些条目)。或者它可能完全是良性的。

在您的情况下,您引用的数据包显示TCP标志ACKRST,并且源端口为80。这意味着位于31.13.72.7(恰好是Facebook)的Web服务器向您发送了一个重置​​数据包。如果不查看之前的数据包(如果有),就完全不可能说出原因。但很可能是出于与计算机认为无效相同的原因,向您发送了重置信息。


因此,没有办法要求内核(或iptables)在包中附加某种“签名”,以使其成为无效的原因吗?
mbaitoff

2
根据定义,没有。无效意味着它与任何已知状态都不匹配。换句话说,就是内核说“我不知道为什么收到这个数据包”。
bahamat 2012年

对于调试特定的INVALID数据包,可以从转储中在Wireshark中查看它们……我已经看到带有SACK字段的数据包(实际上,正常的序列号已由防火墙更改,而SACK选项中的序列号却未更改,从而导致SACK)值无效)被丢弃为无效的防火墙所破坏...
Gert van den Berg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.