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

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

表或查询是否存在-VB资料 不创建DSN直接在程序中使用ODBC数据源-VB资料 不用 DATA 控件操作数据库文件 -VB资料 不用 EOF 以加快记录循环-VB资料 处理Select语句中的单引号 -VB资料 断开所有的数据连接 -VB资料 访问VB外来数据库 非access数据库在vb中的编程及应用 关闭程序中所有创建的数据库连接。 -VB资料 关闭所有的数据连接 -VB资料 关于数据报表的打印设置-VB资料 VB建立、改变及重构Access数据库-VB资料 结构化查询语言(SQL)详解之一-VB资料 利用VB使ACCESS数据库在网络使用中保持同步 返回 连接Data到多个表单-VB资料 列出 SQL Server 数据库中所有的存储过程-VB资料 列出MDB档当中所有table的名称-VB资料 您想知道有谁正在使用您的 Access 文件吗?(多人环境中)-VB资料 主题:浅谈Excel 的VB编程 巧用VB6的DataGrid实现通用电子表格 VB取得正确的 RecordCount 值 主題:如何动态新增、移除 ODBC DSN? -VB资料 VB如何将表中的数据导出到电子表格中 VB如何将文本文件转换为ACCESS数据库 VB如何將 Excel 的文件导入 Access文件? VB如何判断数据中是否存在某一表或查询 VB如何删除FoxPro数据库的数据? VB如何设置对VB数据库连接的动态路径 VB如何使用 ADO 來压缩或修复 Microsoft Access 文件 VB如何修改Foxpro数据库(不是用VB实现的,不过也可以看看) VB如何在 SQL 语句中使用日期? 返回 请教“高速数据链” 请教,关于使用checkbox的问题。 怎样用ASP.net实现读取mail文件的标题,查看文件(不是收件)删除文件的操作?到底应该怎么和Exchange协同工作? 急!!!!matlab中用什么语句可以将黑白的bmp图片转化为一个由0,1组成的矩阵?? 高分请贴:请问各位:客户端与服务器的较详资料! 有关BCB6里TXMLDocument的问题 请问这一个语句的判断条件怎么解释? 打架经验谈(转) 怎么样从一个节点的某个属性值把指针指向这个节点并修改它的另外一个属性? 怎么让RICHEDIT的滚动条在当前输入的这一行 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 看来新绑的Rave又不会是个什么好东东 急急急!如何像FlashGet一样,取出当前网页中的URL或某一条链接的URL?(400分赐教) Java 中 如何替换字符串 CSDN服务器的时间居然比北京时间快了7~8分钟! 奇怪!DBGrid数据显示不全!解决者再开一帖送100分! 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 请问有EHLIB的中文使用方法吗? 又是一个关于类定义的问题? 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 有谁知道phpmyadmin在哪可以下载?谢谢 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! “猫”总版主:是否把我的帐号解封? 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 快来救救我~~~~~~请大虾过来指教一下! 现在CSDN用了XML,我怎么保存好帖子呢? 这里谁用POP3收邮件的?? 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 重启机器就进不了WIN98,这是怎么回事? 在C#里是用接口来解决多继承的问题的吗,给个例子好不好! 开个新帖专门讨论WEB打印问题吧 :) CBaseFilter类为题(急) 调查:你是Delphi程序员吗...... 到底ASP的内建组件?我在我机器上能用几个?我在我的机器上输入这么两条语句全都不能执行,请问为什么,我真惊了!谁能帮帮我? 超难度sql 语句 一个很菜的问题。 grub 不认ntfs?(在线等答,可行的话我给50分) 金童玉女的追求与堕落 请问如何让网格自动调整宽度? 放分之一(一个小小的题目,谁第一个写出来就得分) 装了XP后,如何找回Linux? 急需源代码…… 谁在??? 帮帮我啦。。~~~~~~~~~~ 急急急!! 请问MSDN里面所说的Video Capture函数和视频采集卡厂商所提供的SDK有什么不同了?在线等候。。 怎样使网页(IE)上选择的文字能够拖动到BCB程序中?(400分赐教,决不食言) 调查:你是共享软件作者吗........ 急需帮忙!!! 编程,怎能支持少数名组语言 到底在linux那里是用什么命令解压zip文档的?各位高手告诉我!! 电解池,粗铜含有AU,AG,FE在阳极,为什么AU,AG会沉淀在阳极下面? 一个火字旁一个旦字读那样字? 电热暖手宝里面装的是什么液体 能用水替换吗? 如何选购二氧化碳培养箱 将红色的苋菜放入研钵中研磨一段时间,发现有红色汁液渗出.这是因为研磨操作破坏了咸菜细胞的液泡膜我知道.还有一样是细胞壁还是细胞膜还是叶绿体 不锈钢锅,用干布擦锅内时,有一点点黑色留在布上,请问这个锅还能用嘛?不锈钢都这样吗? 细胞培养箱和二氧化碳培养箱有什么不同 把红苋菜放在热水中煮几分钟,沸水变红的主要原因是破坏了细胞的A.细胞壁B.细胞膜C.细胞质D.细胞核 如何巧擦不锈钢锅的油污 中华民族传统美德诗句感恩报答的 能用塑料杯泡茶吗?拜托各位大神 左边一个火,右边一个同,是什么字 二氧化碳培养箱能否做为厌氧培养箱用 CuSO4的溶液是什么颜色?固态晶体是什么颜色?如题可是为什么有的书上说CuSO4是白色固体呢? 需要什么原料,具体步骤是什么, 古代的城门为什么都做成拱形的? 血液是溶液、悬浊液还是乳浊液? 电热暖手宝的双重温控开关是怎么连的啊 除去硫酸铝溶液中混有的硫酸镁,可加入足量烧碱,过滤,向滤液中加入适量硫酸酸化为啥错呢?还有做完银镜反应后的试管可用热的稀硝酸清洗,回收后的硝酸银溶液可再利用,为啥对呢,做完银镜 人体营养物质的输送主要依赖于血液,血液属于 A悬浊液.B纯净物.C乳浊液.D溶液 电热暖手宝的问题!这种电热暖手宝(铁饼这样的,如图),是冲完电后自动断电,指示灯熄灭是凉的,然后自己慢慢升温吗?为什么我这个用了一个多月了,现在充电过程中,暖手宝都是热的,然后充 若根号x为实数,则函数y=x的平方+2x+3的值域是多少 暖手宝(电热水袋)可不可以换水,如果可以,重新加水时又要加好多?生活中的常用问题 如何巧擦不锈钢锅的油污 勤劳是中华民族的传统美德,从古诗词…… 暖手宝里的水感觉少了怎么办啊? 饱和一元酸通式怎么求出来的 关于美德的古诗散文诗或小诗 我的电热暖手宝坏了我的暖手宝是电热的 插在孔上灯就会亮昨天不知道怎么就坏了 里面有个硬的管子 要扯他才会亮 一放又熄了 真是郁闷 怎么回事哦 我该怎么办? 火 儿字读什么? 利用随机函数产生80个10~99之间的随机整数,将其中的奇数按由小到大的顺序排列并输出利用随机函数产生80个10~99之间的随机整数,将其中的奇数按由小到大的顺序排列并输出;在产生的80个 赞扬中华民族的传统美德的诗歌 不要太长 苋菜的汤变红了,其红色物质主要来自细胞的 A.细胞壁 B液泡 C细胞核 D细胞质 饮水机的整个尺寸包括水桶,机身 最好能告诉我饮水机 各个主要部位的尺寸是多少 人如果体内缺乏碘元素,怎么办 苋菜炒熟后为什么是红色的 糖原过多会转化为脂肪? 左边火 右边橘字去掉木读什么 苋菜中的红色是由什么色素引起的 体内糖原与消耗脂肪的问题吃过饭后体内的糖原变多,运动半小时后体内的糖原消耗完毕,开始消耗脂肪.1:如果不吃饭运动,体内的糖原是否很快(不超过半小时)消耗完毕,马上即开始消耗脂 8年级生物:腐生生活的微生物在生物圈中有什么意义? 若lga+lgb=0,z则函数f(x)=a^x与g(x)=b^x的图像关于?对称A.关于直线y=x对称 B.关于x轴对称C.关于y轴对称 D.关于原点对称 放能最多 脂肪 糖元脂肪 糖元‘放能最多的是________ 打开盛液溴的瓶子可看到什么现象?用什么可以抑制其挥发?常压下加热碘什么现象?加什么试剂防止其挥发?加热的现象! 病字框下面一个坐字怎么读? 向9.8克氢氧化钠固体中加入一定质量的硫酸恰好完全反应,把反应所得溶液蒸发掉3.6克,溶液中硫酸的质量分数为10%,求稀硫酸的质量分数. 用93%的硫酸(密度1.816)配制10000g88%的硫酸溶液需加水多少 病字框中 上是自下是仑 读什么 在30克百分之五的氢氧化钠溶液里滴入三滴酚酞试液计算需要加入多少克百分之五的硫酸溶液能使溶液刚好无色. 塑料杯能用来泡茶吗如题 病字框里面有个右耳刀是什么字?读什么? 多少克20%的NaOH溶液才能和20克19.6%的硫酸溶液反应?反应后溶液的百年比浓度是多少? 火字旁一个旦,念什么? 病字框的字有哪些 黄铜矿熔炼后的到的粗铜含少量Al,Zn,Ag,Pt,Au等金属杂质,需要进一步采取...黄铜矿熔炼后的到的粗铜含少量Al,Zn,Ag,Pt,Au等金属杂质,需要进一步采取电解法精制 火字旁 一个旦 是什么字?有这个字么?火旦 或是和它相近的字 饱和一元酯 饱和一元酸基本通式是什么? 高中化学:K,Ca~Ag,Pt,Au金属单质放氢氧化钠中,哪些反应?稀氢氧化钠 火字旁一个旦,念什么?要发音 电热暖手宝和储水式暖手宝哪个好
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘