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

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

PHP中利用jQuery实现SWF图像上传和裁剪 VB.NET或C#将DataSet快速导出到Excel中 HashSet的equals和hashCode重写问题 PendingIntent实现原理和代码 IntentService实现原理及内部代码 AsyncTask实现原理和内部代码 Neither user nor current process错误 ListView的右边滚动滑块启用方法 Live Wallpaper动态壁纸开发 控制软键盘显示和隐藏 设置Activity大小不再全屏原理 Android面试题,看看你基础如何? Android Canvas绘图抗锯齿解决方法 Android xliff和字符串资源 android.hardware.USB类介绍 Android开发经验谈之应用间数据共享 android_asset这个URL详细使用方法 Android 2.3系统自带高清UI图标下载 设置ScrollView滚动条的颜色 WakeLock使用方法示例代码 Concurrent并发库常见问题总结 Android数据库SQLite性能优化技巧 Android开发之Java设计模式基础篇 Android开发之Java设计模式入门篇 Android开发之Java设计模式 Android开发之Java并发包集合类性能分析 Android开发之Java集合类性能分析 Android开发之Java虚拟机原理和内存分配 Android开发之Java基础系列教程目录 Android Theme主题样式开发注意点 Android 3.0开发用的平板推荐 求救!!我用VB写的windows服务为什么不能运行?快来看看 这个文本文件的数据如何才能传送到数据库表中? 奇怪的现象,Crystal Report 8.5设计器中图表无法显示中文? 各位,谁有比较完整清晰的C#(Asp.net)编码规范,可否给小弟一份,谢谢。赠送100分。 關于 線程內使用數據庫的問題 Unix的文件名字符长度能否超过14个?为什么? 类初始化的问题。求教 数据窗口倒出存为excel格式时,如何倒出表头 请高手指教!!! 如何使用DLL(在线等待) 终于配置成功了jboss应用服务器 动态报表设计 备份日志语句! 98的MSDOS程序都不能运行了,说与系统连接的设备不能运行了,怎么解决?急!!! 问个色彩寄存器的问题 关于WINDOWS服务定时运行的问题,求救!!!!。。 加急!如何只将文档发送给[代办事宜]中,而在邮件数据库中不留痕迹? initialize the Borland Database Engine (error $2501) 带小数点的数字用什么变量类型? 谁用过DHTMLEDIT控件?帮帮忙介绍一下用法。 该死的ACCESS 怎样编写服务器接受客户端的相应程序 我的机子安装完WIN2000后,访问其它的计算机就死机,别的机子访问我机子的时候,我的机子也会死机。 怎样合并两个表??????? 一个有关ISampleGrabber接口调用的问题!Please HELP ME... 如何访问客户端指定路径上的ACCESS数据库? 可以远程安装win2k服务器版么?(各位帮忙!) 还有1。2的考试吗 一条sql语句! 我能在w2k下为非PnP串口设备写驱动吗? 哪位可以解释一下,构造函数到底有什么作用??? 难道没有高手帮我解决这个问题吗?mysql 版主请进 菜单如何显示在工具栏之上? 有关线程之间交换信息的问题 为什么在WIDNOWS98下用MASM50编译的汇编程序不能运行? sql如何自动定时清空日志?(在线等待!) 游戏 有没有办法用纯Javascript取得<form>里面用post方法post过来的数据?100分在线等候!!!绝对给分!!!!! 大家好,级联菜单怎么做呀?再线等待!!!急 邮件发送不了??? 一个落后的问题,用DAO能链接sql server数据库吗?如果可以,怎么链接!? PB中用代码建立ODBC数据源问题。 response中的问题 大家好。 我是新人。。。。。。。 关于用vc操作word中表格的问题 我的机子运行了几个用bde连接数据库的程序,在delphi里就打开不了src了出现以下错误! 求大家一个问题.我已经快疯了?我在等待ing 请问如何用delphi编写一个录音的com组件,在ASP中调用,详细些! 不知道自己到底喜不喜欢女朋友,纳闷.......... 急问!!! I was sorry to hear that he had a coid last week这句话什么意思 选词填空 She knew better than(to turn,turned,turning,going to turn) around or show panic.感觉这里省略了什么,She knew it is better to do..than to turn...1,to turn ,以前听过 than 后面加原形的说法,如果这里有原形 turn,2, 《冲上云霄2》第31集holiday和sam在海边拥抱时的那首英文歌叫什么? 请专业英语教师回答:-----the old man was killed last week.---A.what a pity.B.sorry to hear that.请问怎么选?根据是什么? She's going to give her a dog对还是She's going to give her dog.her那个是人称代词…… 冲上云霄2第31集中的英文插曲(Sam同Holiday拥抱的英文插曲) How's it going?I hope that grandpa is well now,I was sorry to hear that he had a cold laHow's it going?I hope that grandpa is well now,I was sorry to hear that he had a cold last week I hope you are in good health .Things are fine here,I finished my i am going to turn on them i am going to turn them on 都对吧 people sure change中有什么语法知识点? l have enough money to buy her a CD.(同一句)i _____ ______ _____ _____to buy a CD for her. is write to she geangparents going e-mails her to?排句 people sure change何意?sure形容词为什么修饰change homiez中文意思 the river_____serveral meters after the long time heavy rain.A.rise B.raise C.has risen D.has raised但D不行吗?serveral meters 作raised的宾语. 翻译 Sunday night comes to eat meal?I ask you not to come? A:What's the matter_you?B:I feel_.I have a fever.A:i'm sorry_hear that You should_ B:Thank you! The river ________several meters after a heavy rain last night.A.lost B.rose C.gave D.raised 不理解的地方在于:在这个句子中“several meters ”作的是宾语吗?如果是,那么rise本为不及物动词 又怎么可以直接跟宾语 连词成句 is,and,a,mirror,there,bed,a what's the matter i have a cold.可以把问句换成what‘s your matter (1)___after the heavy rain这里填Out coming the flowers还是Out came the flowers?有什么区别吗…… there a an air-conditioner is and mirror怎么拼 there are three__in our classA.german B.germans C.german's D.germen这个题选什么,说下理由~! 根据句意及所给单词的首字母或汉语提示,写出所缺单词的正确形式. 1.After the heavy rain there was a b根据句意及所给单词的首字母或汉语提示,写出所缺单词的正确形式.1.After the heavy rain there was a 各位大哥帮我找找这篇文章吧open the window小弟实在是找不见 There are three windows in our class.同义句? There a basketball match this afternoonA:will be B:will have C:are going to be D:is going to have ( ) 27. ________ open the window?A. Will you please B. Please will you C. You please D. Do you there are 45 students in our class,i_____ three Englishmen. There is a basketball( )between Class One and Class Two. these are ping-pong balls (提问) Heavy rains ____the river.(rise raise) Time passes.Memories fade.Feelings change.People leave but the heart never forgets. tony has (three ping -pong balls). 对括号里的进行提问 He can speak some English,but not ____A.many B.lot C.a little D.much "I love my family"is one of the most popular s_____in China根据首字母提示填写—— Open the window!(变成否定句) the window! Most people have little chance to (p ) for the earthquake. tom and jerry have already lived togther 改为一般疑问句 和否定句 How Many Times,How Many Lies 歌词 英语作文 是every your da y 还是 your every day如题 I'm sorry ____(hear) that you are ill. Amy and Tom piaying chess改为否定句 2They are cheaning the room改为一般疑问句并做否定回答3.his morther is reading对画线提问 4.He watches Tv in the eveing用now改写句字 5.is of this a family photo ,myl练词成句 I believe __with people in English every day is of great help to improve your English?to communicate B communicating那个正确,为什么? jane has three ping-pong balls.对后面的句子提问 kate has some ping----pong balls in her bag (改为一般疑问句) 上海的英语机构比较的好是哪家? 什么食物含优质蛋白 Lucy has some (ping-pong balls).对括号内的提问_____ _____ Lucy ____? 在上海哪里的英语教学机构比较好? 哪些食物含有优质的蛋白质? What did you do there?I [s ]and[d ]witn my friends Little dose she know what may happen改为正常语序 优质蛋白食物有哪些 What do you do when you feel lonely? I don't know _____.A.from what city she comes B.what city she comes from 选A还是B?为什么A不行? My friends a________ Tom and Jack.根据句意及首字母提示完成单词. To be lonely is not because you have no friends.but there is no one in yourTo be lonely is not because you have no friends.but there is no one in your heart…这些英文是什么意思? I know what she t_____ of .根据首字母写出单词.没有上下文,只有这一句,填什么? Tom,Jack and Luce ___ my friends.A isB are选哪个?为什么?这里不用“就近原则”吗?那什么时候用啊? 求冲上云霄2第31集Sam同Holiday拥抱的英文插曲
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘