如果我使用iptables只允许来自特定IP的TCP连接,是否可以伪造?

我的数据库服务器上的iptables规则是:

-A INPUT -p tcp --dport 6432 -s 10.115.0.150 -j ACCEPT 

我有其他规则(回环等),但我想知道如果这个具体的规则可以“黑客”。 有人可以“欺骗”IP地址(即使它是一个专用的networking地址 – 同样,如果它是一个公共地址,是否会有所不同)? 有些不同?

Iain的回答总的来说是正确的,但需要一点点扩展来解释为什么攻击难以执行。

TCP使用基于比特的标志和32位计数器(称为序列号和确认号)的组合来驱动状态机,该状态机在整个生命周期中跟踪TCP连接的进度。 了解这两个32位计数器如何在每个TCP连接中的有效载荷数据传输之前进行三次握手,将使使用欺骗源IP地址的攻击变得不切实际。

当客户端启动到远程服务器的TCP连接时,它会发送一个SYN段设置的TCP段和一个随机select的初始序列号。 远程服务器响应一个TCP段,同时设置SYN和ACK位,一个随机select的初始序列号和一个等于客户端的初始序列号加1的确认号。最后,客户端用一个TCP段ACK位被设置,一个序列号等于它发送的初始序列号加1,一个等于远程服务器初始序列号加1的确认号。

当攻击者从另一个主机的源IP地址伪造IP数据报时,攻击者通常不会收到他们发送的任何数据包的响应。 在这种情况下,攻击者实际上具有到远程服务器的单向通信信道。 查看TCP握手中的数据包stream,攻击者需要预测远程服务器将在其SYN / ACK响应中产生的初始序列号,以便用ACK响应中的适当确认号进行响应完成三方握手。 攻击者需要正确猜测一个32位的数字才能使攻击行得通。

今天这种types的攻击是完全不切实际的。 但是,过去一些高调的攻击使用了这种方法。 这是可能的,因为在过去,一些操作系统具有非常可预测的初始序列号。 (您可能会发现Michal Zalewski的文章“ 奇怪吸引子”和“TCP / IP序列号分析 – 一年后”在描述各种操作系统的初始序列号的可预测性方面的一个有趣的阅读。

不是在正常情况下。

TCP协议有一个3路握手来build立连接

 Host A sends a SYN packet to Host B Host B sends a SYN ACK packet to host A Host A sends an ACK packet to host B 

并build立连接

现在,如果我们介绍一个欺骗主机A的地址的主机C.

 Host C sends a spoofed SYN packet to Host B Host B sends a SYN ACK packet to Host A 

主机A不期待一个SYN ACK,所以它只是忽略它。