lala.im:使用docker-mailserver自建邮件服务器

運維技術·lala.im · 2018-09-24 · 138 人浏览

原文地址:https://lala.im/4224.html,請支持原作者!該處僅作轉載。

我终于可以把邮件发进QQ邮箱的收件箱了,没错就是用的这个docker-mailserver。。。
这个docker-mailserver看名字就知道也是用Docker部署的,但是这个玩意和之前介绍过的Mailcow/Mailu/Poste.io有非常大的不同之处。
docker-mailserver没有内置webmail,也就是说它是一个纯邮件服务器,不占用80/443端口,这样有一个非常大的好处就是我们一台服务器装了这个还能跑跑网站,做点别的事情。
我之所以一直推荐这种直接用Docker就可以部署的邮件服务器有三个原因:
1.简单/方便。你要知道自己去手动配一台这样功能完全的邮件服务器,也许一个晚上的时间都不够,稍微一个地方出错还可能用不了。
2.安全,你要知道邮件服务器,自用问题不大,如果是公共服务,各种SPAM/病毒邮件,你就会发现原来邮件服务器是真的难伺候。
3.也就是我个人觉得最重要的原因。我自建一个邮件服务器,是出于自用的目的,我拿一台VPS出来就只装一个邮件服务,我真的觉得太浪费。所以像这样用Docker,在部署完了后,我还可以装点别的程序跑一跑。而我之前介绍的Mailcow/Mailu/Poste.io这些,虽然它们都是用Docker部署的,但是都把80/443占用了,我们最多也就只能再跑个酸酸乳之类的程序,如果我们还想建站呢?那这些方案就不适合我们。
在开始之前还是应该先配置DNS解析:
1.Type:A/NAME:mail/Value:VPSIP
2.Type:MX/NAME:@/Value:mail.example.com
3.Type:TXT/NAME:@/Value:v=spf1 mx ~all
4.Type:TXT/NAME:_dmarc/Value:v=DMARC1; p=reject; rua=mailto:[email protected]
其中“[email protected]”修改成一个你可以正常接收邮件的地址。
docker-mailserver拥有和Mailcow/Mailu/Poste.io差不多的功能,但是不会占用你的80/443端口,下面我将在一台安装了BT面板的生产机器上部署docker-mailserver。
首先你应该查找目前机器上有哪些程序占用了25端口:

netstat -nltp

如果有可以用下面的命令查找更详细的信息:

ps PID

一般安装了宝塔面板的机器,宝塔会默认启动postfix,我们要把25端口留出来给docker-mailserver用:

systemctl stop postfix
systemctl disable postfix

然后我们还是老样子安装Docker:

cd
yum -y install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.1.ce-3.el7.x86_64.rpm
systemctl start docker
systemctl enable docker.service

接着安装docker-compose:

curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

然后pull镜像:

docker pull tvial/docker-mailserver:latest

下载配置文件(这几个文件国内机器可能打不开,打不开就先下到本地然后用SFTP传上去吧):

curl -o setup.sh https://raw.githubusercontent.com/tomav/docker-mailserver/master/setup.sh; chmod a+x ./setup.sh
curl -o docker-compose.yml https://raw.githubusercontent.com/tomav/docker-mailserver/master/docker-compose.yml.dist
curl -o .env https://raw.githubusercontent.com/tomav/docker-mailserver/master/.env.dist

接着我们需要编辑docker-compose.yml:

vi docker-compose.yml

在这个配置文件定义一个DNS服务器地址,这里要选择用cloudflare最近新出的:

dns: 1.1.1.1

如图所示:

範例
如果你的本机是用的GoogleDNS,或是其他一些公共DNS,务必要做这一步修改,否则待会你的邮件服务器会出现无法发信的情况,原因我也懒得说了。
接着编辑env配置文件:

vi .env

在这个配置文件内,你必须要改动的地方有如下几点:

HOSTNAME=mail.example.com
DOMAINNAME=example.com
CONTAINER_NAME=mail

# Set different options for mynetworks option (can be overwrite in postfix-main.cf)
# empty => localhost only
# host => Add docker host (ipv4 only)
# network => Add all docker containers (ipv4 only)
PERMIT_DOCKER=network

其他的选项,自己按需求改吧,这里就不介绍了。
接着执行如下命令创建一个邮箱账号:

./setup.sh email add [email protected] password

执行如下命令生成一个DKIM密匙:

./setup.sh config dkim

DKIM的解析记录保存在:

config/opendkim/keys/example.com/mail.txt

你可以用SFTP把这个文件下载到本地,然后把里面的内容按照要求填写到DNS解析界面:

範例
现在就可以运行docker-mailserver了:

docker-compose up -d mail

如果你需要重启docker-mailserver,正确重启docker-mailserver的步骤是:

docker-compose stop
systemctl restart docker.service
docker-compose up -d mail

现在你应该在宝塔面板内放行如下端口:

25/993/587/143

如果嫌麻烦一条命令把防火墙关了:

systemctl stop firewalld.service

之前说了,docker-mailserver没有webmail,所以这里我们就要下载客户端了,客户端这里我使用的是:https://www.foxmail.com
安装好foxmail后,登录设置应该按照如下图来设置:

範例
注:
1.服务器类型选择IMAP。\n2.IMAP服务器一定要勾选SSL,也就是用993端口去通信。\n3.SMTP服务器的端口一定要是25。
如果不出意外,现在你应该可以成功登录到自己的邮箱内了,然后我们试着发一封邮件:

範例
竟然TM的进QQ收件箱了,真是喜出望外啊!!!

範例
测试下收信,也是没问题的:

範例
写在最后:
折腾了这么多邮件服务器,最后用这个docker-mailserver终于把邮件发进了QQ邮箱的收件箱,终于不会被550拒绝了。但是我总觉得这次能进收件箱和docker-mailserver没什么关系,我现在仔细想想觉得之前发邮件被550拒绝的原因应该是:
1.用了webmail,腾讯对这种用webmail发出来的邮件有特殊照顾。\n2.没用foxmail这个腾讯的亲儿子客户端。
这个事情告诉我们:有个干爹真吃香啊~
2018.9.24 update
这里更新一下这个邮件服务器配置SSL/TLS的方法。
先新建一个存放ssl证书的目录

mkdir -p /tmp/ssl

然后把你准备好的证书文件传到这个目录内。
接着编辑docker-mailserver配置文件

vi .env

修改如下参数:

SSL_TYPE=manual

然后编辑docker-compose.yml:

vi docker-compose.yml

在volumes:下面加一条:

- /tmp/ssl/:/tmp/ssl:ro

这个意思是把宿主机的tmp/ssl目录映射到docker的tmp/ssl。
在environment:下面加上如下设置,用来指定证书文件:

- SSL_CERT_PATH=/tmp/ssl/example.pem
- SSL_KEY_PATH=/tmp/ssl/example.key

最后重启docker-mailserver即可:

docker-compose stop
systemctl restart docker.service
docker-compose up -d mail
運維技術 Email Docker lala.im
Theme Jasmine by Kent Liao