netfilter
似乎允许来自我的INPUT
链的被拒绝的流量通过我的OUTPUT
链。以下是INPUT
应用于相关数据包的链中的规则:
LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "ICATCH:"
REJECT-PKT all -- * * 0.0.0.0/0 0.0.0.0/0
用户自定义REJECT-PKT
链及其相关规则:
REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp reject-with tcp-reset
这是记录的结果:
May 15 06:41:51 li51-144 kernel: ICATCH:IN=eth0 OUT= MAC=f2:3c:91:1f:61:44:84:78:ac:0d:97:c1:08:00 SRC=188.138.135.9 DST=<my IP> LEN=40 TOS=0x00 PREC=0x00 TTL=46 ID=46841 PROTO=TCP SPT=8838 DPT=23 WINDOW=22014 RES=0x00 SYN URGP=0
May 15 06:41:51 li51-144 kernel: OCATCH:IN= OUT=eth0 SRC=<my IP> DST=188.138.135.9 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=23 DPT=8838 WINDOW=0 RES=0x00 ACK RST URGP=0
第二行由表中的以下(倒数第二)规则生成OUTPUT
:
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "OCATCH:"
我的印象是被拒绝的数据包以某种方式被内核标记,并且带有RST
由iptables
规则产生的标志的 TCP 流量未被防火墙处理。
我误解了什么?
答案1
就像@Aaron 所说,这是正常的。
当传入数据包达到REJECT
规则时,它将由 netfilter 处理,并用RST
数据包和消息回复发送者。
但是,如果您将其设置为DROP
相反,则源将不会收到任何消息。
检查此链接: DROP 和 REJECT 之间的区别
值得运行tcpdump
或wireshark
捕获输出并查看集线器下发生了什么。