说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

悼念斯诺登使用的加密电邮服务——Lavabit架构解析

HTML文档下载 WORD文档下载 PDF文档下载
Lavabit也是“棱镜”情报监控项目曝光者爱德华·斯诺登一直使用的加密电邮服务,不过在今年8月8日遭到了关闭。Lavabit的架构可称得上是一个经典之作,HighScalability分享了这个可扩展的邮件系统架构,也是为了纪念。

2013年8月8日,美国加密邮件服务网站Lavabit的所有者和经营者Ladar Levison,在官方网站中发表声明称:“我被迫要做出一个艰难的决定:是成为对美国人民犯罪的同谋,还是关闭凝聚了我10年心血的Lavabit。经过慎重考虑,我决定暂停Lavabit的服务。” Lavabit也是“棱镜”情报监控项目曝光者爱德华·斯诺登(Edward Snowden)一直使用的加密电邮服务。

虽然Lavabit关闭了,不过Lavabit的架构也称得上是一个经典之作,文中的信息基本上都出自于2009年,但是仍然是一篇好博文,其中一些技术或者信息已经过时了,但是其中的一些思想仍值得大家学习。HighScalability的记者Todd Hoff 分享了这个可扩展的邮件系统架构,CSDN摘译如下:

Lavabit邮件系统

Lavabit是一个中等规模的电子邮件服务提供商,构建这个系统是为了抗衡其他大型的免费邮箱提供商,侧重服务于那些隐私意识比较强和精通技术的用户。Lavabit是第一批提供免费电子邮件服务的公司,开始是使用POP协议,再后来使用的就是IMAP协议。

Lavabit的系统架构


SMTP,POP和IMAP连接

Lavabit使用了一个两层的架构,包括一个应用层(运行自定义的邮件守护程序)和一个支持层(由NFS和MySQL服务器组成)。一个基于硬件的负载均衡器(Alteon AD4)将传入的SMTP、POP和IMAP连接分配到8个应用程序服务器(戴尔1650,拥有4GB的RAM)。

应用程序服务器被用于处理大量的进程负载,守护进程本身是一个使用C语言编写的单进程、多线程应用程序,每个守护进程配置512个线程用以处理传入的连接。另外8个线程负责异步pull广告(来自广告合作伙伴的HTTP API),并执行维护功能。其中维护功能包括更新内存表、过期会话以及日志文件,同时保持ClamAV(主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库)的更新。

从架构的角度来看,每个传入的连接都能得到一个独有的线程,这就可以使用Blocking IO的模式来进行控制。目前,Lavabit依赖于Linux内核来均分这些处理器。

Lavabit称自己的邮件守护进程为“lavad”,它可以流畅地处理SMTP、POP和IMAP连接。守护进程还负责应用所有的业务逻辑,并且连接不同的开源库。

当通过SMTP协议来接受外部消息时,守护程序将进行下列检查:

  • 收件人是否有效
  • 传入IP是否被列入RBL
  • 返回的路径是否被验证使用了SPF(libspf2)
  • 账户是否有大小或者速率限制
  • 是否针对灰名单
  • 是否含有病毒(libclamav)
  • 是否是合法的域密钥签名(libdomainkeys)
  • 该消息是否看起来像垃圾邮件,根据统计令牌数据(libdspam)
  • 是否使用任何过滤器和正则表达式行排序或删除邮件
  • 取决用户的参数及计划,查看是否有特定的检查。例如,垃圾邮件过滤器仅限于付费用户

根据不同的检查的结果,用户可以选择标记消息,或者拒绝收取,甚至在某些情况下静静地删除它。如果消息需要被退回,退回邮件只会在这两种情况下发送:返回路径可以验证使用SPF;如果发件人使用了域密钥进行验证,并且发件人匹配该返回路径。

最后一个步骤,消息使用使用ECC(如果适用)进行加密,使用LZO进行压缩,然后存储在NFS服务器上。

对于POP连接,这个过程就相对简单多了。用户首先进行认证,然后请求消息,守护进程加载此消息,检查哈希表,以确保日期还没有被损坏,解压缩数据,然后在发送到客户端之前对其进行解密(如果适用)。

因为这需要纯文本密码来解密用户的私人密钥,所以Lavabit并不支持安全密码的身份验证,转而支持SSL(可以对一切进行加密,而不仅限于密码)。Lavabit处理SSL的加密是在应用层而不是在负载均衡器上,这是因为他们觉得应用层更容易扩展。

对于IMAP连接来说,守护进程也可以呈现文件夹中的信息,并且允许服务器端的消息搜索。当下,搜索通过读取磁盘上的所有信息实现;如果文件夹很大的话,这将严重影响性能。连接将共享信箱状态的集中副本,这也创造了锁争用问题。搜索肯定是一个需要改进的地方。

对于传出消息而言,该守护程序将通过数据库来验证用户的证书,并对该账户设置发送限制(防止滥用),并检查电子邮件地址是否与认证信息匹配(以防止欺骗),最后守护进程还要检查邮件是否包含病毒。当所有的检查都通过之后,该消息就会被清理,使用域密钥进行标记,然后通过内部网络转发到Postfix服务器,再将其转发到最终目的地。

守护进程使用池来共享所有的东西,包括MySQL连接、ClamAV实例、cURL实例(pull广告)、Memcached实例、libspf2实例等等,来保持简单的部署。Lavabit编译了所有依赖的开源库,并把它们进行统一的归档,然后在运行时才进行动态的加载。不过他们并没有将这些库直接链接到应用程序之上,如果这样的话,就需要在GPL的情况下,释放守护进程。Lavabit不依赖于动态链接,因为他们不希望在未知的情况下,任何关键库会被操作系统控制,进行自动的更新。

HTTP的连接

就像入站邮件连接一样,HTTP连接通过负载均衡器被分配在两个服务器之间,Apache被用于处理请求。虽然大部分的网站是静态的XHTML文件,但是Lavabit的注册引擎是用C编写的,并且所有的C应用程序都依赖于Apache的CGI接口。

门户网站是使用Perl语言编写的,而webmail系统是基于一个流行的开源客户端(PHP)。目前webmail客户端连接到邮件系统时候通过IMAP协议,每个Web服务器都会得到一个专用的IMAP服务器。

存在的问题


虽然设置一个能够可靠地为几千个用户进行服务的邮件系统并非难事,但是超越单一的服务器,扩展同一个邮件系统绝对是非常之难。这是因为大多数电子邮件服务器最初都是被设计成在单一的服务器之上进行使用。如果想在超越单一服务器的情况下移植这些相同的系统,通常需要使用一个数据库和/或NFS服务器,然后把所有不同节点之间的数据进行同步。当然建立大型数据库和NFS实例是可能的,但是价格同样非常昂贵,并且效率也不高。

如果想避免单一的数据库或NFS服务器的问题,也可以这样做,不过加入了很多复杂性。例如,如果想实现一个非常大的Cyrus系统,典型解决方案就是使用LDAP进行身份验证,然后使用IMAP/POP的反向代理以中断传入连接,并把它们转发到特定的Cyrus服务器之上。不过管理这样一个系统,关键部分很容易出现问题。(完整的设计,请参阅 Building a Scalable High-Availability E-Mail System with Active Directory and More  )


按这种方式设计的系统,问题在于大量的关键性服务。如果Cyrus服务器关闭,则托管在该系统上的所有用户都会处于脱机状态,虽然可以减轻这种风险,比如提供一个切换系统,定期的进行备份和同步,或者用SAN,但这些选项都很低效,而且费用昂贵。

实现大型的邮件系统很难,但是实现小型的邮件系统相对容易得多,正因为如此,每年都会有成百上千个免费电子邮件公司开始创业,然后慢慢走向消亡。当然如果系统非常受欢迎,公司却没有简单的方法来扩展规模,所以也只能被迫停止免费帐户,或者不得不关闭系统。只有少数公司有资金和技术资源,重新构建一个系统来以支持庞大的用户群。这也是为什么Lavabit效法大型的供应商,实现一个完全自定义的平台,这也是唯一的办法。Lavabit可以支持10万以上的用户,并且提供一个足够低的成本基础,使企业有利可图。

其实保证所有大型系统管理和成本效益的关键就是要保持简单,系统的关键故障点越少,系统的运行越稳定。(文/王鹏,审校/仲浩)

阅读更多:Lavabit Architecture - Creating A Scalable Email Service

良心企业Lavabit、Slient Mail相继关闭,美国云安全已死?

GitHub是如何征服Google、微软和其它公司的 约见越狱大神!2015 MSS移动安全峰会议程披露 Spark 1.3更新概述:176个贡献者,1000+ patches 从游戏设计到星际探险,微软HoloLens全息技术将改变什么? 触摸屏技术未来?详解Apple新手段Force Touch 专访云适配CEO陈本峰:紧跟HTML5热潮,Web组件化知多少? QQ音乐5.0全新设计过程要点解析 GDC 2015感悟:从0到1,VR投入手游开发路漫漫 TestBird发布手游真人众测平台——附中国手游兼容性测试白皮书 与用户的再一次连接,微软的免费升级计划背后 颠覆App!LayaBox用Flash开发重度HTML5游戏 WinHEC:微软小娜与小冰正式登陆Windows 10平台 Coursera工程师董飞:典型硅谷公司大数据实战分析 微软开源Visual Studio构建工具MSBuild 死而复生!下架6月,Launcher重回App Store 虚拟投影、高保真耳机!新型可穿戴家庭影院Dashbon Mask 【程序员电子刊精选】躺枪的互联网思维 Algolia的分布式搜索网络架构 对抗苹果?豪雅联合Google、Intel开发智能奢表 VR产品技术解析之三星Gear VR 雅虎北研即将关闭 人才抢夺战迅速拉响 移动应用中的AR开发,5款最受欢迎工具推荐! 中国黑客Pwn2Own再创佳绩 Keen Team三年五夺魁 星环CTO孙元浩:技术解析Transwarp Inceptor是怎样炼成的 第七届中国云计算大会将于6月3-5日在北京召开 两大设计模式 塑造高可读性的网页布局 IP争夺战:任天堂与DeNA联手意味着什么? UNITE 2015干货不断,三天日程抢先看! iOS 8发布近一年,苹果HomeKit都带来了什么? Facebook开源移动网络测试工具Augmented Traffic Control 用JavaScript开发移动原生应用,Facebook正式开源React Native! 关于C/S结构的问题?快帮我啊!!! 各位programer加班有加班工资吗? 代理服务器的原理?——有谁知道! 请问怎么在一个对话框程序的文本框中绘图 请问windows网络程序PING编程技术里的几个问题,ICMP回显里面的timestamp是怎么纪录进去的 什么地方可以Down rose?或谁寄给我一个? 编写一个函数,通过指针连接两个字符串!!!!!!!!!!!! 用applet怎样打开一个文件吗? 请问哪种ORB产品实现了com服务器/corba客户机的桥 我读《深入探索C++对象模型》的感受,cber能再回答我一次么? 谁有DELPHI的有关网络编程方面的资料?给我一份可以吗? 关于stringgrid的问题????? 痛苦啊,难道要放弃BCB吗? 大家认为在开发过程中是否不能用全局变量? 如何让LINUX支持我显卡 高手,谁来帮我一下~! 取字符 在SDK中,如何获得客户区的宽度和高度呢??(哪两个函数呢?) 哪里有ATL的电子书下载?最好是中文的! 高手谁能帮帮我呀~~~~~~~! 请教:如何在statusbar的panel中显示一个图标呢? VC++中如何使用OLE对象? 初来乍到,发现这儿JJMM还挺多的。。。 请高人指教~! CSDN中碰到这种问题,该如何解决呢? 如何学习director 你能帮我一下吗?~ 企业商务管理软件,开放全部的源代码及开发文档! 企业管理软件,全套源码及开发文档!!!! 哪里有支持任何波特率的通讯控件下载? net_lover(孟子E章)请进~! 一个有关CWebBrowser的问题,急急急!!! 这样的语句为什么不可以实现一次删除多条记录 plmm是什么意思? 各位大侠,知道哪儿有直接可用的上传文件的控件吗? 多谢了!!! 论坛的题目是不是太没意思了 一个sqlserver7统计的问题?? varchar类型不是可以输入255个字符吗,为什么我输了160个就出现'item XXX doesn't pass validation test ' 唉 ~~~~~ 奈何 ~~~~~ 突然想到个荒唐的问题: 事件和过程有什么不同? 奇怪的事前,高手请进来 我的问题还没有解决~! 这里的高手呢,人听多,会的人不多 申奥倒计时,如果你在线,请进来验证这以历史性时刻,谢谢 我有一个用hook截获鼠标移动的dll,但是没有效果,请问怎么调试? 请教,怎样在java中把Button的背景改做一个图片 对delphi5一个自带例题的疑问。 爆炒MM之水园MM ID一览 窗体和控件的自适应问题? 求《unix》环境高级编程的源程序下载。 在MIS或WEB中有大量的对数据操作的工作,是否所有的insert,update,delete工作都需lock and unlock??? 初二上册数学直角三角形全等的判定,同步练习那一题.已知:如图,在三角形ABC和△A'B'C'中,角ACB=角A'C'B'=90°.,CD,C'D'分别是△ABC和△A'B'C'的中线,且CD=C'D';CE,C'E'分别是△ABC和△A'B'C'的高线,且CE=C'E' 8.4÷﹙2.1×5﹚简便计算 递等式 5乘777加13乘555怎么巧算、、麻烦帮我一步一步写出来. 如图 在三角形abc中,角acb=90°且de是三角形abc的中位线,延长ed到f,使df=ed,连接fc,fb,回答下列问题1..求证:四边形BECF使菱形2.当角A的大小满足什么条件是,菱形BECF使正方形?请回答并证明你的结论 (-510)/(+34)/(-0.125)简便运算大师帮忙~ 计算(-1)+(-3)+(-5)+(7)+…… +(-99) cos(arc sin x/a)等于什么还有反三角函数公式里的一些类似的! 人教版五年级上册数学指导第9页跳一跳0.34×12.5+0.125×66 如何计算1+3+5+7+.+99=?里面有多少项?如何计算呢?===多少? 若a=arc sin(sin3分子4π),则a的值 用梯等式求50*96+57*4+7*66 怎样求证对于任意的角A cosA四次方-sinA的四次方=cos2A (arc sin x)/(x)的极限是?x趋于0 57乘66分之23如何简便运算? 已知cos2a=3/5,求sina的四次方+cosa的四次方 计算:sin[arc*sin(3/5)+arc*sin(7/18)] 数学题怎么算 /80 = 66 怎么计算 cosa四次方—sina四次方 为什么 等于cos2a arc sin (25/99)等于多少度啊?谁手边有计算器帮忙按一下下呗 谁给我出题,80道数学题,(简算)和(方程) sin^4a+cos^4a=1,则sina-cosa= 如图9,三角形ABC中∠BAC=120°,AD垂直BC于点D,AB+BD=DC求∠C的大小 arc sin(-1/2)=? 给80分 用算除法小风 小玉 小明是幼儿园里最好的朋友 小风体重14KG 正好是小明体重的8分之7 而小明比小玉的重15分之1,小玉体重应该是多少千克 修一条路,第一天修了8分之3,第2天修了第一天 如图 在三角形abc中,bd=dc,∠1=∠2,求证:ad垂直bc. sin ( arc sin л/6 ) =多少?还有一道:arcsin(cos 7л/6) = 1+1.2+1.4+1.6+.+9.6+9.8+10怎简便算法 如图,三角形ABC全等于三角形A'B'C',AD,A'D'分别是三角形ABC,三角形A'B'C'的如图,三角形ABC全等于三角形A'B'C',AD,A'D'分别是三角形ABC,三角形A'B'C'的对应边上的中线.AD与A'D&# ARC sin 0.91ARC( sin 0.91) 是多少的角度啊 用简便算法计算:48×110-4×48-8×48+2×48 如图 三角形ABC相似于三角形A'B'C',相似比为k,AD A'D'分别是边BC B'C'上的中线,求证AD比A'D'等于k 5分1比1和3比15可以组成比例对吗 (12.5+0.125)×8-81的简便算法 如图 在三角形abc中,d是ab上一点,且ad等于cd等于bdde,df分别是角bdc和角adc的平分线,求证:四边形cfde是矩形 0.47*2.5*0.4怎样简便运算 1.6*7.5*1.25.请用简算法. 如图,在三角形ABC中,角B=44度,角C=72度,AD是三角形ABC的角平分线.(1)求角BAC的度数;(2)求三角形ADC的度数 0.47*5.9+5.2*4.7-4.7*0.1怎么样简便计算? 6.25*2.7+6.5*1.25的简便算法 如图,在 三角形ABC中,角C=90度,AD平分角BAC,且角B=3倍的角BAD,求角ADC的度数 63+0.63*2.5+0.63*6.5怎样简便计算, 3.14*1.375+0.314*6.25-3.14*0.2 的简便算法 如图,AD为三角形ABC中角BAC的角平分线,DE为三角形ABC的中线.若三角形ABC的面积为24平方厘米,AB=8cm,AC=4cm,则三角形BED的面积为多少?要过程!急! 简便计算185/25-4.5/2.5 1.25*7.1+1/8*2.6+0.375的简便算法 如图,在三角形ABC中,∠ACB=90°,AC=AE,BC=BF则角ECF等于 5.2×4.8+4.8×4.8简便计算算出来讲原因 1.25*1.6*1.5简便算法 如图在三角形abc中角acb等于45度角a等于九十度bd是角abc的平分线ch 2.5×2.4÷1.4+4.8÷2.1×2.5的简便运算 1+2-3-4+5+6-8+9···+1997+1998-1999数一个没错,让你计算, 如图,在三角形ABC全等于三角形A’B’C’,角∠ACB等于90°,∠A等于25°,点B在A’B’上,D是BB’的中点,连接CD,求∠ACA’的度数 简便运算:4/11*(2/5-1/4) 333*333怎样用简便方法计算? 如图 在rt三角形abc中 角acb等于90度 a=5 c=13 求b若斜边AB上的高为CD 求CD 简便运算:40.5÷1/4*[(1-1/4)*1.2] 333乘以333用简便方法怎么算 如图,在三角形ABC中,角ACB=90°,角A=60°,CD,CE分别是边AB上的中线和高.求证角ACE=∠ECD=∠DCB 简便计算4.5*9*1.2=? 777+777-777x777÷777=?用递等式怎么计算
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn