iptables
我在几个匹配新连接的示例中看到了类似的技术:
-A INPUT -p tcp -m tcp --dport 443 --syn -m conntrack --ctstate NEW -j SSH
如上所示,除了模块tcp
之外,TCP 连接还会根据 TCP 标志(SYN 必须为 1,RST、ACK 和 FIN 为 0)进行检查。与此相比,它是否提供任何优势:--ctstate NEW
conntrack
-A INPUT -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j SSH
我的假设是它确实如此,因为匹配模块是按照规则中指定的顺序进行评估的,并且没有--syn
,全部发送到端口 443 的 TCP 数据包将从一个tcp
模块传递到conntrack
另一个模块。换句话说,--syn
应该提供这种快速失败范例。
答案1
换句话说,
--syn
应该提供这种快速失败范例。
差不多就这样了。实际上,是扩展机制短路了;联机帮助页说
匹配按照命令行上指定的方式从头到尾进行评估,并以短路方式工作,即如果一个扩展产生错误,评估将停止。
在上述情况下,规则使用两个扩展:tcp
处理 和 的扩展--dport
,--syn
后面是conntrack
处理 的扩展--ctstate
。如果tcp
扩展名无法匹配,conntrack
则将完全跳过该扩展名。