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

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

一个用VB5.0 实现的鼠标绘图程序 用VB6.0制作画图板 用VB6设计有趣的动画场景 用VB编程绘制网格图像 用VB绘制抛物线动画曲线 用VB绘制正弦动画曲线 用VB实现“百叶窗”的图形特效 用VB实现托盘动画图标 用Visual Basic 定制BMP文件 用Visual Basic的Move方法实现动画效果 用Visual Basic与MS-Draw开发通用作图软件 在VB中获取可执行文件及Windows 95快捷方式的图标 在VB中进行各种图形切换的方法 在VB中制作可滚动的图像显示 在图片上平滑移动文字 -VB资料 VB怎样使程序的标题条闪烁? VB制作图像的Mask图 CWinInetConnection-一个封装了WinInet API函数的类 -VB资料 MODEM通讯意外处理-VB资料 MsComm 文字传输-VB资料 PING一个IP地址(向它发送一个数据包并等待回应) -VB资料 SMTP协议简介 (Simple Mail Transfer Protocol) -VB资料 VB5.0 中远程数据库的访问 VB下如何编写CRC校验程序 Visual Basic 6中发送邮件的新方法 Visual Basic通信程序设计 Whois 示例程序-VB资料 Winsock Terminal示例程序 -VB资料 WinSock断开导致客户端问题-VB资料 把Outlook信箱中的附件另存为 -VB资料 保证连网计算机时间同步-VB资料 我不想用第三方控件,如果我想使把Panel中的内容达到一个清屏效果(便如由上向下刷新,但最前有一些粉碎状效果,或是百叶窗什么的。) 有关异常的问题 如何用最简单的方法控制在数据窗口最后一列按回车键增加一行? 哪有ASP的技术手册呀?有关组件用法的 那位能有一个使用xpoint的应用?我不知道应该怎么用xpoint,有什么好??? 为什么我建立了两个读写线程,当频繁读写硬盘后,无法刷新界面呢? 再请教:如何得到浏览器的窗口的尺寸? 高分求助!!!怎样用VC在98下建立一拨号连接? 曾经的话题想改变命运的请走进来不想再说多少有自已看懂了的曾经在这里发过言的朋友可以和我联系,QQ12545029,scaer123@163.net socket编程,如何使connect()30秒超时???? 请问国内有OpenGL的比较全面的代码下载站点吗?能否提供几个URL?谢谢! 关于操作符重载的问题 有什么办法隐藏一个文件夹,使别人清除隐藏属性也看不到。 com的奇怪问题,27分 新手三层结构。问题多多。。。 jsp怎样连数据库? 高分讨教:这个vb+SQL2000的出错提示太奇怪了. 有在深圳考程序员的吗? 大家觉得电信好还是联通好啊 为什么在Win2000下我的GeForce GTS的显卡用了最新的公版驱动,在Windows优化大师中测试 一个小问题,如何在Access97数据库中创建和使用临时表??? 请问一个问题:有一个字符串,我想去掉左边固定的几个字符,剩下右边未知的几个字符!怎么做?谢谢~~ 菜鸟提问,网页上的自动变化的图片用什么作的呀? 请问哪有免费的web mail系统下载? 如何新建一个数据链接? 我想给自己的控件加一个ImageList和ImageIndex属性,选中ImageList后,在ImageIndex中显示图像列表。应如何做? 曾经的话题想改变命运的请走进来不想再说多少有自已看懂,了的曾经在这里发过言的朋友可以和我联系,QQ12545029,scaer123@163.net 如何在ASP中实现广告的按比率播放? dbedit 的问题,???????? private 里声明的函数居然调用不了? 如何得到字体的宽度和高度? ???????如果你说你对DELPHI懂,请进 SAMPLE QUESTION 在DELPHI中如何使用其他语言开发的主见? 请问LINK : warning LNK4098: defaultlib "mfcn42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library是什么含义? 请问,如何删除一个单项链表的头节点?? 怎样成为编程高手!请教高手们!! b/s程序在客户端生成EXCEL报表问题,梦天请进? 求解:如何将一幅图片或文件存入数据库??? 在用UpdateBatch方法保存纪录时VB提示:数据提供程序或其他服务返回E_FAIL状态。错误号:80004005,我死活也调不出来,还望各位高手指点一二。 菜鸟求教:要怎样去买一款满意的笔记本电脑?(29分) 我新生成一个继承自TPanel的类,但我想有其Create时,在其上放置一个TImage,请问: 急!新手请教:想查一个字符串是否存在于另一字符串中,如"asd" 不在"abca sd"中,该是哪个函数 为何网能上Ftp软件和SQL Server和Foxmail用不了? 急!!!谁有RTF文件格式中元素说明?给一份!谢先!!!!70分奉上! 请问VC中如何配置ADO(详细些)???????????????????? 关于一个DW的求和问题 问win32汇编大师(vBin等)一个非常难的问题,请看下面的源码: 请帮我看一看这个问题(关于死锁),顺便送分。 欢迎讨论jsp与ASP.NET技术 vb6+SQL2000中,在用UpdateBatch方法保存纪录时VB提示:数据提供程序或其他服务返回E_FAIL状态。错误号:80004005,我死活也调不出来,还望各位高手指点一二。 关于如何导出SQL SERVER 的数据到Excel表?? 在括号里填上适当的数,然后列成综合算式. 长方体、正方体各部分名称 3次根号64的平方根是多少 三分之根号三 的开方等于多少啊 (1)用S表示圆的面积,r表示半径,圆面积的计算公式就是( )(2)一个圆的半径是10dm,这个圆的直径是( )dm,周长是( )dm,面积是( )平方分米(3)如果一个圆的半径扩大3倍,那么它的周 长方体和正方体有什么关系 两个圆的周长比是四比五这两个圆的面积比是多少?急 圆的面积公式中S=派R2,S于R成正比例关系还是反比例关系? 小学长方体和正方体的体积问题!把一个长是6分米得长方体,沿着宽切成两个小长方体后,表面积增加了20平方分米原来长方体的体积是多少? 两个圆的周长比是4:5,这个圆的面积比是( : 我马上就要交试卷了! 圆的面积为什么=派r的2次方 有两个圆,第一个圆的半径是4厘米,第二个圆的周长与第一个圆的周长的比是4:5.第二个圆的面积是多平方厘米 圆的面积2πr这是什么公式?但怎么我的工程力学上的圆的面积公式是这个:(πd^2)/4为什么捏 高数证明半径为r的圆的面积为s=派r平方 十六进制1000转换成十进制数是多少?请写明计算步骤~ 在圆的面积公式里r等于什么 若m+m分之1等于根号5,则正数m-m分之1的平方根是多少 十六进制1000转换成十进制数是?解题思路 八进制和十六进制的数怎么求,如(101)8 和(101)16 数电求大神.一位十进制、二位三进制 、 计算机的十六进制1000转化成十进制数是多少啊?怎么计算啊 若根号m=7,则m=_,m的平方根是_. 将十进制数3344化为七进制. 列式计算: X的24%比2多2.8,求X   (综合算式) 若-根号2是m的一个平方根,则m+7的取值范围是多少? 94 9B 40 03 转换数字是1765请问这个是几进制的代码?转换的方程是什么. 8个x比5个x多48怎么列算式 最好是第一单元的, 新华小学2010年五年级下册期末语文数学试卷 要像(5:x=8:2)怎样列的式子 若负的根号2是m的一个平方根,则m+7的平方根是? 五年级下册数学试卷苏教版要苏教版的 一辆客车从甲地到乙地,第一天行了全程的1/5,第二天行了450km,这时已行路程和剩下路程的比是3:7.甲、乙两地相距多少千米? 金钥匙小学四年级下册数学试卷 已知2m+1与m-4是正数a的平方根,求3次根号a-1的值 百分数奥数题 快 SOS 求人教版的四年级下册数学试卷是期末考试的 已知一个正数的平方根是m+3和2m-151)求这个正数是多少?2)√(m+5)的平方根是多少? 求小学六年级数学题~~~~~`拜托 急用 小学四年级下册数学试卷 (人教版)第三单元测试 若m+1/m=根号5,则正数m-1/m的平方根是?m^2-2+1/m^2=1 是怎么得到的?为什么=1? 十进制数 378 转换成十六进制数的是? 我想知道过程是怎么做的?谢啦 53页 小数的进制转换10进制小数转2进制2进制小数转16进制2进制小数转8进制2进制小数转10进制.简单好操作的笔算方式 计算2004÷(2004+2004/2005)=( )请妖精momo1987把过程写详细一点,如果好我就会采纳! 圆的面积公式S=πr²,S与r之间的关系是 小数二、八、十、十六进制互相转换比如二进制10101101.11十进制5032 把1,2,5,6,7,8,9,10,13,分别填在括号里(每个数字只能用一次),使三个算式都正确( ) + ( )= ( ) + ( ) = ( ) * ( ) = 圆中R,r,d,s,c,还有圆的面积公式和周长公式?还有半圆的面积公式和周长公式 1第6题答案求出下列抛物线的开口方向,对称轴及顶点(1)y=-3x²+12x-3(2)y=4x²-24x+26(3)y=2x²+8x-6(4)y=1/2x²-2x-1 1.b²×b的m次方+b的³×b的m+1次方=?2.x的4次方·x的³+7x的六次方·x-2x的五次方·x²=?3.x的3n+1次方·x+3x的n+1次方·x的2n+1次方=? 若m为根号2的小数部分,则m方加m加根号2等于多少? 小数进制转换问题十进制的小数如何转为二进制的小数?最好详细点,我数学方面很迟钝.哎. 某一项工作,甲单独做20天可完成,乙单独做30天可完成,现在两人合作,中间甲休息了3天,乙休息了若干天,终于用16天完成.那么乙休息了多少天? 八进制数26553转化为十六进制数是多少?要求有过程 初三数学下册习题26.3的第八题怎么做 某种笔记薄大号本1元买3本,中号本1元买4本,小号本1元买5本.如果用6元买得笔记薄25本,问大,中,小号各几本? 已知8个一样的正方体,它们的棱长总和是288厘米,把这8个正方体拼成一个长方体,已知8个一样的正方体,它们的棱长总和是288厘米,把这8个正方体拼成一个长方体,这个长方体的表面积是多少?体 小数进制的转换问题现在有个十进制小数:7.49转为二进制小数就是:111.0111(2)但是,我把111.0111(2)转为十进制小数时如下:整数部分:1*22+1*21+1*20=7小数部分:0*2-1+1*2-2+1*2-3+1*2-4=0.437结果
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn