用Docker+Davmail换掉你的Outlook

本文讲的是用Docker+Davmail换掉你的Outlook,【编者的话】作者从头介绍了如何在Ubuntu系统下安装Docker到使用Upstart工具配置一个Davmail服务器的全过程。每一步都配有图文,详尽易懂。对使用Docker配置邮件服务器的读者很有价值。

简介

不管你喜欢还是不喜欢,有时候不得不通过Exchange服务器去收发邮件,但是如果你不喜欢微软系的邮件客户端(指Outlook),就会给你带来一定的不便,因为你可能更倾向于在兼容模式下,通过IMAP收取、SMTP发送您的邮件。

...好吧,这正是davmail出现的原因。

davmail是一个Java应用程序,它能在标准兼容的客户端与Exchange服务器之间建立连接,这是一个非常棒的工具-这也是唯一的解决方案。它还是单机的,可以无状态的使用,更有意思的是Java让它非常适合运行在Docker容器里面。

目标

把Docker安装在CenturyLink的云主机上,获取一个无状态的运行davmail的容器镜像,然后让系统通过upstart来管理容器

附加说明

如何获取一台CenturyLink云主机就作为一项练习留给读者。
为了简单,我们在Ubuntu平台使用docker.io包来安装docker,然后手动配置它;当然你还可以使用一种更方便的方式即通过puppet-git-receiver和docker Puppet Forge module这两个工具来管理Docker安装包和容器关于upstart的配置,关于这两个工具的使用会在以后的教程中讲述。

安全是我们最关心的问题,尤其是在一个企业的环境中,所以请注意你的本地的工作站与云主机之间的连接是否安全。常见的和行之有效的方法包括ssh端口转发和使用stunnel(一个不是那么随意与方便(ad-hoc)的方法)

无论你个人的邮件有多么不重要,也不要以明文的方式收取他们,因为这样会影响到整个邮件服务器的安全,从而波及其他人。

前期准备

出于这篇文章的考虑,我们假设你已经做好了充分的准备,已经运行了一台基于Ubuntu-14.04的云主机;如果没有,请接着往下读你可以非常容易的启动一台Ubuntu机器,然后安装Vagrant v1.6.x+和VirtualBox并进行相关配置,我的前一篇关于Chef和Vagrant的教程会提供一些指导,这又是给读者留下的一个练习。
好了,准备好了吗,让我们开始吧!

安装Docker

我们从Ubuntu上从安装docker开始:

root@trusty:~# apt-get install docker.io
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
aufs-tools cgroup-lite
Suggested packages:
btrfs-tools debootstrap lxc rinse
The following NEW packages will be installed:
aufs-tools cgroup-lite docker.io
0 upgraded, 3 newly installed, 0 to remove and 15 not upgraded.
Need to get 4,207 kB of archives.
After this operation, 25.0 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe aufs-tools amd64 1:3.2+20130722-1.1 [92.3 kB]
Get:2 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe docker.io amd64 1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1 [4,111 kB]
Get:3 http://archive.ubuntu.com/ubuntu/ trusty/main cgroup-lite all 1.9 [3,918 B]
Fetched 4,207 kB in 8s (480 kB/s)
Selecting previously unselected package aufs-tools.
(Reading database ... 61703 files and directories currently installed.)
Preparing to unpack .../aufs-tools_1%3a3.2+20130722-1.1_amd64.deb ...
Unpacking aufs-tools (1:3.2+20130722-1.1) ...
Selecting previously unselected package docker.io.
Preparing to unpack .../docker.io_1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1_amd64.deb ...
Unpacking docker.io (1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1) ...
Selecting previously unselected package cgroup-lite.
Preparing to unpack .../cgroup-lite_1.9_all.deb ...
Unpacking cgroup-lite (1.9) ...
Processing triggers for man-db (2.6.7.1-1) ...
Processing triggers for ureadahead (0.100.0-16) ...
Setting up aufs-tools (1:3.2+20130722-1.1) ...
Setting up docker.io (1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1) ...
Adding group `docker' (GID 114) ...
Done.
docker.io start/running, process 2353
Setting up cgroup-lite (1.9) ...
cgroup-lite start/running
Processing triggers for libc-bin (2.19-0ubuntu6.3) ...
Processing triggers for ureadahead (0.100.0-16) ...

在安装日志的第33行(注:Adding group `docker' (GID 114) ...这行),我们看到系统创建了一个docker用户组;值得一提的是,如果把用户加入到这个“docker用户组”后,此后再通过命令行与docker服务(或者说是进程)交互的时候就不用每次在命令前面加sudo了,这同样作为一个练习留给读者。

创建或者挑选我们需要的镜像

在Docker hub中有一些可用的davmail镜像,我们选择镜像rsrchboy/davmail-savvis-docker(https://registry.hub.docker.co ... file/)理由很简单,它是一个配置好了的davmail容器:

  • 他不需要挂载/绑定其他任何资源,也不需要挂载外部的数据卷(volume);
  • 他是单机运行的 ;
  • 没有以root身份运行。

你可能需要根据Exchange的运行环境与配置来修改此镜像(rsrchboy/davmail-savvis-docker)中davmail的配置;如果是这样的话,你就可以把此镜像作为一个基础;把对配置的修改叠加(ADD)到它之上,然后保存成一个新的镜像,再在新镜像的基础上重新构建davmail服务。

下面是该镜像的Dockerfile:

# This software is Copyright (c) 2014 by Chris Weyl <christopher.weyl@centurylink.com>

(That is, effectively by CenturyLinkLabs.)

#

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0

International License (CC-BY-SA-4.0).

#

http://creativecommons.org/licenses/by-sa/4.0/

FROM gimoh/davmail:latest
MAINTAINER Chris Weyl <christopher.weyl@centurylink.com>

RUN mkdir /etc/davmail
ADD davmail.properties /etc/davmail/

add a non-root system user

note we specify a id so as to try to avoid collisions on the host

RUN adduser --system --uid 500 --group --home /var/lib/davmail davmail
RUN chmod 0644 /etc/davmail/*

...and use it!

USER davmail

override default entry point as we've supplied a config

ENTRYPOINT ["/usr/local/davmail/davmail.sh", "/etc/davmail/davmail.properties"]

实在是迫不及待了,我们先试运行一下:

root@trusty:~# docker run rsrchboy/davmail-savvis-docker
2014-09-26 18:37:32,226 INFO  [main] davmail  - DavMail Gateway 4.5.0-2292 listening on SMTP port 1025 POP port 1110 IMAP port 1143 CALDAV port 1080 LDAP port 1389

配置容器,通过upstart让容器像系统服务一样运行

upstart是类unix系统中的一种服务管理方式,最近的Ubuntu发行版本已经默认采用upstart来管理系统服务了,它可以非常方便的实现我们的要求。


Originally created by Gareth Rushgrove's puppetforge docker module

description "start and stop corporate-davmail in docker"
author "Chris Weyl <christopher.weyl@centurylink.com>"

start on (started docker.io)
stop on stopping docker.io

setuid root

respawn
respawn limit 5 20

script
docker run --cidfile=/var/run/docker-corporate-davmail.cid \
    -p 127.0.0.1:11025:1025 \
    -p 127.0.0.1:11110:1110 \
    -p 127.0.0.1:11143:1143 \
    -p 127.0.0.1:11080:1080 \
    -p 127.0.0.1:11389:1389 \
--net bridge \
-m 0 \
rsrchboy/davmail-savvis-docker \
 &&
exec docker wait "$(cat /var/run/docker-corporate-davmail.cid)"
end script

post-stop script
if [ -e "/var/run/docker-corporate-davmail.cid" ]; then
docker kill "$(cat /var/run/docker-corporate-davmail.cid)" && \
rm "/var/run/docker-corporate-davmail.cid"
fi
end script

vim: set ft=upstart :

在这里我们要注意的关于upstart配置项如下(配置文件):
1,声明docker.io服务的依赖项(6-7行)
2,声明服务在异常终止时要重启服务(11行)还有建立安全的限定(12行)
3,声明如何启动(15-27行)和关闭(30-35行)服务
毋庸置疑,upstart配置中最核心的还是在docker run命令。

docker run --cidfile=/var/run/docker-corporate-davmail.cid \
  -p 127.0.0.1:11025:1025 \
  -p 127.0.0.1:11110:1110 \
  -p 127.0.0.1:11143:1143 \
  -p 127.0.0.1:11080:1080 \
  -p 127.0.0.1:11389:1389 \
--net bridge \
-m 0 \
rsrchboy/davmail-savvis-docker

在日志中我们看到,Docker的端口转发已经建立,davmail监听的端口有:
SMTP port 1025
POP port 1110
IMAP port 1143
CALDAV port 1080
LDAP port 1389

这里要记得 类unix系统中non-privliged的进程是无法启动小于1024的端口的,所以我们重新做了映射
我们告诉docker在云主机也就是宿主机上绑定端口时,只绑定大于10000的端口,且只绑定在loopback在
这样,当你要访问IMAP时,你就可以再云主机上通过127.0.0.1:11143访问,这样就可以阻止攻击者远程的连接你的davmail进行攻击。

现在我们已经有了一个upstart配置文件,剩下就是如果安装这个文件了,就是把他复制到/etc/init下,然后启动服务:

root@trusty:~# cp docker-corporate-davmail.conf /etc/init/
root@trusty:~# service docker-corporate-davmail status
docker-corporate-davmail stop/waiting
root@trusty:~# service docker-corporate-davmail start
docker-corporate-davmail start/running, process 4149
root@trusty:~# docker ps
CONTAINER ID        IMAGE                                   COMMAND                CREATED             STATUS              PORTS                                                                                                                                   NAMES
7f93d3b35b60        rsrchboy/davmail-savvis-docker:latest   /usr/local/davmail/d   3 seconds ago       Up 2 seconds        127.0.0.1:11025->1025/tcp, 127.0.0.1:11080->1080/tcp, 127.0.0.1:11110->1110/tcp, 127.0.0.1:11143->1143/tcp, 127.0.0.1:11389->1389/tcp   kickass_mestorf

这个容器是无状态的,它只是在标准的客户端和Exchange之间做一个转译(translate),你可以对容器进行启动,关闭,终止,禁用,启用等操作;现在davmail容器安全的运行在云主机里面,你不用有其他担心,除非客户端到服务器的连接中断。因此,我们解决了复杂的问题同时,还节省了我们成把的时间。

享受的时刻

到目前为止,你的davmail已经运行在容器里面了,通过正确的端口映射配置,现在你可以选择你喜欢的客户端去跟Exchange server 通信收发邮件了!davmail建议的客户端是pine,当然这只是个建议而已。

原文链接:KILLING YOUR OUTLOOK WITH DOCKER AND DAVMAIL (翻译:侯亚辉,审校:肖劲)

原文发布时间为:2014-12-27

本文作者:aahyhaa

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:用Docker+Davmail换掉你的Outlook

时间: 2024-09-12 21:52:30

用Docker+Davmail换掉你的Outlook的相关文章

PS使用通道扣图换掉蓝天教程

  原图如下,我们今天要把天空换掉; 查看通道窗口 找到天空与其他反差最大的一个通道,发现是蓝色通道; 复制蓝色通道; 可以利用亮度/对比度把反差加大,想要的部分越黑越好,不要的地方越白越好; 然后回到图层,点击选择菜单下面的载入选区,注意通道选项那里,选择你要的那个图层. 出现了选择区域,我直接点击增加图层蒙板,扣图效果如下: 最后,我们加一张背景,基本工作结束 分类: ps抠图教程

96微信编辑器素材头像怎么换掉?

  96微信编辑器素材头像怎么换掉?最近,不少人都在使用96微信编辑器这个软件,因为96微信编辑器编辑微信文章很方便.有用户在问,96微信编辑器素材头像怎么换掉?那么,就快和小编一起来看看吧. 首先选择素材,然后点击,进入右边的编辑框里面,这时有个圆的头像图片,我们是不能上传图片插入的,需要修改代码. 96微信编辑器素材头像 第一步: 首先我们登录微信公众平台,在正文里面上传一张自己想替换的图片,然后保存一下. 96微信编辑器素材头像 第二步: 保存好,在电脑上面预览一下,如下图: 第三步: 右

Twitter换掉了默认的蛋形头像图标

3 月 31 号的时候,Twitter 宣布将会换掉默认(未上传前暂时空白)的蛋形头像图标,以鼓励用户上传更能表达自我个性的照片.当然,新图标也必须有着通用.一致.严肃.无烙印.临时.以及非独家等低调的属性,让人觉得它更像是一个占位符,而不是什么蛋.此前,该社交媒体平台也曾对其进行多次迭代,最后才落到了相对中性的灰色背景和人物前景. 新默认空白图像图标已经上线,不过暂未上传过头像的新用户不见得会注意到这种变化. 以上为之前的几次的默认头像图标.          本文转自d1net(转载)

你想换掉旧iPhone?苹果以及富士康或许可以提供点意见

如果你有一部老掉牙的iPhone4,想换一台iPhone6Plus,你会怎么办?苹果以及"背后的合作伙伴"富士康或许可以提供点意见. 昨日,苹果正式在中国启动"重复使用及循环利用计划",首批包括iPhone4及以上机型和全线iPad,这意味着,只要你手捧在大中华地区(内地和港澳台)购买的苹果产品,就可以在中国的苹果零售店评估折价.获得一定金额的代金券,用来购买新品. 而对于回收后的苹果手机"去处",富士康方面昨日晚间在给<第一财经日报>

ios 头像缓存 怎么清除 我换掉了头像 URL 一样的时候 头像没更新

问题描述 解决方案 一般缓存是根据url做的,头像都换了,对应的链接也应该变化的,非要一致的url.那么久不能缓存了.解决方案二:用SDWebimage  加载图片[ImageView sd_setImageWithURL:[NSURL URLWithString:item.head_image] placeholderImage:[UIImage imageNamed:@"chatListCellHead"] options:SDWebImageRefreshCached ];opt

唯品会准备半年逐步换掉乐峰高管

摘要: 陈欧在乐蜂网卖给唯品会时宣告战争结束,胜利,只是新的启程,但战争似乎远未结束,反倒升级了.聚美优品从化妆品涉足服饰,唯品会从服饰进军化妆品,互相侵蚀主品类. 下个月 陈欧在乐蜂网卖给唯品会时宣告"战争结束,胜利,只是新的启程",但战争似乎远未结束,反倒升级了.聚美优品从化妆品涉足服饰,唯品会从服饰进军化妆品,互相侵蚀主品类. 下个月,乐蜂网即将迎来6周年店庆.据了解,一系列活动在筹备中,将陆续放出.但与去年这个时候相比,乐蜂网还是显得低调了不少. 去年乐蜂网5周年店庆狂欢从8月

美媒推荐高难度三方交易辛里奇面具俠换掉麦蒂

网易体育6月29报道: 沉寂了几天后,麦蒂的交易流言又开始出现在美国各大媒体上,灰熊.公牛.活塞等队成了T-Mac下赛季的热门去向.特别是公牛与活塞,这两支球队对火箭1号垂涎已久,不止一次的提出了交易请求.于是休斯敦<韧性之城论坛>今日为火箭队和莫雷推荐了一笔"三方交易"送走麦蒂,而得到控卫辛里奇与"面具侠"汉密尔顿.新闻截屏图:三方交易方案 这笔三方交易的具体方式是: 火箭队拿出麦格雷迪,送往活塞. 活塞队将泰肖恩·普林斯送往公牛,将理查德·汉密尔顿送

容器是如何变成技术界宠儿,为什么 Docker 成为容器头牌?

本文讲的是容器是如何变成技术界宠儿,为什么 Docker 成为容器头牌,[编者的话]这篇访谈的对象是曾经担任 Joyent CTO 的 Jason Hoffman .他认为,操作系统异构是虚拟机发展的原因.随着 Linux 和 Windows 成为主流操作系统,以及 64 位系统时代的来临,容器取代虚拟机是很自然的事情.他还反思了为什么 Joyent 会错失发展机会,介绍了目前正在做的非聚合硬件,展望了基础设施和应用架构的未来. Jason Hoffman 目前担任 Ericsson 公司云系统

Segment:使用Docker、ECS和Terraform重建基础设施

本文讲的是Segment:使用Docker.ECS和Terraform重建基础设施,[编者的话]本文转帖自Segment公司CTO以及联合创始人Calvin French-Owen发表的文章.Segment公司采用独立的AWS账户进行真正意义上的隔离,采用Docker和ECS运行服务,并采用Terraform配置脚本进行整合并为服务描述添加Datadog供应商获得免费的监控告警信息. Segment 于 2012年 在旧金山成立,一开始就因其整合数据的能力倍受关注,去年6月,Segment 把自