mailcow 是一个比较流行的自建邮局(说邮局是因为我觉得从功能上来说邮局相比邮箱要更加准确)程序,自带有垃圾邮件检测、病毒邮件检测以及前端 Web 界面等一系列功能,而且安装和配置也比较简单,如果大家也想自建邮局的话,推荐大家试试这个。
本来的话这篇文章我是没打算写的,因为官方的教程其实已经有够完整的了,只是昨天恰好有个朋友来问我搭建邮箱的问题,而我又看了下我只在很久以前写过一点不完整的 Postfix 的教程,所以想了想还是决定更新点不一样的东西,写一下 mailcow 的教程吧,毕竟这个就功能上来说可比一个单独的 Postfix 要好多了,而且因为有 Web 操作界面日后使用起来也更加的轻松。
一、准备工作
首先需要说明的是,mailcow 官方文档里明确说明了不支持 OpenVZ,Virtuozzo 和 LXC 虚拟化的系统安装使用,此外要正常使用 mailcow 还有非常重要的一点,就是你的服务器提供商没有禁用 25 端口(不仅仅是你的系统防火墙没禁用),如果不清楚是否禁用了建议问下商家。
PS:此部分说明基本上和官方提供的差不多,完整说明可以看下官方写的:https://mailcow.github.io/mailcow-dockerized-docs/prerequisite/prerequisite-system/
1.1 配置需求
CPU | 1 GHz |
RAM | Minimum 6 GiB + 1 GiB swap (default config) |
Disk | 20 GiB (without emails) |
System Type | x86_64 |
这个是官方文档给出的最低配置要求,其中的三项大多都是不需要太在意的,主要就是 RAM 也就是内存这项可能对 VPS 用户来说要求有点高了,这是因为 mailcow 是一整个解决方案,里面包含了很多程序,再加上比较吃内存的邮件检测程序,自然内存占用就下不来了,不过我自己测试用 4 G 内存也是能跑的,可能是因为我的邮局用户数比较少吧。
需要提醒的是,官方给出的只是最低的配置要求,如果你的邮局用户数比较多的话,可能占用远不止 6 GB 这么点,具体还是要看你自己的使用环境。
1.2 NTP 同步
mailcow 要求系统要开启 NTP 时间同步,这个一般的 Linux 发行版应该默认就开启了,如果不确定是否开启了要自己检查的话可以使用 timedatectl status 命令,如果有类似下面这样的显示就是开启了(来自 Debian 11)。
System clock synchronized: yes NTP service: active
PS:如果没开启的话,可以执行 timedatectl set-ntp true 命令来开启。
1.3 防火墙
最开始的时候也说过,使用 mailcow 时,需要确保 25 端口没有被禁用,这说的是你的服务器提供商和你的系统都没有禁用这个端口,否则你就无法正常收发信了。除此之外,mailcow 还会用到一些其它的端口,这些端口有一部分是可选的,你可以根据自己的需求来选择是否放行。
mailcow 会用到的端口与解释:
协议 | 端口 | 解释 |
TCP | 25 | SMTP 端口,用于双方邮局服务器之间的通讯(收发件) |
TCP | 465 | SMTPS 端口,邮局服务器接收来自于用户撰写的邮件(如从客户端发邮件)时使用,通过 SSL 进行加密 注:此端口为遗留端口,并无实际标准,因此更建议使用更现代且有标准的 587 端口 |
TCP | 587 | Submission 端口,邮局服务器接收来自于用户撰写的邮件(如从客户端发邮件)时使用,使用 STARTTLS 协议进行加密 |
TCP | 143 | IMAP 端口,用户从邮局服务器接收邮件(比如你用客户端收邮件)时使用 |
TCP | 993 | IMAPS 端口,用户从邮局服务器接收邮件(比如你用客户端收邮件)时使用,加密传输 |
TCP | 110 | POP3 端口,用户从邮局服务器接收邮件(比如你用客户端收邮件)时使用 |
TCP | 995 | POP3S 端口,用户从邮局服务器接收邮件(比如你用客户端收邮件)时使用,加密传输 |
TCP | 4190 | Dovecot ManageSieve 所使用的端口,非邮箱相关端口,用于管理服务 |
TCP | 80/443 | HTTP/HTTPS 端口,主要用于我们日常访问 mailcow 的 Web 端管理界面以及 SOGo 邮箱面板 |
关于端口的解释,其实网上就有挺多的了,我这里用自己的话来写是因为想让大家对于这些端口的用途有更清楚的认识,这样在设置防火墙的时候也知道具体该怎么限制。当然,因为都是我自己的理解,可能解释的不是都对,有懂的欢迎帮我纠正~
这部分最后再补充几点:
- 表格内列出的端口主要针对的是传入连接,也就是从外部访问你的邮局服务器时可能会用到的端口,从内往外访问的话估计一般也没人会专门限制,有的话至少得注意下 25 端口开没开了
- 465 和 587 端口用途基本上是一致的,但更建议大家使用有标准的 587 端口,因此两者可以只开一个
- IMAP 和 POP3 相关端口的用途也基本上是一致的,可以只选择两类中的一类开启
1.4 DNS 记录
因为后面安装 mailcow 的时候会自动为我们生成 SSL 证书,为了保证这个过程不会出现不必要的中断,所以建议先在准备阶段就添加好必要的 DNS 记录,也就是邮箱域名的 A/AAAA 记录。除此之外的记录可以在后期慢慢添加,具体需要添加哪些记录可以看这里:https://mailcow.github.io/mailcow-dockerized-docs/prerequisite/prerequisite-dns/
二、mailcow 的安装
前期准备工作都搞定之后,就可以开始开装 mailcow 了,不过由于 mailcow 仅支持 Docker 安装,所以我们还需要先把 Docker 装好。
注意,除非特别说明,否则下面的命令默认都以 root 用户来运行。
2.1 Docker 和 Docker Compose 安装
因为我是用 Debian 来写的教程,所以参考官方 Debian 的教程就行了:https://docs.docker.com/engine/install/debian/
首先是要确保系统干净,没有装过旧版本的 Docker,所以需要先使用卸载命令,没有安装的执行了也不会对现有系统造成影响。
apt remove docker docker-engine docker.io containerd runc
确保系统干净之后,就可以开始准备安装了,首先是需要下载一些安装时会用到的包:
apt install ca-certificates curl gnupg lsb-release
添加 Docker 的 GPG 密钥到系统:
mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
添加正确的源版本到系统:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
上面的搞定之后,就能直接在系统里用 apt 命令安装 Docker 了:
apt update apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
如果安装没问题的话,执行下面的命令检查 Docker 是否安装成功:
docker run hello-world
2.2 mailcow 安装
装完 Docker 和 Docker Compose 之后就能开始装 mailcow 了,这部分其实挺简单的我就简单的说下吧~
首先是确保系统有装 git,没有装的执行 apt install git 安装,之后运行下面的命令拉取 mailcow 代码到本地:
cd /opt git clone https://github.com/mailcow/mailcow-dockerized cd mailcow-dockerized
拉取完成之后,执行下面的命令来生成配置:
./generate_config.sh
执行之后会询问用户邮局使用的域名,注意这个域名主要会用在三个地方,一个是你访问 mailcow 的 Web 管理页面,一个是用户 SOGo Web 邮箱的页面,还有一个是你的邮局所使用的域名(收发邮件用域名),建议在填写前考虑好自己以后要使用的域名,不然以后要修改还是有些麻烦的,尤其是最后一个。
配置文件生成之后,就可以启动 mailcow 了:
docker-compose pull docker-compose up -d
到这里就算是搭建成功了,之后就可以访问前面生成配置所使用的域名来对 mailcow 进行管理了,因为每个人的用法都不太一样,所以配置管理这部分我就不细说了。
三、mailcow 的升级
mailcow 自带有升级脚本,对于我们用户来说可以是非常方便了,升级过程也非常顺畅,毫无压力~
日常执行下面的命令升级:
cd /opt/mailcow-dockerized ./update.sh
结束
好了写到这里基本上 mailcow 的搭建方法我也写完了,其实 mailcow 只是搭建的话可以说是毫无难度的,毕竟用的是 Docker 镜像该配置好的基本都配置好了,剩下的无非是邮箱和域名这方面要用户自行设置的东西,这部分因为今天时间仓促加上我精神也比较一般的关系所以就没在文章里细说,而且后台截图的话也挺容易暴露一些个人信息的,后面我想想办法再来补上吧。
我之前也想搞一个自建邮箱,但后来想来想去,搞个普通的邮箱比较简单,这个也没啥必要,所以就没搞。。。
主要还是自己爽哈哈。自建其实没什么难度,关键就是这种个人邮箱发出去的邮件在大厂邮箱上经常会遇到信誉问题,比如我这封回复邮件发到你邮箱可能二话不说就直接被判定为垃圾邮件了……
是的 这也是一个最重要的原因 所以最后还是没有搞(~ ̄▽ ̄)~