标签 隐私 下的文章

介绍

隐私和安全正在逐渐成为一个重要的话题。虽然不可能做到 100% 安全,但是,还是能采取一些措施,特别是在 Linux 上,在你浏览网页的时候保护你的在线隐私安全。

基于这些目的选择浏览器的时候,火狐或许是你的最佳选择。谷歌 Chrome 不能信任。它是属于谷歌的,一个众所周知的数据收集公司,而且它是闭源的。 Chromium 或许还可以,但并不能保证。只有火狐保持了一定程度的用户权利承诺。

火狐设置

火狐里有几个你能设定的设置,能更好地保护你的隐私。这些设置唾手可得,能帮你控制那些在你浏览的时候分享的数据。

健康报告

你首先可以设置的是对火狐健康报告发送的限制,以限制数据发送量。当然,这些数据只是被发送到 Mozilla,但这也是传输数据。

打开火狐的菜单,点击 “选项” Preferences 。来到侧边栏里的 “高级” Advanced 选项卡,点击 “数据选项” Data Choices 。这里你能禁用任意数据的报告。

搜索

新版的火狐浏览器默认使用雅虎搜索引擎。一些发行版会更改设置,替代使用的是谷歌。两个方法都不理想。火狐可以使用 DuckDuckGo 作为默认选项。

在火狐中使用 DuckDuckGo

为了启用 DuckDuckGo,你得打开火狐菜单点击 “选项” Preferences 。直接来到侧边栏的 “搜索” Search 选项卡。然后,在 “默认搜索引擎” Default Search Engine 的下拉菜单中选择 DuckDuckGo 。

请勿跟踪 Do Not Track

这个功能并不完美,但它确实向站点发送了一个信号,告诉它们不要使用分析工具来记录你的活动。这些网页或许会遵从,会许不会。但是,最好启用请勿跟踪,也许它们会遵从呢。

启用火狐中的请勿跟踪

再次打开火狐的菜单,点击 “选项” Preferences ,然后是 “隐私” Privacy 。页面的最上面有一个 “跟踪” Tracking 部分。点击那一行写着 “您还可以管理您的‘请勿跟踪’设置” You can also manage your Do Not Track settings 的链接。会出现一个有复选框的弹出窗口,那里允许你启用“请勿跟踪”设置。

禁用 Pocket

没有任何证据显示 Pocket 正在做一些不好的事情,但是禁用它或许更好,因为它确实连接了一个专有的应用。

禁用 Pocket 不是太难,但是你得注意只改变 Pocket 相关设置。要访问你所需的配置页面,在火狐的地址栏里输入about:config

页面会加载一个设置表格,在表格的最上面是搜索栏,在那儿搜索 Pocket 。

你将会看到一个包含结果的新表格。找一下名为 extensions.pocket.enabled 的设置。当你找到它的时候,双击使其转变为“否”。你也能在这儿编辑 Pocket 的其他相关设置。不过没什么必要。注意不要编辑那些跟 Pocket 扩展不直接相关的任何东西。

禁用火狐的 Pocket

附加组件 Add-ons

安全化火狐的附加组件

火狐最有效地保护你隐私和安全的方式来自附加组件。火狐有大量的附加组件库,其中很多是免费、开源的。在这篇指导中着重提到的附加组件,在使浏览器更安全方面是名列前茅的。

HTTPS Everywhere

针对大量没有使用 SSL 证书的网页、许多不使用 https 协议的链接、指引用户前往不安全版本的网页等现状, 电子前线基金会 Electronic Frontier Foundation 开发了 HTTPS Everywhere。HTTPS Everywhere 确保了如果该链接存在有一个加密的版本,用户将会使用它。

给火狐设计的 HTTPS Everywhere 已经可以使用,在火狐的附加组件搜索网页上。(LCTT 译注:对应的中文页面。)

Privacy Badger

电子前线基金会同样开发了 Privacy Badger。 Privacy Badger 旨在通过阻止不想要的网页跟踪,弥补“请勿跟踪”功能的不足之处。它同样能通过火狐附加组件仓库安装。。(LCTT 译注:对应的中文页面。)

uBlock Origin

现在有一类更通用的的隐私附加组件,屏蔽广告。这里的选择是 uBlock Origin,uBlock Origin 是个更轻量级的广告屏蔽插件,几乎不遗漏所有它会屏蔽的广告。 uBlock Origin 将主要屏蔽各种广告,特别是侵入性的广告。你能在这儿找到它。。(LCTT 译注:对应的中文页面。)

NoScript

阻止 JavaScript 是有点争议, JavaScript 虽说支撑了那么多的网站,但还是臭名昭著,因为 JavaScript 成为侵略隐私和攻击的媒介。NoScript 是应对 JavaScript 的绝佳方案。

向 NoScript 的白名单添加网页

NoScript 是一个 JavaScript 的白名单,它会屏蔽所有 JavaScript,除非该站点被添加进白名单中。可以通过插件的“选项”菜单,事先将一个站点加入白名单,或者通过在页面上点击 NoScript 图标的方式添加。

添加你所在的网页到 NoScript 的白名单中

通过火狐附加组件仓库可以安装 NoScript 如果网页提示不支持你使用的火狐版本,点 “无论如何下载” Download Anyway 。这已经在 Firefox 51 上测试有效。

Disconnect

Disconnect 做的事情很多跟 Privacy Badger 一样,它只是提供了另一个保护的方法。你能在附加组件仓库中找到它 (LCTT 译注:对应的中文页面)。如果网页提示不支持你使用的火狐版本,点 “无论如何下载” Download Anyway 。这已经在 Firefox 51 上测试有效。

Random Agent Spoofer

Random Agent Spoofer 能改变火狐浏览器的签名,让浏览器看起来像是在其他任意平台上的其他任意浏览器。虽然有许多其他的用途,但是它也能用于预防浏览器指纹侦查。

浏览器指纹侦查 Browser Fingerprinting 是网站基于所使用的浏览器和操作系统来跟踪用户的另一个方式。相比于 Windows 用户,浏览器指纹侦查更多影响到 Linux 和其他替代性操作系统用户,因为他们的浏览器特征更独特。

你能通过火狐附加插件仓库添加 Random Agent Spoofer。(LCTT 译注:对应的中文页面)。像其他附加组件那样,页面或许会提示它不兼容最新版的火狐。再说一次,那并不是真的。

在火狐上使用Random Agent Spoofer

你可以通过点击火狐菜单栏上的图标来使用 Random Agent Spoofer。点开后将会出现一个下拉菜单,有不同模拟的浏览器选项。最好的选项之一是选择"Random Desktop" 和任意的切换时间。这样,就绝对没有办法来跟踪你了,也保证了你只能获得网页的桌面版本。

系统设置

私人 DNS

请避免使用公共或者 ISP 的 DNS 服务器!即使你配置你的浏览器满足绝对的隐私标准,你向公共 DNS 服务器发出的 DNS 请求却暴露了所有你访问过的网页。诸如谷歌公共 DNS(IP:8.8.8.8 、8.8.4.4)这类的服务将会记录你的 IP 地址、你的 ISP 和地理位置信息。这些信息或许会被任何合法程序或者强制性的政府请求所分享。

当我在使用谷歌公共 DNS 服务时,谷歌会记录什么信息?

谷歌公共 DNS 隐私页面有一个完整的收集信息列表。谷歌公共 DNS 遵循谷歌的主隐私政策,在 “隐私中心” Privacy Center 可以看到。 用户的客户端 IP 地址是唯一会被临时记录的(一到两天后删除),但是为了让我们的服务更快、更好、更安全,关于 ISP 和城市/都市级别的信息将会被保存更长的时间。 参考资料: https://developers.google.com/speed/public-dns/faq#privacy

由于以上原因,如果可能的话,配置并使用你私人的非转发 DNS 服务器。现在,这项任务或许跟在本地部署一些预先配置好的 DNS 服务器的 Docker 容器一样简单。例如,假设 Docker 服务已经在你的系统安装完成,下列命令将会部署你的私人本地 DNS 服务器:

# docker run -d --name bind9 -p 53:53/udp -p 53:53 fike/bind9

DNS 服务器现在已经启动并正在运行:

# dig @localhost google.com
; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @localhost google.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51110
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             242     IN      A       216.58.199.46

现在,在 /etc/resolv.conf 里设置你的域名服务器:

nameserver 127.0.0.1

结束语

没有完美的安全隐私解决方案。虽然本篇指导里的步骤可以明显改进它们。如果你真的很在乎隐私,Tor 浏览器 是最佳选择。Tor 对于日常使用有点过犹不及,但是它的确使用了这篇指导里列出的一些措施。


via: https://linuxconfig.org/protecting-your-privacy-with-firefox-on-linux

作者:Nick Congleton 译者:ypingcn 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

过去几年来,关于数字安全漏洞和个人隐私问题的报道频率大幅上升,毫无疑问,这一趋势仍将继续。我们时常听说诈骗者转移到社交媒体,国家将网络攻击作为协调进攻策略的一部分,以及追踪我们在线行为的公司挣到了大钱,快速崛起。

对这些事件冷漠对待非常容易,但是你可以做很多事情来提高你的在线安全,这样当你被安全事件所困时,可以减少自己的风险,并快速保护自己免受进一步的损失。安全意识非常容易学习,并且许多开源项目可以帮助你。

安全的重点不是将你的计算机变成一个虚拟的 Fort Knox(LCTT 译注:Fort Knox 是一个美军基地,固若金汤之意),而是为了使别人访问你的数据足够困难,这样攻击者将转移到其他更容易的目标。

使用密码管理器

在一个几乎每个网站都要求用户名和密码的世界里,大多数人都因密码而疲惫不堪,于是开发了复杂的系统来创建和记住用户名和密码(或者干脆完全放弃,只使用相同的用户名和密码)。密码管理器是这个问题的解决方案,我还不知道不使用密码管理器的专业安全人员。此外,它们非常容易设置和使用。

对于以前没有使用过的人来说,密码管理器是一种软件,它就像一个信息的数字保险库,将信息存储在加密环境中。你创建的主密码是一个单一的强密码,用于保护包含用户名和密码集合的保险库。通常,当你连接到已知网站,密码管理器会自动输入存储的密码,它也可以生成强密码并允许你存储其他信息。

有大量的密码管理器可用,其中许多是自由及开源的解决方案。我在 Windows 上用过 KeePass,在 Linux 和 MacOS 上用过 KeePassX,我推荐使用它们作为开始。(这里还有三个开源密码管理器,你可以尝试一下。)

然而,每个人应该选择他自己的最佳解决方案。某些密码管理器除了本地存储之外还具有云存储的功能,如果你使用多个设备,这将非常有用。受欢迎的管理器更有可能被维护并得到定期的安全更新。一些密码管理器集成双因子认证功能,我强烈建议你启用它。

大多数密码管理器都没有恢复忘记的主密码的功能。所以要明智地选择并确保主密码是你可以记住的。

使用 VPN 提高共享网络的安全性

虚拟专用网络(VPN)允许计算机通过共享网络发送和接收数据,就像它通过端到端加密直接与专用网络上的服务器通信一样。

您可能熟悉在办公室外工作时连接到公司内部网的过程。在咖啡馆或饭店使用连接到公共网络的 VPN,会保护你的通信数据不被公网上其他人看到,不过它无法阻止 VPN 供应商看到通信数据,而且确实存在不良 VPN 提供商收集和销售数据的现象。VPN 提供商也可能受到来自政府或执法机构的压力,将您通过其网络发送的数据信息传出。 因此,请记住,如果您正在进行非法活动,VPN 将不会保护你。

当选择 VPN 提供商时,请考虑其运营所在的国家,因为这关系到它所受约束的法律,有时甚至非常无关痛痒的活动都可能使您陷入困境。

OpenVPN 是一个自由开源的 VPN 协议,可在大多数平台上使用,并已成为最广泛使用的 VPN 之一。 您甚至可以托管您自己的 OpenVPN 服务器 -- 只是要小心,注意其安全性。如果您更希望使用 VPN 服务,请记住许多声誉良好的提供商都想要为您提供服务。

有些是收费的,如 ExpressVPNNordVPNAirVPN。一些提供商提供免费服务,但是,我强烈建议您不要使用它们。 请记住,当您使用免费服务时,您的数据就是产品。

浏览器扩展程序是您的朋友

虽然互联网浏览器有一些内置的安全工具,但是浏览器扩展仍然是提升您的隐私和安全的好方法。有很多种类的浏览器扩展,但哪些扩展是适合你的? 这可能取决于你使用互联网的主要目的和你对技术的掌握程度。作为基线,我会使用以下扩展:

  • Privacy Badger:这个扩展,由 EFF 开发,阻止间谍广告和隐蔽的跟踪。它通过在流量请求中放置一个 Do Not Track 头,然后评估流量仍被跟踪的可能性。如果这种可能性很高,它会阻止来自该域的进一步流量(除非你另有说明)。该扩展使用 GNU GPL v3 许可证。
  • HTTPS Everywhere:它是 EFF 和 Tor 项目之间的联合协作,此扩展确保尽可能自动使用 HTTPS。这很重要,因为它意味着您在给定域的网络流量是加密的,而不是明文,从而提供了隐私,并确保交换数据的完整性。该扩展使用 GNU GPL v3 许可证。

不要忘记旧帐户

你还记得 Bebo、iTunes Ping、Del.icio.us、Digg、MySpace 或 Friendster 吗?它们上面你有帐户吗?你关闭了帐户还是仅仅停止使用帐户?你曾经停下来想过有什么信息可能在这些网站上吗?是不是忘记了?

旧的社交媒体帐户是那些收集数据的人的金矿,包括营销人员,欺诈者和黑客等。他们可以使用这些信息来构建您的个人信息画像,这些信息通常可以在密码重置中用提供一些重要信息,例如您的第一只宠物的名字或您的第一辆车。

某些网站可能会让删除帐户变得困难或实际上不可能。Justdelete.me 是一个很好的资源,在这里可以找到各种平台上如何删除社交媒体帐户的操作说明。如果你正在寻找的网站不在那里,而且你自己找到了删除帐户的方法,你可以在 GitHub 上为该项目做贡献。如果您不确定您可能已忘记的社交媒体帐户,Knowem.com 允许您按用户名搜索大量的社交网络。搜索工具也可能误报,而且你可能不是曾经使用特定用户名的唯一的人,但它是一个很好的开始,尽管不是开源的。

如果您不确定您可能使用的旧用户名,Google 是一个很好的资源。尝试搜索旧昵称和电子邮件地址,你可能会对你发现的事感到惊讶。

总结

无论数字安全的任务如何巨大,你都可以在开始使用时打下坚实的基础。记住,安全是一个持续的过程,而不是一种状态。保持您使用的工具最新,定期检查您的习惯和工具,确保您的安全尽可能的好。如果你每次一步一步的改变,安全就不会过于复杂。


作者简介:

Tiberius Hefflin - Tibbs 最近毕业于苏格兰西部大学,获得计算机安全学位。她已搬迁到波特兰,在为波特兰通用电气公司做安全保证工作。 她热衷于鼓励小孩子踏上 STEM(LCTT 译注:即 科学 Science,技术 Technology,工程 Engineering,数学 Mathematics)。


via: https://opensource.com/article/17/1/4-ways-improve-your-online-security

作者:Tiberius Hefflin 译者:livc 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

打包在 Firefox Web 浏览器里面的地理位置服务即使浏览器关闭后也会在后台运行。

我们还没有从关于浏览器插件丑闻的消息中平复下来。插件原本目的是保卫隐私,但现在却把信息卖给了第三方公司。然而更令人愤怒的是其规模完全超出我们的预计。

MLS,即 Mozilla 位置服务,其可以让设备基于类似于 WIFI 接入点、无线电基站和蓝牙信标等基础设施确定其位置。

MLS 非常像是 Google 位置服务,后者是需要在 Android 设备上打开 GPS 并选择“高精度”模式时使用的服务。

那些曾经经历过 GPS 问题的人可能会知道这个模式是多么精确。

MLS 服务除了能够准确地确定您的位置以外,这个服务可以通过使用 WiFi 网络收集两种个人身份信息,包括愿意贡献到数据库的用户被扫描的 WiFi 设备的所有者

话虽这么说,Mozilla 也提到说你可以选择退出服务,但你真的可以退出吗?

当后台变成你隐私的展台

作为一个众包项目,为了维护和发展 MLS,Mozilla 事实上非常依赖于用户的贡献,因此他们开发了多种方法以便用户参与进来。

其中之一,就是被终端用户使用的一款名为 Stumbler 的 Android 应用程序:

Mozilla Stumbler 是一个开源的无线网络扫描器,它为我们的众包位置数据库收集 GPS、蜂窝网络和无线网络元数据。

这样一来,Stumbler 不仅仅是一个独立的应用程序,同时也是 Firefox 在 Android 设备上提供的一种为 MLS“贡献数据和增强功能”的服务。

该服务的问题在于它在后台运行,而大多数用户都不知道它,即使您可能已经禁用它

根据 Mozilla 提供的信息,要启用该服务,您需要打开“设置”菜单(在 Firefox for Android 版本中) -> 打开“隐私”部分 -> 滚动到底部以查看“数据选择”,最后,勾选 Mozilla 位置服务框。

Mozilla 定位服务尚未勾选,但 Stumbler 已开启

实际上,你会发现 Stumbler 服务运行在你的设备后台,这意味着它几乎不可见,因为它没有接口,即使 MLS 框未被选中,即使“数据选择”复选框都未选中,甚至 Firefox 浏览器本身已被关闭。

显然,停止 stumbler 的唯一方法是直接结束它。然而,这样做你首先需要一种方法来检测它的运行和结束,最终,这只是一个设备重启前的临时解决方案。

如何保证安全

为了避免 MLS 收集您的数据,仍然有一些方法值得您尝试一下,希望这些方法不会像在 Firefox for Android 中的MLS 复选框一样被 Mozilla 忽视。

您可以将您的无线网络 SSID 隐藏或者在 SSID 结尾添加“\_nomap”,例如将您的 SSID 从“myWirelessNetwork”更名为“myWirelessNetwork\_nomap”。这在向 Mozilla 的应用程序暗示,您不希望参与他们的数据收集活动。

对于 Android 上的 Stumbler 服务,由于是一个服务(而不是进程),您可能无法在运行的进程/最近的应用程序列表中看到它。 因此,使用专用应用程序关闭它或启用“开发人员选项”,并转到“运行服务” -> 点击 Firefox,最后,停止“stumbler”。


via: https://iwf1.com/is-mozilla-firefox-collecting-your-data-without-your-consent/

作者:Liron 译者:flankershen 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

IPv6 的使用量正在不断增加,让我们始料未及的是,伴随这个协议不断增加的使用量,大量的隐私问题涌现出来。互联网社区在积极发布相关解决方案。当前状况是怎样的呢? 网络管理器 NetworkManager 又是如何跟上的呢?让我们来瞧瞧吧!

通过 IPv6 方式连接的主机的特性

启用了 IPv6 的节点(LCTT 译注:节点在网络中指一个联网的设备)并不需要类似 IPv4 网络中 DHCP 服务器的中央机构来配置他们的地址。它们 发现 discover 自己所在的网络,然后通过生成主机部分来自主生成地址。这种方式使得网络配置更加简单,并且能够更好的扩展到更大规模的网络。然而,这种方式也有一些缺点。首先,这个节点需要确保它的地址不会和网络上其他节点冲突。其次,如果这个节点在进入的每一个网络中使用相同的主机部分,它的运动就可以被追踪,如此一来,隐私便处于危险之中。

负责制定因特网标准的组织 Internet 工程任务组 Internet Engineering Task Force (IETF)意识到了这个问题,这个组织建议取消使用硬件序列号来识别网络上的节点。

但实际的实施情况是怎样的呢?

地址唯一性问题可以通过 重复地址检测 Duplicate Address Detection (DAD)机制来解决。当节点为自身创建地址的时候,它首先通过 邻居发现协议 Neighbor Discovery Protocol (一种不同于 IPv4 ARP 协议的机制)来检查另一个节点是否使用了相同的地址。当它发现地址已经被使用,它必须抛弃掉这个地址。

解决另一个问题——隐私问题,有一点困难。一个 IP 地址(无论 IPv4 或 IPv6)由网络部分和主机部分组成(LCTT 译注:网络部分用来划分子网,主机部分用来从相应子网中找到具体的主机)。主机查找出相关的地址的网络部分,并且生成地址的主机部分。传统上它只使用了源自网络硬件(MAC)地址的 接口识别器 Interface Identifier 。MAC 地址在硬件制造的时候就被设置好了,它可以唯一的识别机器。这样就确保了地址的稳定性和唯一性。这对避免地址冲突来说是件好事,但是对隐私来说一点也不好。主机部分在不同网络下保持恒定意味着机器在进入不同网络时可以被唯一的识别。这在协议制定的时候看起来无可非议,但是随着 IPv6 的流行,人们对于隐私问题的担忧也愈演愈烈。幸运的是,解决办法还是有的。

使用 隐私扩展 privacy extensions

IPv4 的最大问题——地址枯竭,已经不是什么秘密。对 IPv6 来说,这一点不再成立,事实上,使用 IPv6 的主机能够相当大方的利用地址。多个 IPv6 地址对应一块网卡绝对没有任何不合适,正好相反,这是一种标准情形。最起码每个节点都有一个“ 本地连接 link-local 地址”,它被用来与同一物理链路的节点联络。当网络包含了一个连接其他网络的路由器,这个网络中的每个节点都有一个与每个直接连接的网络相联络的地址。如果主机在同一个网络有更多的地址,该节点(LCTT 译注:指路由器)将接受它们全部的传入流量。对于外发连接,它会把地址显示给远程主机,内核会挑选最适合的地址。但到底是哪一个呢?

启用了隐私扩展,就像 RFC4941 定义的那样,时常会生成带有随机主机部分的新地址。最新的那个被用于最新的外发连接,与此同时,那些不被使用了的旧地址将被丢弃。这是一个极好的策略——主机不会对外暴露其固定地址,因为它不用于外发连接,但它仍然会接受知道其固定地址的主机连接。

但这也存在美中不足之处——某些应用会把地址与用户识别绑定在一起。让我们来考虑一下这种情形,一个 web 应用在用户认证的时候生成一个 HTTP Cookie,但它只接受实施认证的地址的连接。当内核生成了一个新的临时地址,服务器会拒绝使用这个地址的请求,实际上相当于用户登出了。地址是不是建立用户认证的合适机制值得商榷,但这确实是现实中应用程序正在做的。

解救之道—— 隐私固定寻址 Privacy stable addressing

解决这个问题可能需要另辟蹊径。唯一的(当然咯)地址确实有必要,对于特定网络来说是稳定的,但当用户进入了另一个网络后仍然会变,这样的话追踪就变得几乎不可能。RFC7217 介绍了一种如上所述的机制。

创建隐私固定地址依赖于伪随机值,这个随机值只被主机本身知晓,它不会暴露给网络上的其他主机。这个随机值随后被一个密码安全算法加密,一起被加密的还有一些与网络连接的特定值。这些值包含:用以标识网卡的名称;网络地址;对于这个网络来说有可能的其他特殊值,例如无线网络的 SSID。使用这个安全密钥使其他主机很难预测结果地址,与此同时,当进入不同的网络时,网络的特殊数据会让地址变得不同。

这也巧妙的解决了地址重复问题。因为有随机值的存在,冲突也不太可能发生。万一发生了冲突,结果地址会得到重复地址检测失败的记录,这时会生成一个不同的地址而不会断开网络连接。看,这种方式很聪明吧。

使用隐私固定地址一点儿也不会妨碍隐私扩展。你可以在使用 RFC4941 所描述的临时地址的同时使用 RFC7217中的固定地址。

网络管理器 NetworkManager 处于什么样的状况?

我们已经在网络管理器1.0.4版本中实现了 隐私扩展 privacy extensions 。在这个版本中,隐私扩展默认开启。你可以用 ipv6.ip6-privacy 参数来控制它。

在网络管理器1.2版本中,我们将会加入 固定隐私寻址 stable privacy addressing 。应该指出的是,目前的隐私扩展还不符合这种需求。我们可以使用 ipv6.addr-gen-mode 参数来控制这个特性。如果它被设置成固定隐私,那么将会使用固定隐私寻址。设置成“eui64”或者干脆不设置它将会保持传统的默认寻址方式。

敬请期待2016年年初网络管理器1.2版本的发布吧!如果你想尝试一下最新的版本,不妨试试 Fedora Rawhide,它最终会变成 Fedora 24。

我想感谢 Hannes Frederic Sowa,他给了我很有价值的反馈。如果没有他的帮助,这篇文章的作用将会逊色很多。另外,Hannes 也是 RFC7217 所描述机制的内核实现者,当网络管理器不起作用的时候,它将发挥作用。


via: https://blogs.gnome.org/lkundrak/2015/12/03/networkmanager-and-privacy-in-the-ipv6-internet/

作者:Lubomir Rintel 译者:itsang 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

简述:里程碑式的 TPP 协定已经由美国商务部长在亚特兰大正式公布。但是这个协定引发了一系列的关于其侵犯互联网原则的严重关注。

跨太平洋伙伴关系协定 The Trans-Pacific Partnership deal ,也被称为 TPP,已经推出了几年的时间,其被称为二十一世纪的将贸易自由化推向巅峰之作,它被指威胁到互联网主权以及万维网的自由。TPP 的反对者们质疑在该协议的所有领域,包括信息共享原则在内都贯穿了秘密谈判。

周一在亚特兰大新闻发布会正式宣布的 TPP 协定据说将涵盖全球40%的经济体量,且其宣称将创建全球统一的经济阵营。

在该协定中提议,企业通过电脑系统违反信息披露将视为违法,这意味着在这个方面,不会有更多的泄密消息,也不会有任何负责任的新闻报道了。

对于初创公司和个人而言,最头痛的是 TPP 要求内容提供商,比如 Youtube 或者 Facebook 即便收到一条投诉也要对内容进行下架处理。这将在网络上加大一部分企业的垄断砝码,和在最少120年内让内容拥有者可以因为侵犯版权扼杀掉短期革新者。

而且,ISP 也被要求在 TPP 协定之下监控用户活动,以在新的网络法之下侦查非法举动,从而让你不能随便说话。

大多数严格的条款都来自美国产权保护法,从而会成为协定加入国的噩梦。

美国国会曾再三的被技术专家要求要协定透明化,但并未起效。

请持续关注 fossBytes 关于 网络侵犯法律 Internet infringement laws 方面的内容。在下面的留言栏告诉我们你关于 TPP 协定的看法。

这篇鸿篇巨制(多达上万字)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,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
  • 在云上同步你的设备

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

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

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

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

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

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

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

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

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

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

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

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

adduser roudy

然后,在文件/etc/ssh/sshd\_config中设置:

PermitRootLogin no

然后重启ssh服务:

service ssh reload

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

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。然后重启系统保证主机名在系统的每个需要它的角落都生效了。

reboot

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

apt-get update
apt-get dist-upgrade
service exim4 stop
apt-get remove exim4 rpcbind
apt-get autoremove
apt-get install vim

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

syn on

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

postfix

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

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

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

mysqladmin -p create mailserver
mysql -p mailserver
mysql> GRANT SELECT ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'mailuserpass';
mysql> FLUSH PRIVILEGES;
mysql> CREATE TABLE `virtual_domains` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> CREATE TABLE `virtual_users` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `password` varchar(106) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> CREATE TABLE `virtual_aliases` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `source` varchar(100) NOT NULL,
  `destination` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

mysql> INSERT INTO virtual_domains (`name`) VALUES ('jhausse.net');
mysql> INSERT INTO virtual_domains (`name`) VALUES ('otherdomain.net');
mysql> INSERT INTO virtual_aliases (`domain_id`, `source`, `destination`) VALUES ('1', 'postmaster', '[email protected]');
mysql> INSERT INTO virtual_aliases (`domain_id`, `source`, `destination`) VALUES ('2', 'postmaster', '[email protected]');

现在已经添加了一个本地邮件账号[email protected]。首先,为它生成一个密码的哈希串:

doveadm pw -s SHA512-CRYPT

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

mysql> INSERT INTO `mailserver`.`virtual_users` (`domain_id`, `password`, `email`) VALUES ('1', '$6$YOURPASSWORDHASH', '[email protected]');

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

myhostname = cloud.jhausse.net
myorigin = /etc/mailname
mydestination = localhost.localdomain, localhost
mynetworks_style = host

# We disable relaying in the general case
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
# Requirements on servers that contact us: we verify the client is not a
# known spammer (reject_rbl_client) and use a graylist mechanism
# (postgrey) to help reducing spam (check_policy_service)
smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023
disable_vrfy_command = yes
inet_interfaces = all
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/cloud.crt
smtpd_tls_key_file=/etc/ssl/private/cloud.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_tls_security_level=may
smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# Delivery
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
message_size_limit = 50000000
recipient_delimiter = +

# The next lines are useful to set up a backup MX for myfriendsdomain.org
# relay_domains = myfriendsdomain.org
# relay_recipient_maps =

# Virtual domains
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
local_recipient_maps = $virtual_mailbox_maps

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

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

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

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'

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

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
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命令测试:

postmap -q jhausse.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf
postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf

如果一切都正常配置了的话,头两个查询应该输出1,第3个查询应该输出[email protected],而最后一个应该什么都不输出。

dovecot

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

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

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

mail_location = maildir:/var/mail/%d/%n
[...]
mail_privileged_group = mail
[...]
first_valid_uid = 0

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

disable_plaintext_auth = yes
auth_mechanisms = plain
#!include auth-system.conf.ext
!include auth-sql.conf.ext

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

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=mail gid=mail home=/var/mail/%d/%n
}

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

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

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

chown -R mail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot

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

service imap-login {
  inet_listener imap {
    #port = 143
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

service pop3-login {
 inet_listener pop3 {
    #port = 110
    port = 0
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
    port = 0
  }
}

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0666
    group = postfix
    user = postfix
  }
  user = mail
}

service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = mail
    #group = 
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

  # Auth process is run as this user.
  #user = $default_internal_user
  user = dovecot
}

service auth-worker {
  user = mail
}

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

postmaster_address = [email protected]

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

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

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

Common Name (e.g. server FQDN or YOUR name) []:cloud.jhausse.net

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

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

测试

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

service dovecot restart
service postfix restart

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

telnet localhost 25

EHLO cloud.jhausse.net
MAIL FROM:[email protected]
RCPT TO:[email protected]
data
Subject: Hallo!

This is a test, to check if cloud.jhausse.net is ready to be an MX!

Cheers, Roudy
.
QUIT

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

250 2.0.0 Ok: queued as 58D54101DB

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

Nov 14 07:57:06 cloud dovecot: lmtp(4375, [email protected]): ... saved mail to INBOX

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

openssl s_client -connect cloud.jhausse.net:25 -starttls smtp
EHLO cloud.jhausse.net
MAIL FROM:[email protected]
rcpt to:[email protected]

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

554 5.7.1 <[email protected]>: Relay access denied

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

554 5.7.1 Service 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发送一封有效的邮件,这是一般正常的邮件服务器用来彼此对话的方式:

openssl s_client -connect cloud.jhausse.net:25 -starttls smtp
EHLO cloud.jhausse.net
MAIL FROM:[email protected]
RCPT TO:[email protected]

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

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

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

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

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

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

外发(中继)邮件

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

submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_non_fqdn_recipient,reject_unauth_destination

然后重启postfix服务:

service postfix reload

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

openssl s_client -connect cloud.jhausse.net:587 -starttls smtp
EHLO cloud.jhausse.net

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

MAIL FROM:[email protected]
rcpt to:[email protected]
554 5.7.1 <[email protected]>: Relay access denied
QUIT

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

echo -ne '\[email protected]\000mypassword'|base64

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

openssl s_client -connect cloud.jhausse.net:587 -starttls smtp
EHLO cloud.jhausse.net
AUTH PLAIN DGplYW5AMTk4NGNsb3VQLm5ldAA4bmFmNGNvNG5jOA==
MAIL FROM:[email protected]
rcpt to:[email protected]

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

telnet cloud.jhausse.net 25
EHLO cloud.jhausse.net
MAIL FROM:[email protected]
rcpt to:[email protected]
data
Subject: Virtual alias test

Dear postmaster,
Long time no hear! I hope your MX is working smoothly and securely.
Yours sincerely, Roudy
.
QUIT

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

openssl s_client -crlf -connect cloud.jhausse.net:993
1 login [email protected] "mypassword"
2 LIST "" "*"
3 SELECT INBOX
* 2 EXISTS
* 2 RECENT
4 LOGOUT

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

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

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

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

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里,为以下参数设置相应的值:

TrustedDeliveryAgent "/usr/sbin/sendmail"
UntrustedDeliveryAgent "/usr/lib/dovecot/deliver -d %u"
Tokenizer osb
IgnoreHeader X-Spam-Status
IgnoreHeader X-Spam-Scanned
IgnoreHeader X-Virus-Scanner-Result
IgnoreHeader X-Virus-Scanned
IgnoreHeader X-DKIM
IgnoreHeader DKIM-Signature
IgnoreHeader DomainKey-Signature
IgnoreHeader X-Google-Dkim-Signature
ParseToHeaders on
ChangeModeOnParse off
ChangeUserOnParse full
ServerPID               /var/run/dspam/dspam.pid
ServerDomainSocketPath  "/var/run/dspam/dspam.sock"
ClientHost      /var/run/dspam/dspam.sock

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

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

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

dspam     unix  -       n       n       -       10      pipe
  flags=Ru user=dspam argv=/usr/bin/dspam --deliver=innocent,spam --user $recipient -i -f $sender -- $recipient
dovecot   unix  -       n       n       -       -       pipe
  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**改为如下内容:

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

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

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

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

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

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

mail_plugins = $mail_plugins antispam

并为lmtp增加一个部分:

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

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

plugin {
  ...
  # Antispam (DSPAM)
  antispam_backend = dspam
  antispam_allow_append_to_spam = YES
  antispam_spam = Junk;Spam
  antispam_trash = Trash;trash
  antispam_signature = X-DSPAM-Signature
  antispam_signature_missing = error
  antispam_dspam_binary = /usr/bin/dspam
  antispam_dspam_args = --user;%u;--deliver=;--source=error
  antispam_dspam_spam = --class=spam
  antispam_dspam_notspam = --class=innocent
  antispam_dspam_result_header = X-DSPAM-Result
}

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

sieve_default = /etc/dovecot/default.sieve

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

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

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

cd /etc/dovecot
sievec .
chown mail.dovecot default.siev*
chmod 0640 default.sieve
chmod 0750 default.svbin

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

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

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

service dovecot restart
service postfix restart

测试

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

openssl s_client -connect cloud.jhausse.net:25 -starttls smtp
EHLO cloud.jhausse.net
MAIL FROM:[email protected]
rcpt to:[email protected]
DATA
Subject: DSPAM test

Hi Roudy, how'd you like to eat some ham tonight? Yours, J
.
QUIT

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

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

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

X-DSPAM-Result: Innocent
X-DSPAM-Processed: Sun Oct  5 16:25:48 2014
X-DSPAM-Confidence: 1.0000
X-DSPAM-Probability: 0.0023
X-DSPAM-Signature: 5431710c178911166011737
X-DSPAM-Factors: 27,
    Received*Postfix+with, 0.40000,
    Received*with+#+id, 0.40000,
    like+#+#+#+ham, 0.40000,
    some+#+tonight, 0.40000,
    Received*certificate+requested, 0.40000,
    Received*client+certificate, 0.40000,
    Received*for+roudy, 0.40000,
    Received*Sun+#+#+#+16, 0.40000,
    Received*Sun+#+Oct, 0.40000,
    Received*roudy+#+#+#+Oct, 0.40000,
    eat+some, 0.40000,
    Received*5+#+#+16, 0.40000,
    Received*cloud.jhausse.net+#+#+#+id, 0.40000,
    Roudy+#+#+#+to, 0.40000,
    Received*Oct+#+16, 0.40000,
    to+#+#+ham, 0.40000,
    Received*No+#+#+requested, 0.40000,
    Received*jhausse.net+#+#+Oct, 0.40000,
    Received*256+256, 0.40000,
    like+#+#+some, 0.40000,
    Received*ESMTPS+id, 0.40000,
    how'd+#+#+to, 0.40000,
    tonight+Yours, 0.40000,
    Received*with+cipher, 0.40000
5 LOGOUT

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

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

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

发送者策略框架(SPF)

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

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

反向PTR

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

OpenDKIM

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

apt-get install opendkim opendkim-tools

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

##
## opendkim.conf -- configuration file for OpenDKIM filter
##
Canonicalization        relaxed/relaxed
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
LogWhy                  Yes
MinimumKeyBits          1024
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SigningTable            refile:/etc/opendkim/SigningTable
Socket                  inet:8891@localhost
Syslog                  Yes
SyslogSuccess           Yes
TemporaryDirectory      /var/tmp
UMask                   022
UserID                  opendkim:opendkim

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

mkdir -pv /etc/opendkim/
cd /etc/opendkim/

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

127.0.0.1

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

cloudkey jhausse.net:mail:/etc/opendkim/mail.private

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

*@jhausse.net cloudkey

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

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

opendkim-genkey -r -s mail [-t]
chown -Rv opendkim:opendkim /etc/opendkim
chmod 0600 /etc/opendkim/*
chmod 0700 /etc/opendkim

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

cat mail.txt

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

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

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

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

然后重启相关服务:

service postfix reload
service opendkim restart

测试

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

opendkim-testkey -d jhausse.net -s mail -k mail.private -vvv

这个应该返回:

opendkim-testkey: key OK

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

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

mail -s CloudCheck [email protected]

在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:

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

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

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

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

a2enmod ssl

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

NameVirtualHost *:80   
Listen 80   
ServerName [www.jhausse.net](http://www.jhausse.net)  
<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

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

<VirtualHost _default_:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        ServerName www.jhausse.net
        [...]
        <Directory /var/www/owncloud>
          Deny from all
        </Directory>
        [...]
        SSLCertificateFile    /etc/ssl/certs/cloud.crt
        SSLCertificateKeyFile /etc/ssl/private/cloud.key
        [...]
</VirtualHost>

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

<VirtualHost _default_:443>
        DocumentRoot /var/www
        ServerName www.jhausse.net
        [...]
        <Directory /var/www/owncloud>
          Deny from all
        </Directory>
</VirtualHost>

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

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

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/lib/roundcube
    # The host name under which you'd like to access the webmail
        ServerName webmail.jhausse.net
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        # do not allow unsecured connections
        # SSLRequireSSL
        SSLCipherSuite HIGH:MEDIUM

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile    /etc/ssl/certs/cloud.crt
        SSLCertificateKeyFile /etc/ssl/private/cloud.key

        # Those aliases do not work properly with several hosts on your apache server
        # Uncomment them to use it or adapt them to your configuration
        Alias /program/js/tiny_mce/ /usr/share/tinymce/www/

        # Access to tinymce files
        <Directory "/usr/share/tinymce/www/">
                Options Indexes MultiViews FollowSymLinks
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        <Directory /var/lib/roundcube/>
                Options +FollowSymLinks
                # This is needed to parse /var/lib/roundcube/.htaccess. See its
                # content before setting AllowOverride to None.
                AllowOverride All
                order allow,deny
                allow from all
        </Directory>

        # Protecting basic directories:
        <Directory /var/lib/roundcube/config>
                Options -FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/lib/roundcube/temp>
                Options -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Deny from all
        </Directory>

        <Directory /var/lib/roundcube/logs>
                Options -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Deny from all
        </Directory>

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>
        #   SSL Protocol Adjustments:
        #   The safe and default but still SSL/TLS standard compliant shutdown
        #   approach is that mod_ssl sends the close notify alert but doesn't wait for
        #   the close notify alert from client. When you need a different shutdown
        #   approach you can use one of the following variables:
        #   o ssl-unclean-shutdown:
        #     This forces an unclean shutdown when the connection is closed, i.e. no
        #     SSL close notify alert is send or allowed to received.  This violates
        #     the SSL/TLS standard but is needed for some brain-dead browsers. Use
        #     this when you receive I/O errors because of the standard approach where
        #     mod_ssl sends the close notify alert.
        #   o ssl-accurate-shutdown:
        #     This forces an accurate shutdown when the connection is closed, i.e. a
        #     SSL close notify alert is send and mod_ssl waits for the close notify
        #     alert of the client. This is 100% SSL/TLS standard compliant, but in
        #     practice often causes hanging connections with brain-dead browsers. Use
        #     this only for browsers where you know that their SSL implementation
        #     works correctly.
        #   Notice: Most problems of broken clients are also related to the HTTP
        #   keep-alive facility, so you usually additionally want to disable
        #   keep-alive for those clients, too. Use variable "nokeepalive" for this.
        #   Similarly, one has to force some clients to use HTTP/1.0 to workaround
        #   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
        #   "force-response-1.0" for this.
        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        # MSIE 7 and newer should be able to use keepalive
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

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

webmail.jhausse.net.    300 IN  CNAME   cloud.jhausse.net.

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

a2ensite default default-ssl roundcube
service apache2 restart

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

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

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/owncloud
        ServerName cloud.jhausse.net
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/owncloud>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        # do not allow unsecured connections
        # SSLRequireSSL
        SSLCipherSuite HIGH:MEDIUM
        SSLCertificateFile    /etc/ssl/certs/cloud.crt
        SSLCertificateKeyFile /etc/ssl/private/cloud.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        # MSIE 7 and newer should be able to use keepalive
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

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

a2ensite owncloud
service apache2 reload

之后通过在浏览器里打开链接https://cloud.jhausse.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做了一个基本但管用的自动备份系统。


via: https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/

作者:Roudy Jhausse 译者:zpl1025 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出