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

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

MDCC 2014大会日程概览发布 最新嘉宾议题揭秘 终于来了,微信企业号正式开启公测! 【问底】王帅:深入PHP内核(一)——弱类型变量原理探究 谷歌Kubernetes专访:未来BigTable开发只是课后习题 首届“最具价值CTO”评选来啦!我们在找你! 【CTO俱乐部走进顺丰总部】活动图文直播进行中 中国第一个云主机评测发布:天翼云性价比第一、青云质量第一 Ruby 2.1.3发布,降低内存消耗、修复众多Bug! OpenHW2014开源硬件总决赛鏖战西安 AMD力推异构计算 《坦克世界:闪电战》:PC转手游,不止免费! 【讲师】道里云毛文波:网络虚拟化与SDN实现Docker连通 性能测试:SequoiaDB vs. MongoDB vs. Cassandra vs. HBase 华云数据推运营型PaaS Plus平台,联合Tmax走出“去IOE”的云化之路 聚焦移动新势力 MDCC 2014免费展位团队名单公布 详解Google Authenticator工作原理 云计算的乐高玩具,Docker从根本上改变应用程序开发 【先锋】eSage缔造异构虚拟化管理技术,做数据中心核心思想执行者 Uplinq2014:亲身体验Vuforia与智能眼镜设备 MDCC 2014 移动开发者大会议程全面揭晓! 顺丰模式:物流行业“互联网化”的科技之路 移动应用云服务工具APICloud宣布完美适配iPhone6 从应用分发到能力开放 华为开发者联盟沙龙上的共赢理念 SOOMLA框架:移动游戏分分钟创建个虚拟商店 Facebook:如何让应用适合所有系统、带宽以及屏幕 Docker实践者不能错过2014 Container技术大会的九大理由!(讲师议题全面揭晓) 2014全球云计算大会中国站(CC China)精彩集锦 腾讯X5浏览服务正式开放 30多款APP成为首批受益者 Node.js设计经验谈 LeanKanban University首位中国认证讲师路宁:看板会为更多国内企业带来深刻变革 环信IM沙龙纪实:无分享不IM,无社交不未来 【工具推荐】ESL:更简洁、更高效的标准加载器 请问怎样控制数据窗口某列某中数值的字体颜色,给高分,呵呵,请指教 请问qq是vc还是delphi些的呢? 有没有开发IE插件的SDK? 各位大虾请帮忙,简单的vb循环转C++ 急救:::一个关于网站建设的问题 如何在代理中使用LotusScrip创建表单? to:anybody1 thanks Delphi6.0中怎样使用OpenDialog?(一定给分) 本周五3。15是giko(孤独的老鱼)的生日! 用bcb编写cgi程序 关于权限的问题用SQL语句实现?急急!!! access violation 问题 小弟的登陆程序还有点问题,请各位帮忙解决。 听说能自己给自己加分? ◆◆◆奇怪,关于ZIP 压缩文件??? 怎么在运行时为picutrbox控件内部增加其他控件?还有问题解决了,分怎么给? 如何恢复ASP的组件服务? 又一个C/S方式下的编程问题,不明白呀?为什么呢?怎么做呢? 关于弹出菜单的问题,请赐教! 请您指教100分。 程序是中文的,可以在日文的 WINDOWS 98 上正常显示 , 及运行吗 ? 让对象在窗体内来回移动,当移动到窗体边界又能反弹回去,这段代码怎么写? 怎样把其他应用程序的主菜单变灰? 大学本科,,函授,自考,夜大,远程教育,自学!哪个硬! 关于TNMUDP不能接收>2048数据包的问题? 关于sizeof()函数的疑问? 请问关于O的设计问题? 在sql server 2000中如何创建一个database 程序是中文的,可以在日文的 WINDOWS 98 上正常显示 , 及运行吗 ? 有没有用过zope的大侠,谈谈感受吧:D LNK4089是什么原因引起的? ADO中,如何获得连接字符串? 请问关于OO的设计问题之二? 语句的错误? 换个id灌水的感觉真爽 一个最简单的存储过程 关于空间的问题 资源文件是什麽,怎麽使用? 请问怎样将下拉数据窗口中的某一行设置为当前所显示的行? InstallShield 如何做个 unistall 的 shortcut 到菜单里 scandir怎么用? 怎样从CMainFrame中调用DOCUMENT类中的PUBLIC成员!谢谢! 在线成中如何更新一个对话框 学习JAVA用JSDK开发还是VJ++?有什么区别吗?还是一样? "Resource id #1"是什么意思?? 主板上风扇都不转了,是什么原因??请教,谢谢!!! 乒乓球队进行比赛.... WIN98中公用文件夹窗体中文本框不能显示汉字 请问大虾:MDI窗体的菜单能不能和子窗体的菜单一起显示在菜单栏上??? 再谈关于PB控制Excel的问题。。。(ton2000) COM连接点客户端接受器的实现问题 加热碘化氨,溴化氨,氯化氨,哪个最稳定 ph计用于测定溶液ph值和电池电动势时的异同点是什么?如题. 充电式热水袋里装的液体对人体有毒吗?刚买了个充电的热水袋,但充完电后觉得很臭胶味,不知它里面装的是什么液体,对人体有害吗?会不会有辐射之类的?对小孩健康有没有影响? 碳酸氢铵和氯化钠反应吗?若反应请给出化学方程式 为什么用酸度计可以测定电源电动势 这种暖手袋里面装的是什么液体,,工作原理是什么, 剧毒和高毒类化学品应如何保管 2010年安徽的一道化学大题:X、Y、Z、W是元素周期表前四周期中的四种常见元素,其相关信息如下表:元素 X、Y、Z、W是元素周期表前四周期中的四种常见元素,其相关信息如下表:元素相关信 中国哪个省盛产棉花?!..?!... 有哪些剧毒的毒药? Y是元素周期表中前四周期的元素,常温常压下,Y单质是淡黄色固体,常在火山口附近沉积.那么Y是什么元素啊. 气体A只含X,Y两种短周期元素,X的原子序数大于Y的原子序数.B,D,E是中学化学中常见的气体气体A只含X,Y两种短周期元素,X的原子序数大于Y的原子序数.B,D,E是中学化学中常见的气体,各物质有如下 醋和碱反应后能吃吗? 哪位大师讲解下化学的元素周期表?包括原子半径,离子半径的大小要怎么看啊? W.X.Y.Z为短周期内除稀有气体外的4种元素它们的原子序数依次增大,其中只有Y为金属元素.Y和W的最外层电子数相同.Y.Z两元素原子的质子数之和为W.X两元素质子数之和的3倍.问W.X.Y.Z分别为什么 高中地理:请介绍以下几类作物的生长习性(2)1.苹果 2.花生 3.玉米 4.青稞 5.柑橘 6.油菜 7.高粱需求:①.介绍一下该作物需要的生长条件;②.介绍一下该作物生长的不利条件;③.请尽量详尽 哪个国家被称为花园之国 W、X、Y、Z为短周期内(出稀有气体元素外)的四种元素.它们的原子序数依次增大.它们的原子序数依次增大,其中只有Y为金属元素.Y和W的最外层电子数相等.Y、Z两元素原子的质子数之和为 W、X 淡水在水的催化剂下可能变成石油吗? 化学:已知X、Y、Z、W是四种短周期元素,且原子序数依次增大.X、W同主族W原子的质子数等于Y、Z原子的最外层电子数之和.Y与X形成的分子中有3个共价键.常温下,Y与Z组成的化合物是红棕色气体 化学卷19:某稀有气体元素的原子序数为a,跟它的原子序数靠近的两种短周期元素X和Y互相化合时,能形成化学式XY2的离子化合物.已知Y的原子序数为b,则X的原子序数为( )A a-bB 2a-bC 3a-2bD 3b-2a 为什么醋能和碱反应你说呢 世界上有“花园之国”之称的国家是? 雷磁PHS-3C PH计如何使用 东南亚农作物播种与收割的特点是? 化学必修2,元素周期率的题,推断 雷磁PHS-3C PH计 E201-C型 PH复合电极是怎样矫正的 前几年曾喧闹一时的“水变油”是一场伪科学进行诈骗的闹剧,其实稍有化学知识的人都知道,化学反应前后原子的种类不变,水中的氢、氧元素是不可能变为汽油中的碳元素的,其理论依据是___ 花园之国,玫瑰之国,钟表之国是指哪些国家? 便携PH计用的哪种电极?玻璃电极 复合电极还是甘汞电极 为什么钾钠铵硝溶任何现象都是有原因滴,这个呢?为什么它们都溶于水,从结构等等都可以 吃到电池流出来的液体有毒吗? 请问PHS-3C酸度计的电极保护液Kcl溶液怎么样配置?是雷磁牌 钾钠铵硝真的都可溶吗?记得初中教的溶解度规律有一条钾钠铵硝均可溶,所有的钾盐、钠盐、铵盐、硝酸盐都可溶吗?还有什么种类的盐都可溶?为什么?还有哪些种类的盐都可溶? 用过的蓄电池留出的液体流到了手上有毒吗?我的手破了,然后我去载电池结果被,用过的蓄电池流出的液体弄到伤口上了,现在挺蛰的.这应该怎么办啊,现在应该怎么处理? 中亚分别有哪几个国家 什么东西,无色无味,而且是剧毒的液体? 解释一下溶解性口诀的含义,钾钠铵硝溶,不溶氯化物,银盐和亚汞.最好再举个例子解释这一句就行了,这一块我学的很纠结,希望大哥大姐可以帮我一下 碱性干电池流出的液体有毒吗 上海冠瑞?冠瑞高电位治疗仪?冠瑞高电位治疗机? 复硝酚钠和复硝酚钾的区别 电池里流出来的水有毒吗今天收拾房间发现闹钟里有一块电池好几年了有流出黄的颜色的液体,而且都干固了我还不小心弄到嘴里了肿么办会不会怎么样啊 高电位疗法是美国科学家富兰克林(Franklin)和生物学家一起根据电场和生物体离子之间的关系,作了大量的临床研究而发明的。高电位治疗仪是结合高压电子技术和生理电子学的高科技产 R必修2课时6,7,8 原题见图)X,Y,Z,W是元素周期表中原子序数依次增大的前20号元素中的4种.X、Y同周期,Y、Z同主族,Z^n-与W^n+的电子层结构相同.B,C,D,E,F,G,H,X,Y,Z,W是什么就好了. 醋和碱面放在一起会产生大量的气泡,为什么? 国家的美称多一点, 3月29日化学38分钟单元测试15,原子序数依次增大的短周期元素a,b,c,d 和e 中,a的最外层电子数为其周期数的二倍;b和d的A2B型氢化物均为V形分子,c的+1价离子比e的-1价离子少8个电子.回答下列问 合法购买剧毒化学试剂需要些什么条件、要求或是流程.单位检验要用 总之这方面不清楚 介绍下 还有哪些部门管理? 日内瓦是()之国,()之国的美称. ph计的工作原理+为何要使用标准溶液ph计的工作原理是通过ph电极在溶液里产生的电位差,经过高增益的放大器驱动仪表指示.那是不是说是一个相对差?假如是的话,那为什么还要用标准溶液标 个人购买化学试剂有哪些途径,试剂公司?需要哪些证件手续啊 日内瓦在哪个国家 酸度计如何使用? 买化学试剂有什么要求很喜欢做化学实验,搞搞反应之类的.我知道硫酸硝酸盐酸等有毒有害或者是强腐蚀性的东西是要经过公安局备案的.那么像CuSo4 硫酸铜,氢氧化钙溶液,什么明矾之类的东 日内瓦有什么之国的称呼,两个两个欧 PH计和酸度计是不是一样的东西? 硫化铅溶解于碘和碘化氨 溶液.化学反应方程式 如何写? 亚硝酸钠的含硝量多少 推荐pH计...最近在做一有机实验,对pH要求较高,pH=3~4,麻烦推荐一款能够稳定测量的pH计,之前用的雷磁的不好用,对于流动的液体测量波动很大,且我的反应液中有水相和有机相,麻烦大家了...
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘