选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……
最近看到一个很有意思的攻击。记一笔。
针对 SYN Flood 攻击(特点是攻击者发出大量 SYN 请求,但并不完成 TCP 握手),目前操作系统会采用 SYNcookie 予以反制。FreeBSD上的实现是在系统资源充足的时候采用标准的握手机制,而当发现存在可能的攻击(即可用的 TCP 状态资源不足时)应用 SYNcookie;SYNcookie是将TCP状态建立推迟到三次握手 之后,具体做法是将服务器本地的一个秘密数据与来源/目的IP、端口编码来形成序号来发出SYN+ACK,并在收到对方回应ACK时验证这个序号的真实性。
这种方法实际上是用计算来换内存资源,即增加了两步计算操作来避免在握手完成之前消耗 TCP 状态资源。
SYN Flood提供了两个优势:
新的攻击方法在攻击者一方也使用了类似SYN cookie的方法,即,它能够实际完成TCP握手,从而击败 SYN cookie(当然,由于完成了三次握手,伪造源IP就不太容易了),方法是将本机和服务器的端口/IP编码进序号。
这次公开的攻击方法还有很多非常聪明的做法,在改TCP实现之前,防守一方能够采取的缓解方法不太多(限制IP、推迟服务启动时间等)。
Read more...FreeBSD支持以DSR(Direct Server Return,即服务器直接将流量通过路由器返回,而不经过负载平衡设备;俗称"单臂模式")模式提供服务。为了改善服务的可用性,可以使用这种方法来配置服务器。这种方法非常适合于大并发、大流量的环境。
首先,需要对服务可能产生的负载、流量进行估计,并据此设计网络的结构。DSR结构极大地降低了负载平衡设备成为瓶颈的可能,但仍对它们有一些要求,因此,设计者需要考虑下面一些问题:
DSR结构对服务器有这样一些要求:
在FreeBSD上,这可以通过在 rc.conf 中的网卡配置中增加"-arp"参数,并配置 static_arp (9.0和更高版本,我会在稍后将其MFC)来实现。
在负载平衡设备上,在实现DSR结构时,这些设备扮演的角色是 路由器,而不是 NAT 网关。也就是说,它们的作用是将来自客户端的访问 IP 包直接 路由 到服务器的内网地址(说明:此时,这些内网 IP 地址会被当作"下一跳";负载平衡设备查找本地 ARP 表并将数据包在2层上直接传递给对应的服务器;而服务器看到的数据包的目的地址仍是提供服务的那个公网IP)。
FreeBSD pf规则举例:pass in on em0 route-to { em1 内网IP1, em1 内网IP2, em1 内网IP3 } round-robin proto tcp from any to 公网IP port http keep state (sloppy)
其中,(sloppy)需要比较新版本的pf。目前的 FreeBSD 版本并不支持这一用法。可以使用 这个 补丁。这个选项表示pf应使用较为宽松的状态机;如果不需要状态(DNS协议通常不需要保持完整的会话,因为通常不会有很大的请求包)则不需要keep state和(sloppy)配置。
Read more...一般来说DNS和MX都需要做冗余。前者的冗余和容灾要求要高于后者。
DNS的冗余通常需要做到跨ISP,甚至跨大洲。由于安全和性能方面的理由,提供权威DNS解析的服务器都不应同时作为缓存DNS服务器;此外,实践上权威DNS服务器应该是受保护的管理服务器的slave,而不应直接在权威DNS服务器上操作(读、写分开),这样可以有效减少由于修改操作所导致的downtime。
MX的冗余可以是跨网段,也可以是跨ISP甚至跨大洲的。如果条件不具备,甚至可以在同一网段,但这会增加网络设备或机房故障所导致的downtime风险。不同的MX在会话阶段的过滤策略应该是一致的。
Read more...前一段时间commit了来自XFree86 -> NetBSD -> OpenBSD的x86emu,这是一个大约9千行C代码的x86实模式CPU模拟器。
由于 amd64/EM64T “long mode” 不支持先前 x86 保护模式中的 “vm86” 扩展(虚拟实模式环境),因此,这个模拟器使得 FreeBSD 能够在 amd64(EM64T) 平台上支持 vesa、dpms 等功能了。
这些改动同样适用于 RELENG_6、RELENG_7、RELENG_8(前两个可能需要略微做一点点改动)。具体的changeset包括:
r197009 - 导入原版(OpenBSD 4.6)x86emu
r197019 - 对x86emu进行一些修改使其适用于 FreeBSD 编译环境,连接到build上。(需要说明的是,x86emu是跨平台的)。
r197021 - MFC时需要:建立目录。
r197022 - 把vesa和dpms代码复制到新位置。(注:svn无法有效地在一次commit中表达把文件挪到新的位置,并进行修改这样的操作。为了便于在 diff -c 时能够看到改动,将这个mv操作拆成了cp和rm)
r197025 - 对vesa、dpms代码进行修改,不再使用vm86而改为使用x86emu。删除原先位置的 vesa 和 dpms。
r197042 - bz@ 补齐了我在 197025 中忘记删除的一个文件。
r197081 - 告诉 make delete-old 需要删除的文件。
r197085 和 r197109 - 启动时可通过 hint 配置直接进入高分辨率模式。
还有一些小问题需要修正,不过大体上是做完了。其中,x86emu的代码经过OpenBSD和NetBSD两拨人的修整已经很清晰易读(主要是译码和执行单元两部分)。
Read more...借着美国劳工节长假去了一趟美国西部的重要城市—-华盛顿州的西雅图,以及俄勒冈州的波特兰。
西雅图是美国西岸的重要城市,因西雅图酋长而得名。
西雅图的地形与旧金山有些想象,但不比旧金山险峻。这个城市的咖啡消费量极大,第一家星巴克咖啡即发源于此,在Pike Market的星巴克门口拍到了一位常年在此演唱的吉他手。
由于地理位置的原因,西雅图的气候比较多云雨。有朋友说,在此间住的太久会有得抑郁症的危险。不过,在西雅图的那几天天气都相当晴朗。西雅图的著名地标是 Space Needle,这是一座为1962年世博会设计的建筑,其瞭望台高达520英尺。
由于去西雅图的时候是搭的早上的飞机,在飞机降落的时候,云层中隐隐约约露出了这些高层建筑。在这些在云层之上每天工作的人们是否已经习以为常?
西雅图周边地区有两家对此间经济非常重要,也是大家非常熟悉的企业—-波音和微软。为了让更多的人了解航空科技,波音特别提供了针对公众的 Future of Flight 来展示波音的民用飞机装配过程,不过,比较遗憾的是装配车间不允许携带相机、手机等摄像器材。
停机坪上是经过改装的波音 747 “Dreamlifter”,用于运载准备在其他地方组装波音 787 “Dreamliner” 飞机部件。
另一家公司是 Microsoft,总部位于Redmond市。
而全球销售额最大的会员制批发超市 Costco 总部也在附近的 Kirkland 市。因为时间关系,没有在 Kirkland 长时间停留。
Read more...今天到了Seattle,在一家很便宜的酒店住下。酒店发给我一张密码卡,用来上那里的无线网。摆弄了几下发现:
加密模式是open,所以需要自己加密数据了。
密码的实现方式是劫持DNS,然后指到1.1.1.1。
最搞笑的是,实际上不登录,IP访问也是通的……
话说,其实我觉得在网关上做点规则比DNS劫持要简单的多?有谁知道他们为啥会这样实现吗?
Read more...那啥,我是写给那谁看的。
共同点:持有价格低于其价值的资本。
不同点:套牢的含义是,在资本价格较高时买入并持有(此时抛出会导致损失);抄底的含义是,在资本价格较低时买入并持有(通常,是在价格较低甚至最低的时买入)。
嗯。
Read more...So finally Doug Rabson has make it. It’s written with D Language and is in git here.
Read more...版本控制、持续集成测试、自动化回归测试等等,都拦不住不靠谱的开发人员和盲目引入新特性而不关注可用性和可靠性的架构师。某开源项目真是快让我发疯了,明明都已经第十几个小版本了……
Read more...两年前我在一篇blog中解释了 为什么应该用 ntpd 而不是 ntpdate 来对时间。今天整理旧机器的时候观察了一下Windows 2000 Server的行为。
首先关闭时间服务(Windows Time Service),设置sntp(net time /setsntp:“time-a time-b”,然后把时间人为调快2分钟,然后启动时间服务。
乍一看时间还是快2分钟,打开系统时间一看,秒的部分整整慢了将近一倍,直到时间和真正的时间逐渐接近之后时钟速率才逐渐追赶上来。
所以,Windows的时间服务在差距不太大的时候也是会主动避免跳变的。这里就不再强调这样做的重要性了。
Read more...