Skip navigation.
主页
提问,思考,学习,分享,积累
droplet 的图片

connection limitation

connection limitation 是不是一个抵御攻击的好方法哪?从企业出口来说,限制connection可以防止一个用户,或者ip消耗了所有的connection,导致其他人无法出去。这有点像QoS的做法。但是对入口来说,限制某个source的connection,可能会导致误伤,因为很多ip都是NAT出来的。如果能够检测source ip是否经过了NAT,就可以对这个ip地址的限制放大一点。如何检测NAT?听说有通过ipid来检测的,不知道好使不好使。

ip based connection limit和policy based connection limit都有一定的用处,但是要看使用的环境和用法。并不是任何时候都要用到这个feature。用错了,会搞出来意想不到的问题。

droplet 的图片

STP与SPT

STP (spanning tree protocol)是L2用来创建路由和防止环路的协议,它的基本过程如下:

1)选择根桥(root bridge),所有的L2 switch通过交换BPDU message来选择根桥,一般是bridge id最小的会被选择为根桥。根桥的选择是在初始化时进行的,如果有一个新加入的桥,会重新开始这个过程。BPDU一般都是在TRUNK port上进行的,STP是在交换机之间生成一个转发树,不涉及access port的转发。根桥选择成功后,根桥上所有的port都是在forwarding状态。(所有的access port也是在forwarding状态)

2)对于其他桥,要选择root port。root port是到根桥最近的port,一般来说,与根桥直接相连的port肯定是root port。所有的root port都应该是在forwarding状态。

3)对同一Lan来说,要选择designated port。同一个Lan里面,到根桥最近的port会被选择为designated port。designated port都应该是在forwarding状态。一个Lan里面,只能有一个designated port,这个port也有可能和root port是同一个port。

其他所有的port都应该是disable状态,只能接收BPDU,而不能转发数据包。

STP树的创建过程是从树根开始的,然后添加新的边,没有用的边会被剪掉。在拓扑变化是,是从边开始往根通知,最后由根往下广播拓扑变化的消息。

SPT (shortest path tree)是PIM/SM协议里面创建多播转发树的过程。还有一个RPT(Rendezvous path tree)用于SPT完成之前的转发。

SPT的创建是从叶节点开始的,每次都是查找最短路由,然后把Join的信息发给最近的路由器。最后Join会到达FHR(first hop router)。这个过程与STP正好是相反的。

在STP里面,通过剪掉多余的枝来防止环路,而PIM/SM通过RPF (reverse path forwarding)来防止环路。如果有并行路径,PIM/SM会发送Assert消息,而STP则选择最小路径。

这两种树应该都不是最优树,如果要创建最优树,开销会很大。当前这种方式已经足够用了。

droplet 的图片

Type independent data structure

数据结构和算法应该是和具体的类型无关的,这样可以设计出类型无关的数据结构和算法。比如c++里使用的STL库。c语言也可以有类型无关的算法,比如freebsd里的queue的实现,以及linux里面的list实现。

在freebsd,实现了一下几类链表结构:

SLIST:单向链表

STAILQ:单向链表,但是表头有指向最后一个元素的指针

LIST:双向链表

TAILQ:双向链表,但是表头有指向最后一个元素的指针

CIRCLEQ:环形链表

在LINUX里面,有:

LIST:双向链表

HLIST:双向链表,但是表头是只有一个指向下一元素的指针,表头可以节省一个指针。

在这些链表的定义里面,有两个重要的结构:一是表头如何定义;二是链表中的元素如何定义。具体的请参考附件。

droplet 的图片

云计算与云安全

云计算是个很模糊的名词,为了把这个名词看得更清楚一下,我先提出几个问题,然后试着回答一下,然后再看看这个目前很流行的词代表些什么。
问题一:云计算很目前流行的基于web的编程方式有何区别?
目前基于web或者是基于internet的编程方式,会分成多个层次:
  1)client: web browser或者基于web browser的客户端,主要是面向用户的UI和很少一部分逻辑。当然,目前也有把逻辑处理放到client端来处理的趋势,比如很流行的ajax, flash等Rich client的技术。但是,client端的逻辑不能太复杂,否则和server端的同步是个问题,分布式处理可以,但是最终的结果却是需要集中式的计算。
  2)web server:这是相对简单的一层。当然,基于web server扩展出来的技术很很多,比如php, serverlet,asp等等。我们可以把扩展出来的这些技术单独划分成一个层次。
  3)app server:这就是针对不同应用扩展出来的部分。比如j2ee,比如asp,还有php, ruby等等。有时候,语言也会成为app server的一部分,选择什么样的语言,选择什么样的编程环境,同时也就选择了什么样的app server,这部分是各厂商特别优化的部分,差别很大。
  4)data server:主要是database,不单指传统的关系型database,也还有很多新的,比如基于xml的database,比较google的index server等。
划分这么多层次,主要是为了编程方便,或者是为分析,设计提供一些帮助,对于最终用户来说,并不需要关心这些。计算在本地还是远程是无所谓的,用户体验,也就是client部分才是用户需要关心的东西。当然,选择不同的技术就会有不同的用户体验,不同的技术,有不同的优缺点,这不是本文的重点。
云计算貌似关注的是server端的技术,比如如何构建一个高效的data center,从硬件到软件。从这一点来说,IDC或者ISP对云计算的需求可能更多一点。云计算目前来说并没有提出什么新技术,只是提出了一种对现有技术如何更好的(也不一定更好)利用的想法。比如IDC或者ISP可以把自己的计算资源动态的租给ICP,使得ICP可以有更好的scalability,按需收费,而不是目前的一次性投入的方式。
如果ICP能够节省下data center的投资,无疑是很有诱惑力的。至少对一些小的,或者是刚起步的公司,data center的投入是难以承受的。但是如果data center太小的话,业务的量就上不去,所以最好是能把这部分交给专业的公司来做。从这个角度来看,amazon和taobao的网店就有点云计算的意思的,只是这种服务可选择的余地大小了,client没有个性,如果能够提供API供客户集成,或许更好一点。
问题二:云计算是软件,还是硬件?
我想云计算主要还是一个软件的名词。在UI后面,隐藏了实现的细节,使用者不区分本地服务还是远程服务。这里有三个不同的角色:
  1)用户。终端用户,使用UI的人,这是最终付钱的人,是最大的群体,所有的努力都是为了满足这些人的需求。
  2)服务提供商。这些当然是app service的提供商,比如搜索,游戏,交易等等。
  3)云计算提供商。这些是提供基础设施的。比如数据存储,计算,以及网络等等。由于云计算规模庞大,相信这个群体比较小,相对集中一点。
云计算的目的是为了让服务提供商更好的服务自己的客户。多个服务提供商可能会使用一个或多个云计算提供商的服务。云计算提供商考虑的是如何服务这些客户,如何满足这些客户的需求。以现在的方式,能够做到这些吗?
想想很多web hosting的服务商,能够做到动态扩展计算能力吗?一个server到多个server是不是可以方便得扩展。至少我没有看到,当然这部分接触的较少,说不定已经有了很好的解决方案。
既然云计算更多的是server端的技术,那么,云安全主要就是server端的保护了。这里又有几个问题:
  1)如何定义用户的边界?没有边界就没有保护,当这个边界是动态的时候,如何标识边界就是一个很重要的问题。有了边界,才能隔离不同的用户,才能保证服务质量。边界是虚拟的边界,而不是物理的边界,因为计算的单元有可能是虚拟的,比如虚拟机,虚拟交换机,路由器等等。
  2)如何给用户分配计算资源。用户资源的粒度如何划分?是按CPU的个数划分吗?不同CPU的计算能力可能不同。带宽,存储等等,这些如何划分?服务质量如何定义。计算资源在转移时,如何保证原来的数据已经被清除,而不会让转移的计算资源被新的用户看到。
  3)如何保护用户的数据?当用户的服务托管之后,相应的安全等级就应该定义了。由于管理者有多个,如何划分这些管理者的权限就很重要。服务质量里应该包括数据保护的内容,当问题发生时,应该有相应的法律手段。而且,在数据泄露时,应该能找到源头,这里面又有很多复杂的东西。
云计算是个模糊的概念,每个人的理解不同,以上是我的一点体会,不足之处,还请见谅。

stevenlee 的图片

os中预留客户端时,测试注意事项

1. 安装删除成功,里面的信息(公司信息,version,log 等等)准确
2. 安装后,软件本事功能,界面易用性
3. 在不同os上安装,删除
4. 跟不同杀毒软件的兼容性,会不会被认为是病毒或者木马
5. 如果有心跳,可以把DUT搞死,然后client是否还能继续使用,进程能否自己kill
6. 覆盖安装或者删除安装,或者删除的同时安装
7. 卸载后进程检查
8. 安装成功后,安装目录中关于公司信息的检查,尤其如果有OEM的情况
9. 注册表中关于公司信息的检查。
10. 悬浮信息的检查。
11. 。。。。。。。。。。。

stevenlee 的图片

通过在防火墙OS中保存client端,用户容易接受吗?

在防火墙os中保存客户端,然后用户如果想使用某个feature的功能时,会自动提示用户需要下载一个在os中已经存在的客户端,这样方式用户喜欢接受吗? 他就不会担心该客户端会不会有后门程序?

droplet 的图片

SNS与关系网络

最近公司要招两个人,HR从招聘网站拿到了很多简历,让我先过滤一下,看看背景和经验与当前的职位是否match

这是一个比较无聊的工作,但是又不得不每个简历都浏览一遍。

其实很多公司招人,都是通过内部推荐的。比如我所在的公司,内部推荐比较高达80%左右吧。这样招进来的人,

背景和经验都比较match,成功率也高一点。招聘双方相互了解也多一点,也少了一点不切实际的expectation。

SNS网络是依据六度空间理论建立起来的。但是没看到哪个SNS网络能够显示人与人之间的关系网络。比如人与人

之间的同学,同事,同乡,同门等等。无法反应现实之中人与人之间的关系,也无法反应虚拟世界中的人与人之间的

关系。

如何建立不同SNS网站里不同id,但是相同人之间的关系。比如招聘网站与博客网站的联系,找到一个人,可以看他/她

写的博客,这样可以了解一个人的技术背景和技术见解。比如招聘网站与同学录网站之间的联系,比如一个社区网站人

与人之间的联系。如果能够自动把这些关系提取并显示出来,是不是能够拓展我们的关系网哪?

不过一个潜在的问题是这个关系网会不会被滥用。比如在人肉搜索时被滥用,或者被公安机关,坏人等滥用。

虚拟的关系网是现实关系网的映射,如果这个关系网能够在虚拟世界中拓展,对现实中的关系网也会有很大的帮助。

了解一下什么是六度空间理论:http://baike.baidu.com/view/3056.htm.

droplet 的图片

网络安全漫谈(5):虚拟与现实

虚拟世界中的安全可以借鉴真实世界里面的最佳实践,反之亦然。比如说防火墙里面的Zone, DMZ的概念,就来自于军事领域的实践。有时候在讲虚拟世界里面的安全时,也会拿真实世界的例子来类比,比如安全短板,比如身份证,临时的id等等。

物理安全也是安全领域中很重要的一个分支。多了解一下这方面的东西对做网络安全也很有帮助。

虚拟和现实世界中相同的问题是,安全级别越高,对用户来说越不方便。用户体验对两个世界都很重要。在现实世界中的伪装,需要通过身份卡片,虹膜,指纹,声纹等等来标识,但是在虚拟世界里面,伪装就容易很多。原因就是虚拟世界里面的ip地址没有携带足够的信息,如果在payload里面携带身份信息,性能又是一个难题。在虚拟世界里面,先要解决身份认证的问题,其他的就会简单许多。

droplet 的图片

网络安全漫谈(4):管理与技术

说起安全,一般都是“三分技术,七分管理”。但是这个管理流程的设计也需要一定的技术。而且这个流程是否完备,是否有漏洞,好像比较程序更加难以验证。所谓的管理手段,一般有哪些哪?

1)流程设计

2)日志,各种各样的

3)日志分析,把各种设备的日志综合分析

4)角色、权限设计,这个应该包括在流程设计里面,但是这个比较重要,需要重点谈一谈。一个安全的系统里面,不应该有超级用户存在,这个超级用户可以做任何事。如果有这样的角色存在,这个系统一定是不安全的。超级用户会成为整个系统的弱点。不知道在流程设计里面会不会考虑DAC和MAC等模型,如果没有考虑,那一定是家骗人的公司。

流程设计完了,应该由第三方来验证流程是否安全。而且应该有定期的检查。这些是咨询公司和安全服务公司的重点业务。