lisa主机lisa主机

使用Docker搭建poste,自建邮件服务器

发布于:2021-06-23 Linux运维 14条评论

自建邮件服务可以不受发件量限制,批量发件成本更低,但部署相对复杂,而且容易进垃圾箱。不过现在越来越多的服务商已经开发好了产品,支持一键部署等方式,极大降低了部署和使用难度。这次给各位小伙伴安利一款开源邮件服务poste.

关于poste

poste是一款开源邮件服务软件,可以很方便的搭建:SMTP + IMAP + POP3 + 反垃圾邮件 + 防病毒 + Web 管理 + Web 电子邮件,支持以下特性。

  • SPF、DKIM、DMARC、SRS 的原生实现,带有简单的向导
  • 用于检测木马、病毒、恶意软件的防病毒引擎 ( ClamAV )
  • 内置垃圾邮件过滤器( RSPAMD )
  • HTTPS 上的Webmail 客户端(Roundcube)
  • 通过Sieve 脚本进行电子邮件重定向、自动回复和其他过滤(电子邮件所有者管理,每个操作都可以编写脚本)
  • 用于限制邮箱空间或电子邮件数量的配额
  • 系统管理员、域管理员、电子邮件所有者具有不同权限的Web 管理。
  • 内置Microsoft 产品的自动发现功能,Thunderbird...
  • 帮助正确设置域和邮件服务器的诊断
  • SMTP - 端口 25、465 (TLS)、587
  • POP3 - 端口 110、995 (TLS)
  • IMAP - 端口 143、993 (TLS)
  • SSL TLS无处不在!没有个人数据、电子邮件、登录信息通过互联网未加密。
  • 默认情况下,所有密码都存储为加盐SHA512哈希(5000 轮)。攻击者将很难破解您的密码。
  • 整个邮件服务器容器由 Docker 与其他应用程序隔离。

准备工作

  • 一台VPS,有独立IP
  • 支持25端口及邮件发送
  • 建议内存2Gb以上
  • 干净的IP,没有被墙,没有被标记为垃圾IP
  • 提前安装好Docker

关于Docker安装可参考这篇文章《Linux安装Docker与Docker常用命令》,如果您使用的CentOS 7系统,也可以直接使用xiaoz提供的Docker一键安装脚本。

#CentOS一键安装Docker
wget https://raw.githubusercontent.com/helloxz/shell/master/install_docker.sh && bash install_docker.sh

Docker部署poste

Docker部署poste,几乎不会影响你服务器上现有的服务,复制下面的命令执行:

docker run -d \
    -p 880:80 -p 8443:443 -p 25:25 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 -p 995:995 -p 4190:4190 \
    -e TZ=Asia/Shanghai \
    -v /data/mail-data:/data \
    --name "mailserver" \
    -h "mail.your-domain.com" \
    --restart=always \
    -t analogic/poste.io

参数含义如下:

  • 880/8443是WEB访问端口,为了避免和本地已有WEB服务(nginx等)冲突,所以这里使用的880/8443作为WEB端口
  • TZ=Asia/Shanghai:设置容器为上海时区
  • /data/mail-data:本地数据目录,根据实际情况修改为服务器目录
  • mail.xxx.com:改成你自己的域名
  • --restart=always:容器异常时自动拉起

如果部署遇到25端口被占用,可通过netstat -apn|grep 25查看是否是postfix导致,CentOS 7可卸载postfix:

#卸载postfix
yum -y remove postfix

部署后访问https://IP:8443/根据提示完成初始化设置。

DNS设置

前往DNS服务商处,按照如下要求设置域名解析,否则邮件服务无法正常使用,其中:

  • your-domain.com:为你自己的域名
  • 1.2.3.4:为你的邮件服务器IP
主机名记录类型记录值
mail.your-domain.comA1.2.3.4
smtp.your-domain.comCNAMEmail.your-domain.com
pop.your-domain.comCNAMEmail.your-domain.com
imap.your-domain.comCNAMEmail.your-domain.com
your-domain.comMXmail.your-domain.com
your-domain.comtxtv=spf1 mx ~all

设置DKIM验证

在poste后台 - Virtual domains - 点击对应域名 - DKIM key - 创建key,并按照要求设置txt记录解析。

设置PTR反向解析

PTR记录,是电子邮件系统中的邮件交换记录的一种;另一种邮件交换记录是A记录(在IPv4协议中)或AAAA记录(在IPv6协议中)。PTR记录常被用于反向地址解析。——摘自百度百科

域名解析到IP被称为正向解析,而IP指向到域名,则被称为反向解析,反向解析需要在主机服务商处进行操作,具体请咨询主机服务商。

比如UltraVPS可以直接在后台面板添加PTR反向解析,将IP指向到您的邮件服务器,如mail.your-domain.com

添加SPF/DKIM/PTR解析,可提高邮件可信度,从而降低邮件进入垃圾箱的几率,必不可少的关键步骤。

设置TLS SSL

假如您的邮件域名为mail.your-domain.com,需要对这个域名申请SSL证书,可参考《使用acme.sh申请ZeroSSL泛域名证书,Let’s Encrypt替代品》或者在其它服务商申请SSL证书。

获得SSL证书后,打开poste后台 - System settings - TLS Certificate - 选择证书文件进行上传,见截图。

SSL提供商会自动将中级证书合并到了证书文件(比如腾讯云),因此中级证书那个选项可以和证书一致,然后点保存,保存后需要重启容器生效:docker restart mailserver

登录与管理

启用SSL后,可通过域名进行访问:https://mail.your-domain.com:8443/,默认是登录webmail,可以在webmail发信、收信等操作。

如果需要登录系统管理,可将地址修改为https://mail.your-domain.com:8443/admin/login

邮件跑分测试

邮件跑分可以使用https://www.mail-tester.com/这个工具,会检测你邮件存在的问题,并给出一定优化建议。当然这个工具得分并非绝对准确,结果只供参考。

个人建议

在准备自建邮件服务之前,有一些注意事项需要知晓,以下是一些个人经验总结,希望有所帮助。

  • 使用可信度较高的域名后缀,如.com/.net/.org,尽量避免使用各种奇怪的小众后缀
  • 使用英文字母的域名,尽量避免使用纯数字域名
  • 域名注册时间越长越好,最低注册时间建议大于7天
  • 使用一个干净的IP,可通过https://poste.io/dnsbl查询
  • IP支持PTR反向解析,需咨询主机商

最后

poste相比其它自建邮件服务已经算比较简单的了,但步骤依然比较多。目前给其它小伙伴搭建的poste,测试过一天发送1w邮件完全没有问题,但如果长期大量发送垃圾邮件,估计离拉黑也不远了,所以建议大家还是悠着点玩儿。

poste官网:https://poste.io/

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


已有 14 条评论

  1. HAX

    500错误是怎么了

    1. xiaoz HAX

      要看下容器的日志。

  2. xiaox

    官方文档上写 不要使用25端口,但是我把25端口禁用只打开587端口就收不到邮件,大佬是咋解决的呀。。我用的腾讯云

    1. xiaoz xiaox

      看下日志有没有什么报错。

      1. xiaox xiaoz

        哈 感谢大佬 我看明白了 25端口还是要打开用来收邮件的 官网是建议发邮件不用25端口。。我猜应该是这样🤣

  3. lancger

    Diagnostic-Code: smtp;550 Too many received headers – possible mail loop 一直发送失败,这是什么原因呢,大佬

    1. xiaoz lancger

      你邮件的量很大吗?从我的使用来看,如果邮件量很大,这玩意不太合适,不是很稳定,少量邮件还行。

  4. BeyondIM

    自建了一段时间,使用下来,感觉还是得不偿失,部分邮件发不出去,比如 outlook。
    目前在用阿里的服务,一个月1000的免费额度虽然不高,但是邮件投递率高了很多

    1. xiaoz BeyondIM

      1. 无法投递outlook要根据具体日志和报错来查了
      2. 商业服务肯定质量更好,自建的好处是量大的情况下成本更低,量少的话确实直接用服务商的就行了。

    2. 123 BeyondIM

      poste 不用pull就能部署吗?

      1. xiaoz 123

        docker run的时候如果本地不存在镜像会自动拉取(docker pull),docker特性就是这样的。