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

悼念斯诺登使用的加密电邮服务——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相继关闭,美国云安全已死?

Delphi 中自做动态显示的控件 Delphi3的DBGrid中的下拉列表和查找字段编程方法 DELPHI常见问题 Delphi的竖排标签 DELPHI构件制作方法 DELPHI控件Tweblabel的编制 DELPHI中MEMO组件的光标定位 Delphi中RichEdit的奥妙 Delphi中TApplication类 Delphi中日期时间输入的简洁方法 delphi中怎么调用interbase数据库? Memo的Undo功能-Delphi资料 RECT在Delphi中的灵活使用 StringGrid制作只读列-Delphi资料 TADOQuery下主明细表其属性关系如何设置,如何保存主表和明细表?-Delphi资料 TBatchMove用法-Delphi资料 TMemo的真正插入字符-Delphi资料 TREEVIEW的使用-Delphi资料 TreeView在电信综合统计管理系统中的应用-Delphi资料 VB6.0动态加载ActiveX控件漫谈-Delphi资料 捕捉来自 Thread 的异常-Delphi资料 定制Speedbar-Delphi资料 动态产生构件并相应事件-Delphi资料 对Borland可视部件的一处改进-Delphi资料 控件使用技巧-Delphi资料 改变VCL的行为--一个使用可视化元件的实例-Delphi资料 具有不同字体的列表框-Delphi资料 快速大量地更改控件内容-Delphi资料 快速动态创建MenuItem-Delphi资料 利用Delphi 5中调用Excel 97 利用Delphi的Tbitmap控件抓取屏幕图象 用NMUDP如何在Client端和Server端之间传递对象呢? 为什么程序员没人爱? 指点迷津啊??? 关于DataGrid的一个问题 VCD碟的.DAT文件转换成MPEG格式? 中秋节快乐!散!顺便问一下大家都吃什么品牌的月饼?五点钟准时结贴!!!!!!!!!!!! 求助!!!鲁文易盘无法驱动 如何获取提交表单的内容 Ado 问题 oracle中删除一个用户,用语法如何写 北京的兄弟们你们找工作通过哪几种方式 请问哪儿有cobol的编译器? 请问考系分的兄弟,都在看什么辅导书啊? 不能解决的给分,解决的给钱,时间限制在,13日之前!!!!!!!!!!!! 如何重新定义超连接的样式? ini和注册表能不能一起用? 调制解调器 SYNC灯不亮。 hehe GCC不认识sockaddr_in,但认识sockaddr,哪位大侠指点一下是什么地方没有配置好 asp中的过程和函数是否可以传递两个以上的参数? 假设我在dataGrid中的修改某一个单元格内容之后,焦点还没有离开,再去保存,就保存不了! 求助!!!鲁文易盘无法驱动,急!!!!!!!!!! 为什么只能用localhost访问? 还是烦人乱码问题~~JSP 连不上网。 人家说我有热情没天分,当不了程序员 中秋节给大家助助兴,小游戏一只,最终获胜的可获全部分数,100大分哦! 简单问题,急! 请教零长度问题(不好意思没分了救命啊) 请教零长度问题(不好意思没分了救命啊) sizeof的问题 今天的最近一问.... 写一个参数有默认值的函数出现的问题! 请教零长度问题(不好意思没分了救命啊) 有个关于可见性的问题,请指点, Delphi6中控制Excell2000的Chart的问题 看哪个地方出名人多 c++ 求学 (更上一层楼) 请教零长度问题(不好意思没分了救命啊) 高分寻求jtest4.5的破解 或注册方法 关于批量删除不同目录下相同文件的问题。 如何在VFP中运行VFP代码? 如何调用chm帮助文件? iptables问题 请教零长度问题(不好意思没分了救命啊) 大家來討論工作的問題 能用c语言编有关网络的程序吗?谢谢大侠们了:) 要在程序中控制在DBCHART显示不同颜色部分的内容及数值,如'34 丰田',来者有分? 提个建议:在祝福 璇玑大力 的贴子中,有不少的“名句妙词”,我们花点时间,搜集于一贴,同意的举手!(我的分数太紧张) 低级问题:如何把TFileStream中的一个字节读到一个byte变量中? 串口编程问题 为什么有些植物长在水面上?为什么有些植物长在水面上,为什么呢? 德意志、意大利从前有哪些诸侯国?包括选侯国、公国、自由城市、共和国、王国如奥地利、普鲁士、巴伐利亚、萨克森、巴登、符腾堡、黑森、汉诺威、不来梅、汉堡、吕贝克、米兰、伦巴 赵、韩、魏是由哪个诸侯国分裂而来的? 春天有什么生活在水面上的植物 从春秋到战国的纷争中哪一个诸侯国发生了分裂?A.齐国B.楚国C.晋国D.秦 两个相邻的奇数,它们的和是32,这两个奇数分别是多少? 浮在水面上生长的植物有哪些?仅在水面上生长的植物 邸读什么 水面和植被对气候影响老师,请问水面和植被对气候有什么影响?资料上说由于蒸发和蒸腾作用而显温和湿润,但是蒸发和蒸腾明明是吸热的啊.还有个问题,南极地区应该为极地高压带,但是南极 32分5份只能是单数,怎么分 初中作文文章的提纲怎么写 详细的 美无人机再袭巴基斯坦致3人死亡美国F-35战机进行首次对地精确投弹X-CAT摩托艇锦标赛挺进中国 首站中国最透明的安全软件:百度杀毒隐私保肯德基“半价桶”遭遇争论 小薯条代替宁海查获一万多罐假红牛 包装味道都和外国驻韩外交官5年犯法48起 外交豁农业部:农垦有望率先实现农业现代化朴槿惠为韩职棒总决赛开球 穿日本运动美媒揭白宫工作准则:不让总统为坏消息叙利亚总统警告:外国停止支持反对派才其实日本人的种种自豪都源于中国!英利绿色能源与法国本土组件制造商携手牛散葛卫东同样被套!股市赚了11年却22分钟完败(深刻教辉瑞联姻阿斯利康成败几何虽千股跌停反弹牛仍可期黑客告诉你什么样的密码才不会泄露信息当著作权遇上互联网,维权有理说不清?16家券商新增434.55亿元资金奋北京国际电影节,那些必看电影拇指阅读招聘视觉设计师、新媒体运营梦回洛阳我就是大哥重生之意外人生仙魔业无极阴阳界独武风云英雄无敌之光复之后重生之兄弟风云星际大唐网游之冲锋旅顺动物园旅游闯关东影视城旅游南子弹库旅游铁狮子旅游纪晓岚文化园旅游东光铁佛寺旅游吴桥杂技大世界旅游江厦森林公园旅游桃花寨休闲村旅游庐山牯岭街旅游定光塔寺旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘