阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

权威指南:构建个人私有云,拿回你的数据隐私的控制权!

57次阅读
没有评论

共计 36443 个字符,预计需要花费 92 分钟才能阅读完成。

这篇鸿篇巨制(多达上万字)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,Google、百度、360 们比你更了解你自己;而且提出了具体的解决方案,对于稍有技术基础的人来,完整地指导了如何搭建私有云,提供全功能、商业级的邮件服务和云服务。

此外,文章中的邮件系统部分相当完善,而且,文章的思路清晰,简明扼要。其中包括基础的 SMTP/IMAP 服务自不必提,反垃圾邮件服务、灰名单、SPF、DKIM、Webmail,应有尽有,可以作为搭建产品环境中的邮件系统参考。

8 年里 40000 多次搜索!这是我的 Google 搜索历史。你的呢?(可以在这里自己找一下)有经过这么长时间积累下来的这么多数据点,Google 已经能非常精确的推测你对什么感兴趣、曾经的想法、担忧过的事情,以及从你第一次获得 Google 帐号后这些年里所有这些的变化!

很多非常私人的信息不受自己控制地存储在世界范围内的服务器上

比如说你也像我一样从 2006 年到 2013 年都是 Gmail 用户,意味着你收到了 30000 封以上的电子邮件,以及在这 7 年里写了差不多 5000 封电子邮件。这些发送或收到的电子邮件里有很多是非常私人的,私人到你甚至不希望自己的家人或好友可以系统地查看。也许你还写过一些草稿邮件,因为最后一分钟改变主意而从没发出去。但是尽管你从未发出去,这些邮件仍然保存在服务器上的某个地方。结论是,说 Google 服务器比你最亲密的朋友或家人都更了解你的个人生活一点也不过分。

从统计数据来看,我可以很保险地打赌你拥有一部智能手机。如果不使用联系人应用的话手机将基本没法用,而它默认会将你的联系人信息保存到 Google 服务器上的 Google 联系人里。所以,现在 Google 不仅知道了你的电子邮件,还有了你的离线联系人:你喜欢打给谁、谁来过电话、你发过短信给谁,以及发了些什么。你也不需要听我的片面之词,可以自己检查一下,看看你开放给类似 Google Play 服务的一些应用的权限,用来读取来电信息以及收到的短信。你是否还会用到手机里自带的日历应用?除非你在设置日程的时候明确地去掉同步,那么 Google 将精确地知道你将要做什么,一天里的每个时段、每一天、每一年。用 iPhone 代替 Android 手机也是一样的,只是 Apple 会代替 Google 来掌握你的往来邮件、联系人和日程计划。

你是否还会非常小心地同步自己的联系人信息,在你朋友,同事或家人换工作或换服务商的时候更新他们的电子邮件地址和手机号?这给 Google 提供了一副你的社交网络的非常精确的、最新的描绘。还有你非常喜欢手机的 GPS 功能,经常配合 Google 地图使用。这意味着 Google 不仅能从日程里知道你在干什么,还知道你在哪儿、住在哪儿、在哪儿工作。然后再关联用户之间的 GPS 位置信息,Google 还能知道你现在可能正在和哪些人来往。

这种泄漏自己私人信息的日常爱好会以一种甚至没人能够预测的方式影响你的生活

总结一下,如果你是一个普通的因特网用户,Google 拥有过去差不多 10 年里你最新的、深度的信息,关于你的兴趣、忧虑、热情、疑问。它还收集了一些你很私人的信息(电子邮件、短信),精确到小时的你的日常活动和位置,一副你社交网络的高精度的描绘。关于你的如此私密的数据,很可能已经超越了你最亲密的朋友,家人或爱人对你的了解。

不敢想象把这些深度的个人信息交给完全陌生的人,就好像把这些信息拷到一个 U 盘里,然后随便放到某个咖啡厅的桌上,留张纸条说“Olivier Martin 的个人数据,请随便”。谁知道什么人会拿到它以及用来干嘛?然而,我们毫不犹豫地把自己的主要信息交给那些对我们的数据很感兴趣的 IT 公司的陌生人(这是他们制造面包的材料)以及世界级的数据分析专家手里,也许只是因为我们在点击那个绿色的 ’ 接受 ’ 按钮时根本没有想这么多。

有这么多的高质量信息,这么多年里,Google 可能会比你希望自我了解的更了解你自己:尼玛,回想我过去的数字生活,5 年前发出的邮件里有一半我已经不记得了。我很高兴能重新发现早在 2005 年对 xxx 主义的兴趣以及第二年加入了 ATTAC(一个致力于通过征收金融交易税来限制投机和改善社会公平的组织)。天知道为什么我竟然在 2007 年这么喜欢跳舞。这些都是无关紧要的信息(你不指望我能爆出什么猛料,是吧?;-)。但是,连接起这些高质量数据点,关于你生活的方方面面(做什么、什么时候、和谁一起、在哪里,…),并跨越这么长时间间隔,应该能推测出你的未来状态。比如说,根据一个 17 岁女孩的购物习惯,超市甚至可以在他父亲听说之前断定这个女孩怀孕了(这是一个真实的故事)。谁知道通过像 Google 所掌握的这些远远超出购物习惯的高质量数据能做些什么?连接起这些点,也许有人能预测你未来几年里口味或观点的变化。如今,你从未听过的公司声称拥有你 500 项数据点,包括宗教信仰、性取向和政治观点。提到政治,如果说你决定今后 10 年内进入政坛会怎么样?你的生活会改变,你的观点也一样,甚至你有时候会有所遗忘,但是 Google 不会。那你会不会担心你的对手会接触一些可以从 Google 访问你数据的人并会从你过去这些年里积累的个人数据深渊里挖出一些猛料呢?就像最近 Sony 被黑一样,多久以后会轮到 Google 或 Facebook,以致让你的个人信息最终永远暴露?

我们大多数人把自己的个人数据托付给这些公司的一个原因就是它们提供免费服务。但是真的免费吗?一般的 Google 帐号的价值根据评估方式不同会有些差别:你花在写邮件上的时间占到 1000 美元 / 年,你的帐号对于广告产业的价值差不多在 220 美元 / 年到 500 美元 / 年之间。所以这些服务并不是真的免费:会通过广告和我们的数据在未来的一些未知使用来间接付费。

我写的最多的是 Google,这是因为这是我托付个人数字信息的,以及目前我所知道做的最好的公司。但是我也提到过 Apple 或 Facebook。这些公司通过它们在设计、工程和我们(曾经)喜欢每天使用的服务方面的神奇进步实实在在地改变了世界。但是这并不是说我们应该把所有我们最私人的个人数据堆积到它们的服务器上并把我们的数字生活托付给它们:潜在的危害实在太大了。

只要 5 小时,拿回自己以及关心的人的隐私权

权威指南:构建个人私有云,拿回你的数据隐私的控制权!

(题图来自 ttgtmedia.com)

但是事实并不是一定必须这样的。你可以生活在 21 世纪,拿着智能手机,每天都用电子邮件和 GPS,却仍然可以保留自己的隐私。你所需要的就是拿回自己个人数据的控制权:邮件、日程、联系人、文件,等等。Prism-Break.org 网站上列出了一些能帮你掌握个人数据命运的软件。除此以外,控制自己个人数据的最安全和最有效的方式是架设自己的服务器并搭建自己的云。不过你也许只是没有时间或精力去研究具体该怎么做以及如何让它能流畅工作。

这也是这篇文章的意义所在。仅仅 5 个小时内,我们将配置出一台服务器来支撑你的邮件、联系人、日程表和各种文件,为你、你的朋友和你的家人。这个服务器将设计成一个个人数据中心或云,所以你能时刻保留它的完整控制。数据将自动在你的台式机 / 笔记本、手机和平板之间同步。从根本上来说,我们将建立一个系统来代替 Gmail、Google 文件 /Dropbox、Google 联系人、Google 日历和 Picasa

为自己做这件事情已经是迈出很大一步了。但是,你个人信息的很大一部分将仍然泄漏出去并保存到硅谷的一些主机上,只是因为和你日常来往的太多人在用 Gmail 和使用智能手机,所以最好是带上你一些比较亲近的人加入这次探险。

我们将构建的系统能够:

  • 支持任意数目的域名和用户。这样就能轻易地和你的家人朋友共享这台服务器,所以他们也能掌控自己的个人数据,并且还能和你一起分摊服务费用。和你一起共享服务器的人可以使用他们自己的域名或者共享你的。
  • 允许你从任意网络发送和接收电子邮件,需要成功登录服务器之后。这样,你可以通过任意的邮件地址、任意设备(台式机、手机、平板)、任意网络(家里、公司、公共网络、…)来发送电子邮件。
  • 在发送和接收邮件的时候加密网络数据,这样,你不信任的人不能钓出你的密码,也不能看到你的私人邮件。
  • 提供最先进的反垃圾邮件技术,结合了已知垃圾邮件黑名单、自动灰名单、和自适应垃圾邮件过滤。如果邮件被误判了只需要简单地把它拖入或拖出垃圾目录就可以重新调校垃圾邮件过滤器。而且,服务器还会为基于社区的反垃圾邮件努力做出贡献。
  • 一段时间里只需要几分钟的维护,基本上只是安装安全更新和简单地检查一下服务器日志。添加一个新的邮件地址只需要在数据库中插入一条记录。除此之外,你可以忘记它的存在过自己的生活。我在 14 个月之前搭建了本文描述的这个系统,从那以后就一直顺利运行。所以我完全把它给忘了,直到我最近觉得随便按下手机上的‘检查邮件’会导致电子信号一路跑到冰岛(我放置服务器的地方)再回来的想法有点好笑才想起来。

要完成这篇文章里的工作,你需要一点基本的技术能力。如��你知道 SMTP 和 IMAP 的区别,什么是 DNS,以及对 TCP/IP 有基本了解的话,就够了。你还将需要一点基本的 Unix 知识(在命令行下和文件一起工作,基本的系统管理)。然后你需要花总共 5 小时时间来搭建。

下面是我们将要做的事情的概述。

  • 申请一个虚拟私人服务器,一个域名,并把它们配置好
  • 设置 postfix 和 dovecot 来收发电子邮件
  • 阻止垃圾邮件进入你的收件箱
  • 确保你发出的邮件能通过垃圾邮件过滤器
  • 使用 Owncloud 提供日历,联系人,文件服务并配置 webmail
  • 在云上同步你的设备 

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-03/115484p2.htm

这篇文章是受之前工作的启发并以之为基础

本文很大程度参考了两篇文章,由 Xavier Claude 和 Drew Crawford 写的关于架设私有邮件服务器的介绍。

本文覆盖了 Xavier 和 Drew 的文章里所描述的所有功能,除了 3 个地方 Drew 有而我没有:邮件推送支持(我喜欢由我主动检查邮件,而其他时候都不会被打扰),邮件全文检索(我一直都没用过),以及使用加密方式存储邮件(我的邮件和数据还没那么重要到要把它们加密后再存到本地服务器上)。如果你需要这些功能,只需要按照 Drew 的文章里相应部分的说明做就好了,和本文的内容兼容。

和 Xavier 和 Drew 的成果比起来,本文有下面几个主要改进:

  • 根据我自己按 Drew 文章操作的经验以及原文的大量回复,修改了一些问题和文字错误。我也把本文所介绍的内容仔细检查了几遍,从头开始设定了几次服务器做重复验证以确保能正常工作。
  • 低维护:和 Xavier 的方式比起来,本文增加了在服务器上支持多个邮件域名。这样做是为了尽可能地减少服务器维护工作:基本上,要添加一个域名或用户,只需要往 mysql 数据库表里增加一行就好了(不需要增加过滤脚本,等等)。
  • 我增加了 webmail。
  • 我增加了设定云服务器的部分,不仅能收发邮件还能管理文件,地址本 / 联系人(邮件地址,电话号码,生日,等等等),日程表和图片,供所有设备访问使用。

 

申请一个虚拟私人服务器,一个域名,并把它们配置好

让我们从设置基础设施开始:我们的虚拟私人主机和我们的域名。

我用过 1984.is 和 Linode 提供的虚拟私人主机(VPS),体验非常好。在本文中,我们将使用Debian Wheezy,这个在 1984 和 Linode 都提供了已经做好的映像文件可以直接布置到你的 VPS 上。我喜欢 1984 是因为它的服务器在冰岛,也是唯一使用可再生能源(地热和水力发电)的地方,目前还没有影响过气候变化,不像大多数美国数据中心目前大多数依赖于烧煤的火力发电站。而且,他们注重民权,透明,自由以及免费软件。

最好是在服务器上创建一个文件用来保存后面要用到的各种密码(用户账号、邮件账号、云帐号、数据库帐号)。当然最好是加密一下(可以用 GnuPG),这样就算用来设定服务器的电脑被偷了或被入侵了,你的服务器就不会那么容易被攻击。

关于注册域名,我已经使用 grandi 的服务超过 10 年了,也很满意。在本文中,我们将开辟一个叫 linuxidc.net 的域名。然后在上面增加一个叫 cloud.linuxidc.net 的二级域名,并绑定 MX 纪录。在完成之后,设置比较短的纪录生存时间(TTL)比如 300 秒,这样你在设置服务器的时候,可以修改你的域并很快测试到结果。

最后,设置 PTR 纪录(反向 DNS),这样 IP 地址可以反向映射回它的域名。如果你不理解前面这句话,看下这篇文章来获得相关背景知识。如果你使用 Linode 的服务,你可以在远程访问这一栏的控制面板里设置 PTR 纪录。如果是 1984,联系一下技术支持来帮你搞定。

在服务器上,我们从添加一个普通用户开始,这样我们不用从头到尾一直用 root 账号。另外,用 root 登陆也需要额外多一层安全措施。

  1. adduser roudy

然后,在文件 /etc/ssh/sshd_config 中设置:

  1. PermitRootLoginno

然后重启 ssh 服务:

  1. service ssh reload

然后,我们要修改服务器的主机名。编辑文件/etc/hostname,只有一行就是自己的主机名,我们这个例子中是:

  1. cloud

然后,编辑 ssh 服务的公钥文件/etc/ssh/ssh_host_rsa_key.pub, /etc/ssh/ssh_host_dsa_key.pub, /etc/ssh/ssh_host_ecdsa_key.pub,这样文件末尾可以反映你的主机名,比如root@cloud。然后重启系统保证主机名在系统的每个需要它的角落都生效了。

  1. reboot

我们将更新系统并移除不必要的服务以降低远程攻击的风险。

  1. apt-get update
  2. apt-get dist-upgrade
  3. service exim4 stop
  4. apt-get remove exim4 rpcbind
  5. apt-get autoremove
  6. apt-get install vim

我喜欢使用 vim 远程编辑配置文件。打开 vim 的自动语法高亮会很有帮助。添加下面这一行到 ~/.vimrc 文件中。

  1. syn on

这篇鸿篇巨制(多达上万字)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,Google、百度、360 们比你更了解你自己;而且提出了具体的解决方案,对于稍有技术基础的人来,完整地指导了如何搭建私有云,提供全功能、商业级的邮件服务和云服务。

此外,文章中的邮件系统部分相当完善,而且,文章的思路清晰,简明扼要。其中包括基础的 SMTP/IMAP 服务自不必提,反垃圾邮件服务、灰名单、SPF、DKIM、Webmail,应有尽有,可以作为搭建产品环境中的邮件系统参考。

8 年里 40000 多次搜索!这是我的 Google 搜索历史。你的呢?(可以在这里自己找一下)有经过这么长时间积累下来的这么多数据点,Google 已经能非常精确的推测你对什么感兴趣、曾经的想法、担忧过的事情,以及从你第一次获得 Google 帐号后这些年里所有这些的变化!

很多非常私人的信息不受自己控制地存储在世界范围内的服务器上

比如说你也像我一样从 2006 年到 2013 年都是 Gmail 用户,意味着你收到了 30000 封以上的电子邮件,以及在这 7 年里写了差不多 5000 封电子邮件。这些发送或收到的电子邮件里有很多是非常私人的,私人到你甚至不希望自己的家人或好友可以系统地查看。也许你还写过一些草稿邮件,因为最后一分钟改变主意而从没发出去。但是尽管你从未发出去,这些邮件仍然保存在服务器上的某个地方。结论是,说 Google 服务器比你最亲密的朋友或家人都更了解你的个人生活一点也不过分。

从统计数据来看,我可以很保险地打赌你拥有一部智能手机。如果不使用联系人应用的话手机将基本没法用,而它默认会将你的联系人信息保存到 Google 服务器上的 Google 联系人里。所以,现在 Google 不仅知道了你的电子邮件,还有了你的离线联系人:你喜欢打给谁、谁来过电话、你发过短信给谁,以及发了些什么。你也不需要听我的片面之词,可以自己检查一下,看看你开放给类似 Google Play 服务的一些应用的权限,用来读取来电信息以及收到的短信。你是否还会用到手机里自带的日历应用?除非你在设置日程的时候明确地去掉同步,那么 Google 将精确地知道你将要做什么,一天里的每个时段、每一天、每一年。用 iPhone 代替 Android 手机也是一样的,只是 Apple 会代替 Google 来掌握你的往来邮件、联系人和日程计划。

你是否还会非常小心地同步自己的联系人信息,在你朋友,同事或家人换工作或换服务商的时候更新他们的电子邮件地址和手机号?这给 Google 提供了一副你的社交网络的非常精确的、最新的描绘。还有你非常喜欢手机的 GPS 功能,经常配合 Google 地图使用。这意味着 Google 不仅能从日程里知道你在干什么,还知道你在哪儿、住在哪儿、在哪儿工作。然后再关联用户之间的 GPS 位置信息,Google 还能知道你现在可能正在和哪些人来往。

这种泄漏自己私人信息的日常爱好会以一种甚至没人能够预测的方式影响你的生活

总结一下,如果你是一个普通的因特网用户,Google 拥有过去差不多 10 年里你最新的、深度的信息,关于你的兴趣、忧虑、热情、疑问。它还收集了一些你很私人的信息(电子邮件、短信),精确到小时的你的日常活动和位置,一副你社交网络的高精度的描绘。关于你的如此私密的数据,很可能已经超越了你最亲密的朋友,家人或爱人对你的了解。

不敢想象把这些深度的个人信息交给完全陌生的人,就好像把这些信息拷到一个 U 盘里,然后随便放到某个咖啡厅的桌上,留张纸条说“Olivier Martin 的个人数据,请随便”。谁知道什么人会拿到它以及用来干嘛?然而,我们毫不犹豫地把自己的主要信息交给那些对我们的数据很感兴趣的 IT 公司的陌生人(这是他们制造面包的材料)以及世界级的数据分析专家手里,也许只是因为我们在点击那个绿色的 ’ 接受 ’ 按钮时根本没有想这么多。

有这么多的高质量信息,这么多年里,Google 可能会比你希望自我了解的更了解你自己:尼玛,回想我过去的数字生活,5 年前发出的邮件里有一半我已经不记得了。我很高兴能重新发现早在 2005 年对 xxx 主义的兴趣以及第二年加入了 ATTAC(一个致力于通过征收金融交易税来限制投机和改善社会公平的组织)。天知道为什么我竟然在 2007 年这么喜欢跳舞。这些都是无关紧要的信息(你不指望我能爆出什么猛料,是吧?;-)。但是,连接起这些高质量数据点,关于你生活的方方面面(做什么、什么时候、和谁一起、在哪里,…),并跨越这么长时间间隔,应该能推测出你的未来状态。比如说,根据一个 17 岁女孩的购物习惯,超市甚至可以在他父亲听说之前断定这个女孩怀孕了(这是一个真实的故事)。谁知道通过像 Google 所掌握的这些远远超出购物习惯的高质量数据能做些什么?连接起这些点,也许有人能预测你未来几年里口味或观点的变化。如今,你从未听过的公司声称拥有你 500 项数据点,包括宗教信仰、性取向和政治观点。提到政治,如果说你决定今后 10 年内进入政坛会怎么样?你的生活会改变,你的观点也一样,甚至你有时候会有所遗忘,但是 Google 不会。那你会不会担心你的对手会接触一些可以从 Google 访问你数据的人并会从你过去这些年里积累的个人数据深渊里挖出一些猛料呢?就像最近 Sony 被黑一样,多久以后会轮到 Google 或 Facebook,以致让你的个人信息最终永远暴露?

我们大多数人把自己的个人数据托付给这些公司的一个原因就是它们提供免费服务。但是真的免费吗?一般的 Google 帐号的价值根据评估方式不同会有些差别:你花在写邮件上的时间占到 1000 美元 / 年,你的帐号对于广告产业的价值差不多在 220 美元 / 年到 500 美元 / 年之间。所以这些服务并不是真的免费:会通过广告和我们的数据在未来的一些未知使用来间接付费。

我写的最多的是 Google,这是因为这是我托付个人数字信息的,以及目前我所知道做的最好的公司。但是我也提到过 Apple 或 Facebook。这些公司通过它们在设计、工程和我们(曾经)喜欢每天使用的服务方面的神奇进步实实在在地改变了世界。但是这并不是说我们应该把所有我们最私人的个人数据堆积到它们的服务器上并把我们的数字生活托付给它们:潜在的危害实在太大了。

只要 5 小时,拿回自己以及关心的人的隐私权

权威指南:构建个人私有云,拿回你的数据隐私的控制权!

(题图来自 ttgtmedia.com)

但是事实并不是一定必须这样的。你可以生活在 21 世纪,拿着智能手机,每天都用电子邮件和 GPS,却仍然可以保留自己的隐私。你所需要的就是拿回自己个人数据的控制权:邮件、日程、联系人、文件,等等。Prism-Break.org 网站上列出了一些能帮你掌握个人数据命运的软件。除此以外,控制自己个人数据的最安全和最有效的方式是架设自己的服务器并搭建自己的云。不过你也许只是没有时间或精力去研究具体该怎么做以及如何让它能流畅工作。

这也是这篇文章的意义所在。仅仅 5 个小时内,我们将配置出一台服务器来支撑你的邮件、联系人、日程表和各种文件,为你、你的朋友和你的家人。这个服务器将设计成一个个人数据中心或云,所以你能时刻保留它的完整控制。数据将自动在你的台式机 / 笔记本、手机和平板之间同步。从根本上来说,我们将建立一个系统来代替 Gmail、Google 文件 /Dropbox、Google 联系人、Google 日历和 Picasa

为自己做这件事情已经是迈出很大一步了。但是,你个人信息的很大一部分将仍然泄漏出去并保存到硅谷的一些主机上,只是因为和你日常来往的太多人在用 Gmail 和使用智能手机,所以最好是带上你一些比较亲近的人加入这次探险。

我们将构建的系统能够:

  • 支持任意数目的域名和用户。这样就能轻易地和你的家人朋友共享这台服务器,所以他们也能掌控自己的个人数据,并且还能和你一起分摊服务费用。和你一起共享服务器的人可以使用他们自己的域名或者共享你的。
  • 允许你从任意网络发送和接收电子邮件,需要成功登录服务器之后。这样,你可以通过任意的邮件地址、任意设备(台式机、手机、平板)、任意网络(家里、公司、公共网络、…)来发送电子邮件。
  • 在发送和接收邮件的时候加密网络数据,这样,你不信任的人不能钓出你的密码,也不能看到你的私人邮件。
  • 提供最先进的反垃圾邮件技术,结合了已知垃圾邮件黑名单、自动灰名单、和自适应垃圾邮件过滤。如果邮件被误判了只需要简单地把它拖入或拖出垃圾目录就可以重新调校垃圾邮件过滤器。而且,服务器还会为基于社区的反垃圾邮件努力做出贡献。
  • 一段时间里只需要几分钟的维护,基本上只是安装安全更新和简单地检查一下服务器日志。添加一个新的邮件地址只需要在数据库中插入一条记录。除此之外,你可以忘记它的存在过自己的生活。我在 14 个月之前搭建了本文描述的这个系统,从那以后就一直顺利运行。所以我完全把它给忘了,直到我最近觉得随便按下手机上的‘检查邮件’会导致电子信号一路跑到冰岛(我放置服务器的地方)再回来的想法有点好笑才想起来。

要完成这篇文章里的工作,你需要一点基本的技术能力。如��你知道 SMTP 和 IMAP 的区别,什么是 DNS,以及对 TCP/IP 有基本了解的话,就够了。你还将需要一点基本的 Unix 知识(在命令行下和文件一起工作,基本的系统管理)。然后你需要花总共 5 小时时间来搭建。

下面是我们将要做的事情的概述。

  • 申请一个虚拟私人服务器,一个域名,并把它们配置好
  • 设置 postfix 和 dovecot 来收发电子邮件
  • 阻止垃圾邮件进入你的收件箱
  • 确保你发出的邮件能通过垃圾邮件过滤器
  • 使用 Owncloud 提供日历,联系人,文件服务并配置 webmail
  • 在云上同步你的设备 

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-03/115484p2.htm

设置 postfix 和 dovecot 来收发电子邮件

 

postfix

  1. apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-mysql mysql-server dovecot-lmtpd postgrey

在 Postfix 的配置菜单里,选择Internet Site,设置这个系统的邮件名称为linuxidc.net

现在开始添加一个数据库用于保存主机上管理的域名列表,和每个域名下的用户列表(同时也包括他们各自的密码),以及邮件别名列表(用于从一个地址往另一个地址转发邮件)。

  1. mysqladmin -p create mailserver
  2. mysql -p mailserver
  3. mysql> GRANT SELECT ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'mailuserpass';
  4. mysql> FLUSH PRIVILEGES;
  5. mysql> CREATE TABLE `virtual_domains`(
  6. `id`int(11) NOT NULL auto_increment,
  7. `name` varchar(50) NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  10. mysql> CREATE TABLE `virtual_users`(
  11. `id`int(11) NOT NULL auto_increment,
  12. `domain_id`int(11) NOT NULL,
  13. `password` varchar(106) NOT NULL,
  14. `email` varchar(100) NOT NULL,
  15. PRIMARY KEY (`id`),
  16. UNIQUE KEY `email`(`email`),
  17. FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
  18. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  19. mysql> CREATE TABLE `virtual_aliases`(
  20. `id`int(11) NOT NULL auto_increment,
  21. `domain_id`int(11) NOT NULL,
  22. `source` varchar(100) NOT NULL,
  23. `destination` varchar(100) NOT NULL,
  24. PRIMARY KEY (`id`),
  25. FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
  26. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这里我们为 linuxidc.net 域名提供邮件服务。如果还需要加入其他域名,也没问题。我们也会为每个域名设置一个邮件管理地址(postmaster),转寄给roudy@linuxidc.net

  1. mysql> INSERT INTO virtual_domains (`name`) VALUES ('linuxidc.net');
  2. mysql> INSERT INTO virtual_domains (`name`) VALUES ('otherdomain.net');
  3. mysql> INSERT INTO virtual_aliases (`domain_id`,`source`,`destination`) VALUES ('1','postmaster','roudy@linuxidc.net');
  4. mysql> INSERT INTO virtual_aliases (`domain_id`,`source`,`destination`) VALUES ('2','postmaster','roudy@linuxidc.net');

现在已经添加了一个本地邮件账号roudy@linuxidc.net。首先,为它生成一个密码的哈希串:

  1. doveadm pw -s SHA512-CRYPT

然后把哈希值加入到数据库中:

  1. mysql> INSERT INTO `mailserver`.`virtual_users`(`domain_id`,`password`,`email`) VALUES ('1','$6$YOURPASSWORDHASH','roudy@linuxidc.net');

现在我们的域名、别名和用户列表都设置好了,然后开始设置 postfix(这是一个 SMTP 服务器,用来发送邮件)。把文件 /etc/postfix/main.cf 替换为下面的内容:

  1. myhostname = cloud.linuxidc.net
  2. myorigin =/etc/mailname
  3. mydestination = localhost.localdomain, localhost
  4. mynetworks_style = host
  5. # We disable relaying in the general case
  6. smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
  7. # Requirements on servers that contact us: we verify the client is not a
  8. # known spammer (reject_rbl_client) and use a graylist mechanism
  9. # (postgrey) to help reducing spam (check_policy_service)
  10. smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023
  11. disable_vrfy_command = yes
  12. inet_interfaces = all
  13. smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
  14. biff =no
  15. append_dot_mydomain =no
  16. readme_directory =no
  17. # TLS parameters
  18. smtpd_tls_cert_file=/etc/ssl/certs/cloud.crt
  19. smtpd_tls_key_file=/etc/ssl/private/cloud.key
  20. smtpd_use_tls=yes
  21. smtpd_tls_auth_only = yes
  22. smtp_tls_security_level=may
  23. smtp_tls_loglevel =1
  24. smtpd_tls_loglevel =1
  25. smtpd_tls_received_header = yes
  26. smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
  27. smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
  28. # Delivery
  29. alias_maps = hash:/etc/aliases
  30. alias_database = hash:/etc/aliases
  31. message_size_limit =50000000
  32. recipient_delimiter =+
  33. # The next lines are useful to set up a backup MX for myfriendsdomain.org
  34. # relay_domains = myfriendsdomain.org
  35. # relay_recipient_maps =
  36. # Virtual domains
  37. virtual_transport = lmtp:unix:private/dovecot-lmtp
  38. virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
  39. virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
  40. virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
  41. local_recipient_maps = $virtual_mailbox_maps

现在我们要让 postfix 知道如何从我们设定的数据库里找出需要接收邮件的域名。建立一个新文件 /etc/postfix/mysql-virtual-mailbox-domains.cf 并添加以下内容:

  1. user = mailuser
  2. password = mailuserpass
  3. hosts =127.0.0.1
  4. dbname = mailserver
  5. query = SELECT 1 FROM virtual_domains WHERE name='%s'

我们可以让 postfix 判断给定的电子邮件账号是否存在,创建文件 /etc/postfix/mysql-virtual-mailbox-maps.cf 并写入以下内容:

  1. user = mailuser
  2. password = mailuserpass
  3. hosts =127.0.0.1
  4. dbname = mailserver
  5. query = SELECT 1 FROM virtual_users WHERE email='%s'

最后,postfix 会根据文件 /etc/postfix/mysql-virtual-alias-maps.cf 的内容来查找邮件别名

  1. user = mailuser
  2. password = mailuserpass
  3. hosts =127.0.0.1
  4. dbname = mailserver
  5. query = SELECT virtual_aliases.destination as destination FROM virtual_aliases, virtual_domains WHERE virtual_aliases.source='%u' AND virtual_aliases.domain_id = virtual_domains.id AND virtual_domains.name='%d'

在配置好这些后,现在要测试一下 postfix 是否能正常查询数据库。我们可以用 postmap 命令测试:

  1. postmap -q linuxidc.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
  2. postmap -q roudy@linuxidc.net mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
  3. postmap -q postmaster@linuxidc.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf
  4. postmap -q bob@linuxidc.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf

如果一切都正常配置了的话,头两个查询应该输出 1,第 3 个查询应该输出roudy@linuxidc.net,而最后一个应该什么都不输出。

dovecot

现在,让我们设置一下 dovecot(一个 IMAP 服务程序,用来在我们的设备上从服务器获取收到的邮件)。编辑文件 /etc/dovecot/dovecot.conf 设置以下参数:

  1. # Enable installed protocol
  2. # !include_try /usr/share/dovecot/protocols.d/*.protocol
  3. protocols = imap lmtp

这样将只打开 imap(让我们可以获取邮件)和 lmtp(postfix 用来将收件箱里的邮件转给 dovecot)。编辑 /etc/dovecot/conf.d/10-mail.conf 并设置以下参数:

  1. mail_location = maildir:/var/mail/%d/%n
  2. [...]
  3. mail_privileged_group = mail
  4. [...]
  5. first_valid_uid =0

这样邮件将被保存到目录 /var/mail/domainname/username 下。注意下这几个选项散布在配置文件的不同位置,有时已经在那里写好了:我们只需要取消注释即可。文件里的其他设定选项,可以维持原样。在本文后面还有很多文件需要用同样的方式更新设置。在文件 /etc/dovecot/conf.d/10-auth.conf 里,设置以下参数:

  1. disable_plaintext_auth = yes
  2. auth_mechanisms = plain
  3. #!include auth-system.conf.ext
  4. !include auth-sql.conf.ext

在文件 /etc/dovecot/conf.d/auth-sql.conf.ext 里,设置以下参数:

  1. passdb {
  2. driver = sql
  3. args =/etc/dovecot/dovecot-sql.conf.ext
  4. }
  5. userdb {
  6. driver =static
  7. args = uid=mail gid=mail home=/var/mail/%d/%n
  8. }

这是告诉 dovecot 用户的邮件保存在目录 /var/mail/domainname/username 下,以及如何从我们刚建立的数据库里查找密码。现在我们还需要告诉 dovecot 具体如何使用数据库。这样需要把下面的内容加入 /etc/dovecot/dovecot-sql.conf.ext 文件:

  1. driver = mysql
  2. connect = host=localhost dbname=mailserver user=mailuser password=mailuserpass
  3. default_pass_scheme = SHA512-CRYPT
  4. password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

我们现在修改一下配置文件的权限

  1. chown -R mail:dovecot /etc/dovecot
  2. chmod -R o-rwx /etc/dovecot

基本差不多了!只是还需要再多编辑几个文件。在文件 /etc/dovecot/conf.d/10-master.conf 里,设置以下参数:

  1. service imap-login {
  2. inet_listener imap {
  3. #port = 143
  4. port =0
  5. }
  6. inet_listener imaps {
  7. port =993
  8. ssl = yes
  9. }
  10. }
  11. service pop3-login {
  12. inet_listener pop3 {
  13. #port = 110
  14. port =0
  15. }
  16. inet_listener pop3s {
  17. #port = 995
  18. #ssl = yes
  19. port =0
  20. }
  21. }
  22. service lmtp {
  23. unix_listener /var/spool/postfix/private/dovecot-lmtp {
  24. mode =0666
  25. group= postfix
  26. user = postfix
  27. }
  28. user = mail
  29. }
  30. service auth {
  31. unix_listener auth-userdb {
  32. mode =0600
  33. user = mail
  34. #group =
  35. }
  36. # Postfix smtp-auth
  37. unix_listener /var/spool/postfix/private/auth {
  38. mode =0666
  39. user = postfix
  40. group= postfix
  41. }
  42. # Auth process is run as this user.
  43. #user = $default_internal_user
  44. user = dovecot
  45. }
  46. service auth-worker {
  47. user = mail
  48. }

注意下我们把除了 imaps 之外所有服务的端口都设置成了 0,这样可以有效地禁止这些服务。然后,在文件 /etc/dovecot/conf.d/15-lda.conf 里,指定一个邮箱管理地址:

  1. postmaster_address = postmaster@linuxidc.net

最后但很重要的一点,我们为服务器需要生成一对公钥和私钥,可以同时用于 dovecot 和 postfix:

  1. openssl req -new-newkey rsa:4096-x509 -days 365-nodes -out"/etc/ssl/certs/cloud.crt"-keyout "/etc/ssl/private/cloud.key"

请确保你指定了服务器的完全限定域名(FQDN),在本文的例子里:

  1. CommonName(e.g. server FQDN or YOUR name)[]:cloud.linuxidc.net

如果没有的话,我们的客户端会抱怨在 SSL 证书里的服务器名字和所连接的服务器名字不一致。我们将通过修改配置文件 /etc/dovecot/conf.d/10-ssl.conf 里的如下选项来告诉 dovecot 使用刚生成的密钥:

  1. ssl = required
  2. ssl_cert =</etc/ssl/certs/cloud.crt
  3. ssl_key =</etc/ssl/private/cloud.key

测试

就这些了!现在开始测试 postfix 和 dovecot 服务!

  1. service dovecot restart
  2. service postfix restart

在服务器上,尝试发送邮件给本地用户:

  1. telnet localhost 25
  2. EHLO cloud.linuxidc.net
  3. MAIL FROM:youremail@domain.com
  4. RCPT TO:roudy@linuxidc.net
  5. data
  6. Subject:Hallo!
  7. Thisis a test, to check if cloud.linuxidc.net is ready to be an MX!
  8. Cheers,Roudy
  9. .
  10. QUIT

服务器应该接受我们的邮件并返回类似消息:

  1. 2502.0.0Ok: queued as58D54101DB

如果一切正常的话,检查一下 /var/log/mail.log 里的日志。应该有类似下面的一行:

  1. Nov1407:57:06 cloud dovecot: lmtp(4375, roudy@linuxidc.net):... saved mail to INBOX

到这里一切都正常吗?不错。现在,让我尝试从不同的机器发邮件,比如说我们用来设定服务器的电脑。这次我们使用加密方式(TLS)和服务器对话:

  1. openssl s_client -connect cloud.linuxidc.net:25-starttls smtp
  2. EHLO cloud.linuxidc.net
  3. MAIL FROM:roudy@linuxidc.net
  4. rcpt to:bob@gmail.com

服务器应该有这样的响应:

  1. 5545.7.1<bob@gmail.com>:Relay access denied

这个没问题:如果服务器能接受这封邮件而不是返回如上的拒绝消息,那意味着我们架设的 postfix 是一个对全世界所有垃圾邮件都开放的中继,这将完全没法使用。除了 ’Relay access denied’ 消息,你也可能会收到这样的响应:

  1. 5545.7.1Service unavailable;Client host [87.68.61.119] blocked using zen.spamhaus.org; http://www.spamhaus.org/query/bl?ip=87.68.61.119

意思是你正尝试从一个被标记成垃圾邮件发送者的 IP 地址连接服务器。我在通过普通的因特网服务提供商(ISP)连接服务器时曾收到过这样的消息。要解决这个问题,可以试着从另一个主机发起连接,比如另外一个你可以 SSH 登录的主机。另外一种方式是,你可以修改 postfix 的 main.cf 配置文件,不要使用 Spamhous 的 RBL,重启 postfix 服务,然后再检查上面的测试是否正常。不管用哪种方式,最重要的是你要确定一个能工作的,因为我们后面马上要测试其他功能。如果你选择了重新配置 postfix 不使用 RBL,别忘了在完成本文后重新开启 RBL 并重启 postfix,以避免收到一些不必要的垃圾邮件。(LCTT 译者注:在国内可以使用 CASA 的 RBL:cblplus.anti-spam.org.cn,参见:http://www.anti-spam.org.cn/。)

现在,我们试一下往 SMTP 端口 25 发送一封有效的邮件,这是一般正常的邮件服务器用来彼此对话的方式:

  1. openssl s_client -connect cloud.linuxidc.net:25-starttls smtp
  2. EHLO cloud.linuxidc.net
  3. MAIL FROM:youremail@domain.com
  4. RCPT TO:roudy@linuxidc.net

服务器应该有这样的响应:

  1. Client host rejected:Greylisted, see http://postgrey.schweikert.ch/help/linuxidc.net.html

这意味着 postgrey 工作正常。postgrey 做的是用临时错误拒绝未知发送者的邮件。邮件的技术规则是要求邮件服务器尝试重新发送邮件。在 5 分钟后,postgrey 就会接收这封邮件。一般世界范围内遵守规则的邮件服务器都会尝试为我们重复投递邮件,但大多数垃圾邮件发送者不会这样做。所以,等上 5 分钟,再次通过上面的命令发送一次,然后检查 postfix 应该正常接收了邮件。

之后,我们检查一下我们可以通过 IMAP 和 dovecot 对话获取刚才发送的两封邮件。

  1. openssl s_client -crlf -connect cloud.linuxidc.net:993
  2. 1 login roudy@linuxidc.net "mypassword"
  3. 2 LIST """*"
  4. 3 SELECT INBOX
  5. 4 UID fetch 1:1(UID RFC822.SIZE FLAGS BODY.PEEK[])
  6. 5 LOGOUT

这里,你应该把 mypassword 替换为你自己为这个邮件账号设定的密码。如果能正常工作,基本上我们已经拥有一个能接收邮件的邮件服务器了,通过它我们可以在各种设备(PC/ 笔记本、平板、手机 …)上收取邮件了。

外发(中继)邮件

但是我们不能把邮件给它发送出去,除非我们自己从服务器发送。现在我们将让 postfix 为我们转发邮件,但是这个只有成功登录才可以,这是为了保证邮件是由服务器上的某个有效帐号发出来的。要做到这个,我们要打开一个特殊的,全程 SSL 连接的,SASL 鉴权的邮件提交服务。在文件 /etc/postfix/master.cf 里设置下面的参数:

  1. submission inet n ---- smtpd
  2. -o syslog_name=postfix/submission
  3. -o smtpd_tls_security_level=encrypt
  4. -o smtpd_sasl_auth_enable=yes
  5. -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  6. -o smtpd_sasl_type=dovecot
  7. -o smtpd_sasl_path=private/auth
  8. -o smtpd_sasl_security_options=noanonymous
  9. -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_non_fqdn_recipient,reject_unauth_destination

然后重启 postfix 服务:

  1. service postfix reload

现在,让我们试试从一台不同的机器连接这个服务,确定一下 postfix 现在能够正常中继我们自己的而不是其他任何人的邮件:

  1. openssl s_client -connect cloud.linuxidc.net:587-starttls smtp
  2. EHLO cloud.linuxidc.net

注意一下服务器建议的 ’250-AUTH PLAIN’ 功能,在从端口 25 连接的时候不会出现。

  1. MAIL FROM:asdf@jkl.net
  2. rcpt to:bob@gmail.com
  3. 5545.7.1<bob@gmail.com>:Relay access denied
  4. QUIT

这个没问题,postfix 在不认识我们的时候是不会中继邮件的。所以,首先让我们先鉴定一下自己的身份。要这样做,我们首先需要生成一个鉴权字符串:

  1. echo -ne '\000roudy@linuxidc.net\000mypassword'|base64

然后让我们尝试再次通过服务器发送邮件:

  1. openssl s_client -connect cloud.linuxidc.net:587-starttls smtp
  2. EHLO cloud.linuxidc.net
  3. AUTH PLAIN DGplYW5AMTk4NGNsb3VQLm5ldAA4bmFmNGNvNG5jOA==
  4. MAIL FROM:asdf@jkl.net
  5. rcpt to:bob@gmail.com

现在 postfix 应该能正常接收。最后完成这个测试,来检查一下我们的虚拟别名能正常工作,给 postmaster@linuxidc.net 发送一封邮件然后确认一下它会被送到 roudy@linuxidc.net:

  1. telnet cloud.linuxidc.net 25
  2. EHLO cloud.linuxidc.net
  3. MAIL FROM:youremail@domain.com
  4. rcpt to:postmaster@linuxidc.net
  5. data
  6. Subject:Virtualalias test
  7. Dear postmaster,
  8. Long time no hear! I hope your MX is working smoothly and securely.
  9. Yours sincerely,Roudy
  10. .
  11. QUIT

让我们检查一下邮件是否被正常送到正确的收件箱了:

  1. openssl s_client -crlf -connect cloud.linuxidc.net:993
  2. 1 login roudy@linuxidc.net "mypassword"
  3. 2 LIST """*"
  4. 3 SELECT INBOX
  5. *2 EXISTS
  6. *2 RECENT
  7. 4 LOGOUT

到这里,我们已经拥有一个能正常工作的邮箱服务器了,能收发邮件。我们可以配置自己的设备来使用它。

PS:不要忘记再次试试通过端口 25 往自己架设的服务器上的帐号发送邮件,来验证你已经没有被 postgrey 阻挡了。

阻止垃圾邮件进入你的收件箱

为了过滤垃圾邮件,我们已经使用了实时黑名单(RBL)和灰名单(postgrey)。现在我们将增加自适应垃圾邮件过滤来让我们的垃圾邮件过滤能力提高一个等级。这意味着我们将为我们的邮件服务器增加人工智能,这样它就能从经验中学习哪些邮件是垃圾哪些不是。我们将使用来实现这个功能。

  1. apt-get install dspam dovecot-antispam postfix-pcre dovecot-sieve

dovecot-antispam 是一个安装包,可以在我们发现有邮件被 dspam 误分类了之后让 dovecot 重新更新垃圾邮件过滤器。基本上,我们所需要做的就只是把邮件放进或拿出垃圾箱。dovecot-antispam 将负责调用 dspam 来更新过滤器。至于 postfix-pcre 和 dovecot-sieve,我们将分别用它们来把接收的邮件传递给垃圾邮件过滤器以及自动把垃圾邮件放入用户的垃圾箱。

在配置文件 /etc/dspam/dspam.conf 里,为以下参数设置相应的值:

  1. TrustedDeliveryAgent"/usr/sbin/sendmail"
  2. UntrustedDeliveryAgent"/usr/lib/dovecot/deliver -d %u"
  3. Tokenizer osb
  4. IgnoreHeader X-Spam-Status
  5. IgnoreHeader X-Spam-Scanned
  6. IgnoreHeader X-Virus-Scanner-Result
  7. IgnoreHeader X-Virus-Scanned
  8. IgnoreHeader X-DKIM
  9. IgnoreHeader DKIM-Signature
  10. IgnoreHeaderDomainKey-Signature
  11. IgnoreHeader X-Google-Dkim-Signature
  12. ParseToHeaders on
  13. ChangeModeOnParse off
  14. ChangeUserOnParse full
  15. ServerPID/var/run/dspam/dspam.pid
  16. ServerDomainSocketPath"/var/run/dspam/dspam.sock"
  17. ClientHost/var/run/dspam/dspam.sock

然后,在配置文件 /etc/dspam/default.prefs 里,把以下参数改为:

  1. spamAction=deliver # {quarantine | tag | deliver} -> default:quarantine
  2. signatureLocation=headers # {message | headers} -> default:message
  3. showFactors=on

现在我们需要把 dspam 连接到 postfix 和 dovecot 上,在配置文件 /etc/postfix/master.cf 最后添加这样两行:

  1. dspam unix - n n -10 pipe
  2. flags=Ru user=dspam argv=/usr/bin/dspam --deliver=innocent,spam --user $recipient -i -f $sender -- $recipient
  3. dovecot unix - n n -- pipe
  4. flags=DRhu user=mail:mail argv=/usr/lib/dovecot/deliver -f ${sender}-d ${recipient}

现在我们将告诉 postfix 通过 dspam 来过滤所有提交给服务器端口 25(一般的 SMTP 通信)的新邮件,除非该邮件是从服务器本身发出(permit_mynetworks)。注意下我们通过 SASL 鉴权提交给 postfix 的邮件不会通过 dspam 过滤,因为我们在前面部分里为这种方式设定了独立的提交服务。编辑文件 /etc/postfix/main.cf 将选项**smtpd_client_restrictions** 改为如下内容:

  1. smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023, check_client_access pcre:/etc/postfix/dspam_filter_access

在文件末尾,还需要增加:

  1. # For DSPAM, only scan one mail at a time
  2. dspam_destination_recipient_limit =1

现在我们需要指定我们定义的过滤器。基本上,我们将告诉 postfix 把所有邮件(如下用 /./ 代表)通过 unix 套接字发给 dspam。创建一个新文件 /etc/postfix/dspam_filter_access 并把下面一行写进去:

  1. /./ FILTER dspam:unix:/run/dspam/dspam.sock

这是 postfix 部分的配置。现在让我们为 dovecot 设置垃圾过滤。在文件 /etc/dovecot/conf.d/20-imap.conf 里,修改 imap mail_plugin 插件参数为下面的方式:

  1. mail_plugins = $mail_plugins antispam

并为 lmtp 增加一个部分:

  1. protocol lmtp {
  2. # Space separated list of plugins to load (default is global mail_plugins).
  3. mail_plugins = $mail_plugins sieve
  4. }

我们现在设置 dovecot-antispam 插件。编辑文件 /etc/dovecot/conf.d/90-plugin.conf 并把以下内容添加到插件部分:

  1. plugin {
  2. ...
  3. # Antispam (DSPAM)
  4. antispam_backend = dspam
  5. antispam_allow_append_to_spam = YES
  6. antispam_spam =Junk;Spam
  7. antispam_trash =Trash;trash
  8. antispam_signature = X-DSPAM-Signature
  9. antispam_signature_missing = error
  10. antispam_dspam_binary =/usr/bin/dspam
  11. antispam_dspam_args =--user;%u;--deliver=;--source=error
  12. antispam_dspam_spam =--class=spam
  13. antispam_dspam_notspam =--class=innocent
  14. antispam_dspam_result_header = X-DSPAM-Result
  15. }

然后在文件 /etc/dovecot/conf.d/90-sieve.conf 里指定默认的 sieve 脚本,这个将对服务器上所有用户有效:

  1. sieve_default =/etc/dovecot/default.sieve

什么是 sieve 以及为什么我们需要为所有用户设置一个默认脚本?sieve 可以在 IMAP 服务器上为我们自动处理任务。在我们的例子里,我们想让所有被确定为垃圾的邮件移到垃圾箱而不是收件箱里。我们希望这是服务器上所有用户的默认行为;这是为什么我们把这个脚本设为默认脚本。现在让我们来创建这个脚本,建立一个新文件 /etc/dovecot/default.sieve 并写入以下内容:

  1. require["regex","fileinto","imap4flags"];
  2. # Catch mail tagged as Spam, except Spam retrained and delivered to the mailbox
  3. if allof (header :regex "X-DSPAM-Result""^(Spam|Virus|Bl[ao]cklisted)$",
  4. not header :contains "X-DSPAM-Reclassified""Innocent"){
  5. # Mark as read
  6. # setflag "\\Seen";
  7. # Move into the Junk folder
  8. fileinto "Junk";
  9. # Stop processing here
  10. stop;
  11. }

现在我们需要编译这个脚本好让 dovecot 能运行它。我们也需要给它合适的权限。

  1. cd /etc/dovecot
  2. sievec .
  3. chown mail.dovecot default.siev*
  4. chmod 0640default.sieve
  5. chmod 0750default.svbin

最后,我们需要修改 dspam 需要读取的两个 postfix 配置文件的权限:

  1. chmod 0644/etc/postfix/dynamicmaps.cf /etc/postfix/main.cf

就这些!让我们重启 dovecot 和 postfix 服务:

  1. service dovecot restart
  2. service postfix restart

 

测试

然后通过从远程主机(比如我们用来设定服务器的电脑)连接服务器来测试一下反垃圾邮件:

  1. openssl s_client -connect cloud.linuxidc.net:25-starttls smtp
  2. EHLO cloud.linuxidc.net
  3. MAIL FROM:youremail@domain.com
  4. rcpt to:roudy@linuxidc.net
  5. DATA
  6. Subject: DSPAM test
  7. HiRoudy, how'd you like to eat some ham tonight? Yours, J
  8. .
  9. QUIT

让我们检查一下邮件是否已经送到:

  1. openssl s_client -crlf -connect cloud.linuxidc.net:993
  2. 1 login roudy@linuxidc.net "mypassword"
  3. 2 LIST """*"
  4. 3 SELECT INBOX
  5. 4 UID fetch 3:3(UID RFC822.SIZE FLAGS BODY.PEEK[])

这个应该返回 SPAM 为邮件增加了一组标记的数据,看上去像这样:

  1. X-DSPAM-Result:Innocent
  2. X-DSPAM-Processed:SunOct516:25:482014
  3. X-DSPAM-Confidence:1.0000
  4. X-DSPAM-Probability:0.0023
  5. X-DSPAM-Signature:5431710c178911166011737
  6. X-DSPAM-Factors:27,
  7. Received*Postfix+with,0.40000,
  8. Received*with+#+id,0.40000,
  9. like+#+#+#+ham,0.40000,
  10. some+#+tonight,0.40000,
  11. Received*certificate+requested,0.40000,
  12. Received*client+certificate,0.40000,
  13. Received*for+roudy,0.40000,
  14. Received*Sun+#+#+#+16,0.40000,
  15. Received*Sun+#+Oct,0.40000,
  16. Received*roudy+#+#+#+Oct,0.40000,
  17. eat+some,0.40000,
  18. Received*5+#+#+16,0.40000,
  19. Received*cloud.linuxidc.net+#+#+#+id,0.40000,
  20. Roudy+#+#+#+to,0.40000,
  21. Received*Oct+#+16,0.40000,
  22. to+#+#+ham,0.40000,
  23. Received*No+#+#+requested,0.40000,
  24. Received*linuxidc.net+#+#+Oct,0.40000,
  25. Received*256+256,0.40000,
  26. like+#+#+some,0.40000,
  27. Received*ESMTPS+id,0.40000,
  28. how'd+#+#+to, 0.40000,
  29. tonight+Yours, 0.40000,
  30. Received*with+cipher, 0.40000
  31. 5 LOGOUT

很好!你现在已经为你服务器上的用户配置好自适应垃圾邮件过滤。当然,每个用户将需要在开始的几周里培训过滤器。要标记一则信息为垃圾,只需要在你的任意设备(电脑,平板,手机)上将它移动到叫“垃圾箱”或“废纸篓”的目录里。否则它将被标记为有用。

确保你发出的邮件能通过垃圾邮件过滤器

这个部分我们的目标是让我们的邮件服务器能尽量干净地出现在世界上,并让垃圾邮件发送者们更难以我们的名义发邮件。作为附加效果,这也有助于让我们的邮件能通过其他邮件服务器的垃圾邮件过滤器。

发送者策略框架(SPF)

发送者策略框架(SPF)是你添加到自己服务器区域里的一份记录,声明了整个因特网上哪些邮件服务器能以你的域名发邮件。设置非常简单,使用 microsoft.com 上的 SPF 向导来生成你的 SPF 记录,然后作为一个 TXT 记录添加到自己的服务器区域里。看上去像这样:

  1. linuxidc.net.300 IN TXT v=spf1 mx mx:cloud.linuxidc.net -all

 

反向 PTR

我们之前在本文里讨论过这个问题,建议你为自己的服务器正确地设置反向 DNS,这样对服务器 IP 地址的反向查询能返回你服务器的实际名字。

 

OpenDKIM

当我们激活 OpenDKIM 后,postfix 会用密钥为每封发出去的邮件签名。然后我们将把这个密钥存储在 DNS 域中。这样的话,世界上任意一个邮件服务器都能够检验邮件是否真的是我们发出的,或是由垃圾邮件发送者伪造的。让我们先安装 opendkim:

  1. apt-get install opendkim opendkim-tools

然后按如下方式编辑 /etc/opendkim.conf 文件的配置:

  1. ##
  2. ## opendkim.conf -- configuration file for OpenDKIM filter
  3. ##
  4. Canonicalization relaxed/relaxed
  5. ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
  6. InternalHosts refile:/etc/opendkim/TrustedHosts
  7. KeyTable refile:/etc/opendkim/KeyTable
  8. LogWhyYes
  9. MinimumKeyBits1024
  10. Mode sv
  11. PidFile/var/run/opendkim/opendkim.pid
  12. SigningTable refile:/etc/opendkim/SigningTable
  13. Socket inet:8891@localhost
  14. SyslogYes
  15. SyslogSuccessYes
  16. TemporaryDirectory/var/tmp
  17. UMask022
  18. UserID opendkim:opendkim

我们还需要几个额外的文件,需保存在目录 /etc/opendkim 里:

  1. mkdir -pv /etc/opendkim/
  2. cd /etc/opendkim/

让我们建立新文件 /etc/opendkim/TrustedHosts 并写入以下内容:

  1. 127.0.0.1

建立新文件 /etc/opendkim/KeyTable 并写入以下内容:

  1. cloudkey linuxidc.net:mail:/etc/opendkim/mail.private

这会告诉 OpenDKIM 我们希望使用一个名叫 ’cloudkey’ 的加密密钥,它的内容在文件 /etc/opendkim/mail.private 里。我们建立另一个名叫 /etc/opendkim/SigningTable 的文件然后写入下面这一行:

  1. *@linuxidc.net cloudkey

这会告诉 OpenDKIM 每封从 linuxidc.net 域发出的邮件都应该用 ’cloudkey’ 密钥签名。如果我们还有其他域希望也能签名,我们也可以在这里添加。

下一步是生成密钥并修改 OpenDKIM 配置文件的权限。

  1. opendkim-genkey -r -s mail [-t]
  2. chown -Rv opendkim:opendkim /etc/opendkim
  3. chmod 0600/etc/opendkim/*
  4. chmod 0700 /etc/opendkim

一开始,最好使用 - t 开关,这样会通知其他邮件服务器你只是在测试模式下,这样他们就不会丢弃基于你的 OpenDKIM 签名的邮件(目前来说)。你可以从 mail.txt 文件里看到 OpenDKIM 密钥:

  1. cat mail.txt

然后把它作为一个 TXT 记录添加到区域文件里,应该是类似这样的:

  1. mail._domainkey.cloud1984.net.300 IN TXT v=DKIM1; k=rsa; p=MIGfMA0GCSqG...

最后,我们需要告诉 postfix 来为发出的邮件签名。在文件 /etc/postfix/main.cf 末尾,添加:

  1. # Now for OpenDKIM: we'll sign all outgoing emails
  2. smtpd_milters = inet:127.0.0.1:8891
  3. non_smtpd_milters = $smtpd_milters
  4. milter_default_action = accept

然后重启相关服务:

  1. service postfix reload
  2. service opendkim restart

 

测试

现在让我们测试一下是否能找到我们的 OpenDKIM 公钥并和私钥匹配:

  1. opendkim-testkey -d linuxidc.net -s mail -k mail.private-vvv

这个应该返回:

  1. opendkim-testkey: key OK

这个你���能需要等一会直到域名服务器重新加载该区域(对于 Linode,每 15 分钟会更新一次)。你可以用 dig 来检查区域是否已经重新加载。

如果这个没问题,让我们测试一下其他服务器能验证我们的 OpenDKIM 签名和 SPF 记录。要做这个,我们可以用 Brandon Checkett 的邮件测试系统。发送一封邮件到 Brandon 的网页上提供的测试地址,我们可以在服务器上运行下面的命令

  1. mail -s CloudCheck ihAdmTBmUH@www.brandonchecketts.com

在 Brandon 的网页上,我们应该可以在 ’DKIM Signature’ 部分里看到 result = pass 的文字,以及在 ’SPF Information’ 部分看到 Result: pass 的文字。如果我们的邮件通过这个测试,只要不加 - t 开关重新生成 OpenDKIM 密钥,上传新的密钥到区域文件里,然后重新测试检查是否仍然可以通过这些测试。如果可以的话,恭喜!你已经在你的服务器上成功配置好 OpenDKIM 和 SPF 了!

使用 Owncloud 提供日历,联系人,文件服务并通过 Roundcube 配置网页邮件

既然我们已经拥有了一流的邮件服务器,让我们再为它增加在云上保存通讯录,日程表和文件的能力。这些是 Owncloud 所提供的非常赞的服务。在这个弄好后,我们还会设置一个网页邮件,这样就算你没带任何电子设备出去旅行时,或者说在你的手机或笔记本没电的情况下,也可以通过网吧来检查邮件。

安装 Owncloud 非常直观,而且在这里有非常好的介绍。在 Debian 系统里,归根结底就是把 owncloud 的仓库添加到 apt 源里,下载 Owncloud 的发行密钥并安装到 apt 钥匙链中,然后通过 apt-get 安装 Owncloud:

  1. echo 'deb http://download.openSUSE.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /'>>/etc/apt/sources.list.d/owncloud.list
  2. wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_6.0/Release.key
  3. apt-key add -<Release.key
  4. apt-get update
  5. apt-get install apache2 owncloud roundcube

在有提示的时候,选择 dbconfig 并设置 roundcube 使用mysql。然后,提供一下 mysql 的 root 密码并为 roundcube 的 mysql 用户设置一个漂亮的密码。然后,按如下方式编辑 roundcube 的配置文件/etc/roundcube/main.inc.php,这样登录 roundcube 默认会使用你的 IMAP 服务器:

  1. $rcmail_config['default_host']='ssl://localhost';
  2. $rcmail_config['default_port']=993;

现在我们来配置一下 apache2 网页服务器增加 SSL 支持,这样我们可以和 Owncloud 和 Roundcube 对话时使用加密的方式传输我们的密码和数据。让我们打开 Apache 的 SSL 模块:

  1. a2enmod ssl

然后编辑文件 /etc/apache2/ports.conf 并设定以下参数:

  1. NameVirtualHost*:80
    Listen80
    ServerNamewww.linuxidc.net
    <IfModule mod_ssl.c>
  2. # If you add NameVirtualHost *:443 here, you will also have to change
  3. # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
  4. # to <VirtualHost *:443>
  5. # Server Name Indication for SSL named virtual hosts is currently not
  6. # supported by MSIE on Windows XP.
  7. NameVirtualHost*:443
  8. Listen443
  9. </IfModule>
  10. <IfModule mod_gnutls.c>
  11. Listen443
  12. </IfModule>

我们将在目录 /var/www 下为服务器加密连接 https://www.linuxidc.net 设定一个默认网站。编辑文件/etc/apache2/sites-available/default-ssl

  1. <VirtualHost _default_:443>
  2. ServerAdmin webmaster@localhost
  3. DocumentRoot /var/www
  4. ServerName www.linuxidc.net
  5. [...]
  6. <Directory/var/www/owncloud>
  7. Deny from all
  8. </Directory>
  9. [...]
  10. SSLCertificateFile /etc/ssl/certs/cloud.crt
  11. SSLCertificateKeyFile /etc/ssl/private/cloud.key
  12. [...]
  13. </VirtualHost>

然后让我们同时也在目录 /var/www 下设定一个非加密连接 http://www.linuxidc.net 的默认网站。编辑文件/etc/apache2/sites-available/default

  1. <VirtualHost _default_:443>
  2. DocumentRoot /var/www
  3. ServerName www.linuxidc.net
  4. [...]
  5. <Directory/var/www/owncloud>
  6. Deny from all
  7. </Directory>
  8. </VirtualHost>

这样的话,我们通过把文件放到 /var/www 目录下让 www.linuxidc.net 使用它们提供网站服务。名叫 ’Deny from all’ 的指令可以阻止通过 www.linuxidc.net 访问 Owncloud:我们将设定通过 https://cloud.linuxidc.net 来正常访问。

现在我们将设定网页邮件(roundcube),让它可以通过网址 https://webmail.linuxidc.net 来访问。编辑文件 /etc/apache2/sites-available/roundcube 并写入以下内容:

  1. <IfModulemod_ssl.c>
  2. <VirtualHost *:443>
  3. ServerAdmin webmaster@localhost
  4. DocumentRoot /var/lib/roundcube
  5. # The host name under which you'd like to access the webmail
  6. ServerName webmail.linuxidc.net
  7. <Directory/>
  8. Options FollowSymLinks
  9. AllowOverride None
  10. </Directory>
  11. ErrorLog ${APACHE_LOG_DIR}/error.log
  12. # Possible values include: debug, info, notice, warn, error, crit,
  13. # alert, emerg.
  14. LogLevel warn
  15. CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
  16. # SSL Engine Switch:
  17. # Enable/Disable SSL for this virtual host.
  18. SSLEngine on
  19. # do not allow unsecured connections
  20. # SSLRequireSSL
  21. SSLCipherSuite HIGH:MEDIUM
  22. # A self-signed (snakeoil) certificate can be created by installing
  23. # the ssl-cert package. See
  24. # /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
  25. # If both key and certificate are stored in the same file, only the
  26. # SSLCertificateFile directive is needed.
  27. SSLCertificateFile /etc/ssl/certs/cloud.crt
  28. SSLCertificateKeyFile /etc/ssl/private/cloud.key
  29. # Those aliases do not work properly with several hosts on your apache server
  30. # Uncomment them to use it or adapt them to your configuration
  31. Alias /program/js/tiny_mce/ /usr/share/tinymce/www/
  32. # Access to tinymce files
  33. <Directory"/usr/share/tinymce/www/">
  34. Options Indexes MultiViews FollowSymLinks
  35. AllowOverride None
  36. Order allow,deny
  37. allow from all
  38. </Directory>
  39. <Directory/var/lib/roundcube/>
  40. Options +FollowSymLinks
  41. # This is needed to parse /var/lib/roundcube/.htaccess. See its
  42. # content before setting AllowOverride to None.
  43. AllowOverride All
  44. order allow,deny
  45. allow from all
  46. </Directory>
  47. # Protecting basic directories:
  48. <Directory/var/lib/roundcube/config>
  49. Options -FollowSymLinks
  50. AllowOverride None
  51. </Directory>
  52. <Directory/var/lib/roundcube/temp>
  53. Options -FollowSymLinks
  54. AllowOverride None
  55. Order allow,deny
  56. Deny from all
  57. </Directory>
  58. <Directory/var/lib/roundcube/logs>
  59. Options -FollowSymLinks
  60. AllowOverride None
  61. Order allow,deny
  62. Deny from all
  63. </Directory>
  64. <FilesMatch"\.(cgi|shtml|phtml|php)$">
  65. SSLOptions +StdEnvVars
  66. </FilesMatch>
  67. <Directory/usr/lib/cgi-bin>
  68. SSLOptions +StdEnvVars
  69. </Directory>
  70. # SSL Protocol Adjustments:
  71. # The safe and default but still SSL/TLS standard compliant shutdown
  72. # approach is that mod_ssl sends the close notify alert but doesn't wait for
  73. # the close notify alert from client. When you need a different shutdown
  74. # approach you can use one of the following variables:
  75. # o ssl-unclean-shutdown:
  76. # This forces an unclean shutdown when the connection is closed, i.e. no
  77. # SSL close notify alert is send or allowed to received. This violates
  78. # the SSL/TLS standard but is needed for some brain-dead browsers. Use
  79. # this when you receive I/O errors because of the standard approach where
  80. # mod_ssl sends the close notify alert.
  81. # o ssl-accurate-shutdown:
  82. # This forces an accurate shutdown when the connection is closed, i.e. a
  83. # SSL close notify alert is send and mod_ssl waits for the close notify
  84. # alert of the client. This is 100% SSL/TLS standard compliant, but in
  85. # practice often causes hanging connections with brain-dead browsers. Use
  86. # this only for browsers where you know that their SSL implementation
  87. # works correctly.
  88. # Notice: Most problems of broken clients are also related to the HTTP
  89. # keep-alive facility, so you usually additionally want to disable
  90. # keep-alive for those clients, too. Use variable "nokeepalive" for this.
  91. # Similarly, one has to force some clients to use HTTP/1.0 to workaround
  92. # their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
  93. # "force-response-1.0" for this.
  94. BrowserMatch "MSIE [2-6]" \
  95. nokeepalive ssl-unclean-shutdown \
  96. downgrade-1.0 force-response-1.0
  97. # MSIE 7 and newer should be able to use keepalive
  98. BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
  99. </VirtualHost>
  100. </IfModule>

然后在你的 DNS 服务商那里声明一下服务器,例如:

  1. webmail.linuxidc.net.300 IN CNAME cloud.linuxidc.net.

现在让我激活这三个网站:

  1. a2ensite defaultdefault-ssl roundcube
  2. service apache2 restart

关于网页邮件,可以通过网址 https://webmail.linuxidc.net 来访问,基本上能工作。之后使用邮箱全名(例如 roudy@linuxidc.net)和在本文一开始在邮件服务器数据库里设定的密码登录。第一次连接成功,浏览器会警告说证书没有可靠机构的签名。这个没什么关系,只要添加一个例外即可。

最后但很重要的是,我们将通过把以下内容写入到 /etc/apache2/sites-available/owncloud 来为 Owncloud 创建一个虚拟主机。

  1. <IfModulemod_ssl.c>
  2. <VirtualHost *:443>
  3. ServerAdmin webmaster@localhost
  4. DocumentRoot /var/www/owncloud
  5. ServerName cloud.linuxidc.net
  6. <Directory/>
  7. Options FollowSymLinks
  8. AllowOverride None
  9. </Directory>
  10. <Directory/var/www/owncloud>
  11. Options Indexes FollowSymLinks MultiViews
  12. AllowOverride All
  13. Order allow,deny
  14. allow from all
  15. </Directory>
  16. ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  17. <Directory"/usr/lib/cgi-bin">
  18. AllowOverride None
  19. Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
  20. Order allow,deny
  21. Allow from all
  22. </Directory>
  23. ErrorLog ${APACHE_LOG_DIR}/error.log
  24. # Possible values include: debug, info, notice, warn, error, crit,
  25. # alert, emerg.
  26. LogLevel warn
  27. CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
  28. # SSL Engine Switch:
  29. # Enable/Disable SSL for this virtual host.
  30. SSLEngine on
  31. # do not allow unsecured connections
  32. # SSLRequireSSL
  33. SSLCipherSuite HIGH:MEDIUM
  34. SSLCertificateFile /etc/ssl/certs/cloud.crt
  35. SSLCertificateKeyFile /etc/ssl/private/cloud.key
  36. <FilesMatch"\.(cgi|shtml|phtml|php)$">
  37. SSLOptions +StdEnvVars
  38. </FilesMatch>
  39. <Directory/usr/lib/cgi-bin>
  40. SSLOptions +StdEnvVars
  41. </Directory>
  42. BrowserMatch "MSIE [2-6]" \
  43. nokeepalive ssl-unclean-shutdown \
  44. downgrade-1.0 force-response-1.0
  45. # MSIE 7 and newer should be able to use keepalive
  46. BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
  47. </VirtualHost>
  48. </IfModule>

然后通过执行以下命令激活 Owncloud:

  1. a2ensite owncloud
  2. service apache2 reload

之后通过在浏览器里打开链接 https://cloud.linuxidc.net/ 配置一下 Owncloud。

就这些了!现在你已经拥有自己的 Google Drive,日程表,联系人,Dropbox,以及 Gmail!好好享受下新鲜恢复保护的隐私吧!:-)

在云上同步你的设备

要同步你的邮件,你只需用你喜欢的邮件客户端即可:Android 或 iOS 自带的默认邮件应用,k9mail,或者电脑上的 Thunderbird。或者你也可以使用我们设置好的网页邮件。

在 Owncloud 的文档里描述了如何与云端同步你的日程表和联系人。在 Android 系统中,我用的是 CalDAV-Sync,CardDAV-Sync 应用桥接了手机上 Android 自带日历以及联系人应用和 Owncloud 服务器。

对于文件,有一个叫 Owncloud 的 Android 应用可以访问你手机上的文件,然后自动把你拍的图片和视频上传到云中。在你的 Mac/PC 上访问云端文件也很容易,在 Owncloud 文档里有很好的描述。

 

最后一点提示

在上线后的前几个星期里,最好每天检查一下日志 /var/log/syslog/var/log/mail.log以保证一切都在顺利运行。在你邀请其他人(朋友,家人,等等)加入你的服务器之前这很重要。他们信任你能很好地架设个人服务器维护他们的数据,但是如果服务器突然崩溃会让他们很失望。

要添加另一个邮件用户,只要在数据库 mailservervirtual_users表中增加一行。

要添加一个域名,只要在 virtual_domains 表中增加一行。然后更新 /etc/opendkim/SigningTable 为发出的邮件签名,上传 OpenDKIM 密钥到服务器区域,然后重启 OpenDKIM 服务。

Owncloud 有自己的用户数据库,在用管理员帐号登录后可以修改。

最后,万一在服务器临时崩溃的时候想办法找解决方案很重要。比如说,在服务器恢复之前你的邮件应该送往哪儿?一种方式是找个能帮你做备份 MX 的朋友,同时你也可以当他的备份 MX(看下 postfix 的配置文件 main.cfrelay_domainsrelay_recipient_maps 里的设定)。与此类似,如果你的服务器被破解然后一个坏蛋把你所有文件删了怎么办?对于这个,考虑增加一个常规备份系统就很重要了。Linode 提供了备份选项。在 1984.is 里,我用 crontabs 和 scp 做了一个基本但管用的自动备份系统。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-03/115484.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计36443字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中