使用 mailcow:dockerized 搭建邮件服务器
本文记录了我在全新的 vultr 服务器上利用 mailcow:dockerized 搭建邮件服务,并进行邮箱设置优化的过程。
前提条件
- 一台公网服务器,我使用的配置为:
Vultr Ubuntu_17.10_x64 / $2.50/mo
。官方文档给出的配置要求:
资源 | mailcow: dockerized |
---|---|
CPU | 1 GHz |
内存 | 1 GiB (或更好的 1.5 GiB + Swap) |
硬盘 | 5 GiB (不含邮件存储) |
系统类型 | x86_64 |
- 一个域名,下文以
xxx.xxx
指代。
vultr 服务器默认是关闭 25 端口的,需要先发工单解除屏蔽!我一开始费了老大劲,各种改配置都无法成功发信,偶然才了解了这个情况,真是一把辛酸泪!
另外 google cloud engine(gce)的服务器也是屏蔽25端口的,并且无法解封。Sending Email from an Instance
端口检查
运行命令:netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995'
,如果无输出则表示没有端口占用的情况,否则需要自行处理端口(关掉占用的程序或者后续安装时改 mailcow 配置)。如果已经运行了 nginx 或者其他 web 程序,可以考虑修改 mailcow 的端口,用反向代理的方式访问 mailcow。
添加swap
乞丐版配置需要通过添加 swap 来满足内存需求,步骤参考:服务器折腾。
安装 mailcow
安装 mailcow: dockerized,照着官方文档走:Installation - mailcow: dockerized documentation ,下面简单介绍下主要环节。
基础 DNS 设置
先配四条基础的:
# Name Type Value
mail IN A 1.2.3.4(服务器ip)
autodiscover IN CNAME mail
autoconfig IN CNAME mail
@ IN MX 10 mail
安装 docker 和 docker-compose
照着 docker-ce 文档自行包安装的,没有跟着 mailcow 文档走。
-
docker Get Docker CE for Ubuntu
添加key:$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
查看 key:
$ sudo apt-key fingerprint 0EBFCD88 pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22
添加软件源:
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
安装、启动:
$ sudo apt-get update && sudo apt-get install docker-ce sudo systemctl enable docker.service sudo systemctl start docker.service
-
docker-compose Install Docker Compose
下载后添加可运行权限(如下载失败,请检查并去掉多余的反斜杠):$ sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
获取并启动 mailcow-dockerized
先执行 umask
命令,确定为 0022
,之后将 mailcow-dockerized
代码拉下来放到某个地方(比如 /opt
):
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
执行 ./generate_config.sh
,这里填的域名 MAILCOW_HOSTNAME
,即 mail.xxx.xxx
。
获取 docker 镜像并启动:
docker-compose pull
docker-compose up -d
安装完成后可通过 https://${MAILCOW_HOSTNAME}
访问网页端管理,使用默认的用户名:admin
,密码:moohoo
登陆。我第一次访问时发现https 证书错误,根据 官方文档 应该会自动尝试获取 Letsencrypt 的证书,参考 #489,删除旧证书并重启就好了:
rm data/assets/ssl/acme/private/*
docker-compose down && docker-compose up -d
添加 domain 和 mailbox
登陆后,先改下密码,然后在右上方菜单 Configuration->Mailboxes
处添加域名,即 xxx.xxx
(非mail.xxx.xxx),接着添加邮箱账号(mailbox,如i@xxx.xxx
),点击页面右上角 Restart SOGo
,之后可通过 Apps->SOGo
进入 web 界面。
至此,使用 i@xxx.xxx
的邮箱地址已经可以成功收信和发信了,只是一般都会被别的邮件服务商归为垃圾邮件,我们还需要完善下配置,提高可信度。
更多设置
对照 DNS Setup 完善下 DNS 设置。
SPF
抄了一条 DNS 记录:
@ IN TXT "v=spf1 mx ~all"
DKIM
在 mailcow 网页端,Configuration -> Administration -> ARC/DKIM keys,添加一个dkim,Domain
填 xxx.xxx
, Selector
填 dkim
,length 选 1024(2048貌似 Dnspod 不支持),生成结果如图:
将 key 的内容填入 DNS 记录:
dkim._domainkey IN TXT "v=DKIM1; k=rsa; t=s; s=email; p=..."
DMARC
在网上抄了一条:
_dmarc IN TXT "v=DMARC1; p=reject; pct=100;"
SRV
没填
rDNS
Reverse DNS,反向 DNS,给 ip 指定域名,有时候会用到反向解析,参考 vultr rDNS ,前往主机的管理后台设置下:
最终我的 DNS 设置大致如下:
测试
用 mail tester 跑个分。
邮件客户端设置
备注
常用命令:
docker-compose up -d #启动
docker-compose down #停止
docker-compose logs [options] $service_name #查看日志,比如 docker-compose logs acme-mailcow