![如何查明与服务器的 TCP 连接是否被第三方篡改?](https://linux22.com/image/782703/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%98%8E%E4%B8%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%20TCP%20%E8%BF%9E%E6%8E%A5%E6%98%AF%E5%90%A6%E8%A2%AB%E7%AC%AC%E4%B8%89%E6%96%B9%E7%AF%A1%E6%94%B9%EF%BC%9F.png)
我处于不可靠的 ISP/AS 之下,类似于 GFW。他们积极尝试通过攻击(例如向SYN RST
已建立的连接发送消息、使连接超时、干扰握手等)来破坏 TCP+TLS 会话。
网络堆栈中是否存在实用程序可以查明服务器是否受到此类服务质量攻击?
例如,为了检测SYN RST
来自客户端/服务器以外的其他人,我们可以比较客户端和服务器的 tcpdump 以查明信号是否来自第三方。我们可以手动执行此操作或编写脚本。但是,有现成的工具吗?可以p0f
用于此吗?
答案1
原则指纹识别可以检测到攻击。但你可能已经注意到,这通常是概率的方法,在这种情况下,您无法确定任何单个数据包是否是良性的,或者是否是伪造的,以便可靠地阻止它。
最好查看元数据字段,例如 TTL,对于真正的数据包,TTL 可能比伪造的数据包低,因为它经过了更多路由器,每个路由器都会减少计数器。如果数据包的 TTL 与之前在连接中观察到的 TTL 有很大不同,则丢弃该数据包是有意义的。这可能可以使用 iptables connmark match/CONNMARK target 规则来实现(将新连接的 TTL 记录到连接标记中并检查后续数据包)。
您可能知道,俄罗斯的许多互联网资源都被封锁了。封锁技术各不相同,但其中一种就是按照您所说的做——如果 ТСПУ 设备(代表“технические средства противодействия угрозам”,即应对威胁的技术手段;本质上是一种 DPI)认为应该封锁连接,它可以发送 TCP RST。它不会(至少没有阻止)后续的正常数据包,因此如果如果你有办法检测和消除 RST 数据包,你可以自由使用“被阻止”的资源。有一个网站专门介绍如何规避审查制度,ntc. 党(我与它没有任何关系)。特别是,社区的一位活跃成员,瓦尔迪克,做了一个软件再见DPI哪个能够来规避这种阻塞。它似乎也使用了提到的TTL洞察力。他还列出了具有类似功能的其他软件。
我也想特别回答标题中的问题。IPsec包装整个 IP 数据包(包括 TCP)或仅包装其有效负载并使用电子签名对其进行身份验证,从而使其无法使用您描述的方法进行篡改。您不需要加密数据包,IPsecah
标头仅添加(并检查)MAC,否则以明文形式呈现。或者您可以使用esp
标头进行加密。
不幸的是,当你连接到任意“匿名”服务时,你不能依赖这一点,因为要启用 IPsec,你需要与对方共享密钥事先的使用该技术。