主题:【原创】it科普二 蛋疼向研究之GFW -- 浩瀚星辰
不知道我理解的对不对,你的意思是:GFW伪造了RST为1的数据包,并且乔装成来自境外服务器?然后,国内的机器在收到这个包之后就把原来的连接中止了?而实际上包含敏感信息的数据包,实际上穿过了防火墙,甚至到达了用户的电脑?
推测是由于你的计算机上不再应答ack,所以境外主机很快就会视你的主机已经关闭了连接。而漏网的数据包太少而且无伤大雅。
人家GFW是向双方,访问者和网站各发了一个重置
网站那边收到这个RST就停止本次会话了
说这个GFW伪造数据包是双向发送的。服务器那头也发了个。所以要改就要改客户端和服务器端一起来。工程量很大啊。
如果是这样的话,那个改驱动强人应该什么都看不到
那么两个可能
gfw升级过或者我听的那个故事有问题
网卡虽多,用的主芯片不到10种,驱动程序做个通用包的话不会超过20兆。
这个就可怕了,那不是说哪天翻墙众们也会去喝茶?
美国这边日本漫画没问题,但美剧就不行
GFW通过DPI实现
华为下面这个产品介绍说得很明白了
厂家提供的驱动都是符合微软的一个什么规范(好像是叫NDIS)
他上面才是TCP/IP的协议栈,做个驱动,改TCP/IP的协议栈就成了,之所以没这么做,我估计是有2点
1.双方都发RST,所以你这边忽略RST也没用
2.忽略RST对其他应用影响太大
华为这个玩意应该还是应用于网管,用在GFW上似乎差点意思
主要是大数据量的问题
1.特征字是最简单的,但是在大数据量的情况下应该是跟不上的,比方说GFW的要过滤的关键字有10万条,而且关键字还在不断增加中,每秒过交换机有100万个包(实际应该远远大于这个数字),平均每个包的长度如果按500个字节算,可以想象在对每个包进行过滤时候的运算量。除非分散到若干台机器中,但这个数字也是很恐怖的,比较现实的做法是限定某些范围的IP包的比较(比如只对GoogleIP地址进行过滤,先用IP地址过滤一次,由于IP地址是直接比较,这样运算量能降下几百倍,在数据量降下几万倍之后(Google的数据估计只占整个网络数据的几万分之一,甚至更低)然后对来自这些IP地址的数据进行过滤。
2.应用层网关识别耗的是内存,因为需要根据控制流来建立Session,每秒维持上百份甚至更多的Session,而且需要考虑到异常情况,也就是某个Session没有正常结束,挂在哪儿了,怎么办?而且这种识别是死编码,增加一个业务,就需要重新对这种业务进行编码,对于复杂的控制流,CPU运算量也是很大的。
3.3同2一样,太耗CPU和内存,只能用于特定场合,而且识别率有问题。
1,2我都用过,在运营商那里实时分析一个省的全部数据(用于网管的业务分析),小的省还可以,大点的地方根本不敢去,做到最后,不是死在了CPU上,就是死在了内存上。海量数据处理才是这个技术的核心,协议分析都是浮云。能做的几家,硬件上投资都很大,而且效果不佳。
旁路设备在扫描的同时不会干扰正常的流量。
专用硬件的性能和x86不是同一个数量级(比如最近很火的tilera的芯片,一片就可以把Snort跑到40Gbps以上)