以下是我的 iptables 的部分输出:
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
22866 3280283 ufw-before-logging-output all -- * * 0.0.0.0/0 0.0.0.0/0
22866 3280283 ufw-before-output all -- * * 0.0.0.0/0 0.0.0.0/0
3307 353252 ufw-after-output all -- * * 0.0.0.0/0 0.0.0.0/0
3307 353252 ufw-after-logging-output all -- * * 0.0.0.0/0 0.0.0.0/0
3307 353252 ufw-reject-output all -- * * 0.0.0.0/0 0.0.0.0/0
3307 353252 ufw-track-output all -- * * 0.0.0.0/0 0.0.0.0/0
Chain ufw-before-output (1 references)
pkts bytes target prot opt in out source destination
2214 368749 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
7342 1051009 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
1884 204643 ufw-user-output all -- * * 0.0.0.0/0 0.0.0.0/0
Chain ufw-user-output (1 references)
pkts bytes target prot opt in out source destination
2 120 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
根据我的理解,规则是从上到下匹配的。当数据包与终止操作(例如 ACCEPT)匹配时,它将停止。那么,为什么 ssh 数据包可以到达 Chain ufw-before-output 中的规则 3 并被丢弃?为什么它不被 Chain ufw-before-output 中的规则 1 接受?
答案1
链 ufw-before-output 中的规则 1 具有仅适用于本地接口 (lo) 的附加条件。命中 ufw-user-output 链 DROP 规则的两个数据包不会发往本地接口。它们也可能是新的 tcp 连接 syn 数据包,因此不满足 RELATED,ESTABLISHED 规则。