轻松打造你的专属邮件服务器一款最牛逼的poste.io了
第1集 前置准备条件
准备条件
- 一台VPS
- 一个域名
本次演示使用的是centos7.9
检查VPS是否开通了25端口
我们搭建邮件服务器,要开通25端口,那么怎么查看自己的VPS是否开通了25端口呢,咱们可以通过以下命令进行查看
#安装telnet命令
yum install -y telnet
#测试25端口是否开启
telnet smtp.qq.com 25
-
未开通,如下图所示
-
已开通
Docker环境安装
Docker安装可以参考这篇文章Docker轻松入门,玩转实战技巧,非常适合新手小白
测试你发出邮件的垃圾邮件匹配度 https://www.mail-tester.com/
第2集 基于poste.io搭建企业邮局
poste.io介绍
首先要知道,搭建企业邮箱即可拥有自己的域名后缀邮箱,自定义邮件地址,什么admin,root,info都是随便用的。Poste.io官网:https://poste.io/ 文档:https://poste.io/doc/
Poste.io 是一个电子邮件服务器解决方案,旨在提供简单且安全的电子邮件系统。它提供了一个完整的邮件服务器堆栈,包括邮件传输代理(MTA)、邮件传输代理(IMAP/POP3)和邮件过滤器。Poste.io 的设计目标是易于部署和管理,并且适用于个人用户、小型企业和中小型组织。
Poste.io 提供了一个直观的 Web 界面,使用户可以轻松设置和管理他们的邮件服务器。它支持多个域名和用户帐户,并提供了用户管理、电子邮件过滤、垃圾邮件和病毒检测等功能。此外,Poste.io 还集成了基于网页的电子邮件客户端,使用户能够通过 Web 浏览器访问和发送电子邮件。
poste.io 开放的端口
Port number | Purpose |
---|---|
25 | SMTP - 主要处理来自远程邮件服务器的传入邮件 |
80 | HTTP - r重定向到 https(请参阅选项)和 Let’s encrypt 服务的身份验证 |
110 | POP3 -访问邮箱的标准协议,客户端验证之前需要STARTTLS |
143 | IMAP - 访问邮箱的标准协议,客户端身份验证之前需要 STARTTLS |
443 | HTTPS - 访问管理或网络邮件客户端 |
465 | SMTPS - Legacy SMTPs port |
587 | MSA - SMTP 端口主要由电子邮件客户端在 STARTTLS 和身份验证后使用 |
993 | IMAPS - IMAP 的替代端口,从连接开始就进行加密 |
995 | POP3S - 从连接开始就进行加密的 POP3 端口 |
4190 | Sieve - 远程筛选设置 |
-
版本分类
-
业版
poste.io/mailserver # (from https://poste.io docker server) $ docker login -u "username" -p "password" https://poste.io $ docker run \ --net=host \ -e TZ=Europe/Prague \ -v /your-data-dir/data:/data \ --name "mailserver" \ -h "mail.example.com" \ -t poste.io/mailserver
- 免费版
-
analogic/poste.io # (from https://hub.docker.com)
docker run \
--net=host \
-e TZ=Europe/Prague \
-v /your-data-dir/data:/data \
--name "mailserver" \
-h "mail.example.com" \
-t analogic/poste.io
两个版本共享相同的数据目录结构 - 使用 PRO 版本时的唯一区别是您登录到我们的私有 Docker 存储库。
-e TZ=Europe/Prague #时区设置以获得正确的日期时间
-v \*/your-data-dir/data\* :/data #从主机系统装载数据目录。用户数据库、电子邮件、日志等都将存放在该目录中,以便于备份。
--name " \*mailserver\* " #将 poste.io 作为具有定义名称的容器运行
-h "mail.example.com" #邮件服务器的主机名
-t Analogic/poste.io #图像名称,PRO 和 FREE 版本不同
-
可选参数
-e "HTTPS=OFF" #禁用所有到加密 HTTP 的重定向,如果您使用某种反向代理,则很有用(将此参数放在图像名称之前!) -e "HTTP_PORT=8080" #自定义 HTTP 端口。请注意,您需要处理端口 80 上的 Let's Encrypt 请求,因此如果您使用反向代理设置,则需要将 /.well-known/ 文件夹转发到此端口。 -e "HTTPS_PORT=4433" #自定义 HTTPS 端口。 -e "DISABLE_CLAMAV=TRUE" #要禁用 ClamAV,对于内存使用率较低的情况很有用。 -e "DISABLE_RSPAMD=TRUE" #要禁用 Rspamd,它对于低内存使用率很有用。 -e "DISABLE_ROUNDCUBE=TRUE" #禁用 Roundcube Webmail。 -e "ELASTICSEARCH=123.123.123.123:9200" # [Elasticsearch 集成](https://poste.io/doc/elasticsearch) -p 4190:4190 #如果您想使用能够在外部管理 Sieve 过滤器的客户端,您还需要打开端口 4190
当然这里用免费版就够用了,商用版需要登录poste.io镜像仓库才能拉取的
docker 搭建poste.io邮局
本次教程,我使用的vps系统为centos7.9。
- 域名解析
描述 | 主机记录 | 记录类型 | 记录值 |
---|---|---|---|
A records | A | 你的IP地址 | |
CNAME records | smtp | CNAME | mail.**.com |
CNAME records | pop | CNAME | mail.**.com |
CNAME records | imap | CNAME | mail.**.com |
MX for your domain | @ | MX | mail.**.com |
SPF记录 | @ | TXT | v=spf1 mx ~all |
DMARC记录 | _dmarc | TXT | v=DMARC1; p=none; rua=mailto:dmarc-reports@our-domain.com |
DKIM记录 |
- 设置rdns也就是这种设置 PTR 反向解析:
如果要开启rdns服务你需要让客服帮忙,所以就很遗憾了,你不能自己在后台设置ptr。当然,发工单也很简单,直接说出自己需要搭建邮件服务器需要rdns这个功能即可,客服会在后台帮你设置好的。这里贴出和客服交流开启rdns的截图:
注意:
PTR record 或 RDNS记录就是你要给自己的邮件服务器设置的域名,一般是mail.example.com或者mx.example.com。
只能客服开启rdns支持,无法后台自己设置,如果你需要修改rdns记录还需要找客服帮忙,所以有点麻烦。
mail.your-domain.com your server’s IP
mx.your-domain.com your server’s IP
客服设置rdns后可以用如下命令来测试结果。
nslookup 8.8.8.8(你服务器IP)
如果得到以下回显,就表示已经设置成功,当然了如果要在全球生效大概需要等待最多24小时。当然你也可以使用一个工具网页来测试:https://emailacademy.com/rdns-tester
[root@VM-0-3-centos ~]# nslookup mail.open1024.top
Server: 183.60.83.19
Address: 183.60.83.19#53
Non-authoritative answer:
Name: mail.open1024.top
Address: xxx.176.50.xxx
[root@VM-0-3-centos ~]# nslookup xxx.176.50.xxx
xxx.176.50.xxx.in-addr.arpa name = mail.xxx.top.
xxx.176.50.117.in-addr.arpa name = mx.xxx.top.
测试25端口是否开启,使用如下命令:
telnet smtp.qq.com 25
-
docker 安装
参考这篇教程
-
拉取镜像
docker pull analogic/poste.io
- 新建邮件目录
mkdir /home/mail/data
- 启动容器,注意这里的:mail.*.com要改成你的邮箱域名!
analogic/poste.io # (from https://hub.docker.com)
docker run \
--net=host \
-e TZ=Asia/Shanghai \
-v /home/mail/data:/data \
--name "mailserver" \
-h "mail.example.com" \
-t analogic/poste.io
#这里由于我的80、443端口被占用了,所以用其他端口代替了,后续通过nginx代理过来就可以了
docker run \
-p 25:25 -p 8880:80 -p 110:110 -p 143:143 -p 8843:443 -p 465:465 -p 587:587 -p 993:993 -p 995:995 \
-e TZ=Asia/Shanghai \
-v /opt/mailserver/data:/data \
--name "mailserver" \
-h "mail.open1024.top" \
-t -d analogic/poste.io
hostnamectl set-hostname mail.open1024.top
- 访问地址 mail.你的域名/admin/install/server(这里显示不安全,继续访问,下一步设置证书),设置域名,管理员邮箱和密码。
输入密码,提交
创建一个邮箱用户
- 在系统设置中,找到标签
TLS Certificate
,自动申请个证书。申请完证书,就可以https访问了。然后在域名详情中,点击生成redirect
,生成后添加域名DKIM 解析,例如:
设置DKM解析
s20231211429._domainkey.open1024.top. IN TXT "k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFd9t/wM2ZBkzaXn5hYsZ2GkKs6QwzqN7DmoCP4GFpWu1ZAL5lnNu8tDwuxw7ejaUR8MwyzWg7JszKXsqCxgH+DjeF9YUQhEm3XxZ/WSqwRnVR7fGHvbxBZ4NDXVdvMnAEr6BspEMYb3MJx8LO+ndlpDtKsX+NalqLhdoBwb3fLn6hTv/rqYFHXUUTXfao61M5hrnJmS+JZo5+sosFxa2pwnYCYWgjPGZLNKfrVVYSkfHMWyeYucN1iHx3W2UNyHuLs2w+rMSUxFzl5DUyxfHKsw6nYHez1y8aqf/uxBYFiYEp2Cxqx7TRlcx0cwSuzhJrHVIt2AYyTkaabGXAqqQQIDAQAB"
- 设置DNS解析
- 在邮件账户中,可以添加删除用户;服务器状态中,查看诊断,能清楚的看到服务器端口状态
- 邮箱用户登陆地址为 mail.你的域名/webmail/,可以测试发信了;
邮件跑分测试
检测邮箱健康 https://www.mail-tester.com/
得分超过5就能使用,但是要想更高一些分数,可以提交工单申请rDNS,前提是你不能发送垃圾邮件。
注意,该工具会检测你邮件存在的问题,并给出一定优化建议。当然这个工具得分并非绝对准确,结果只供参考。
客户端设置
收件服务器【IMAP】
设置 | 内容 |
---|---|
你的邮箱 | |
密码 | 你的邮箱密码 |
服务器【Host Name】 | mail.*.com |
端口【Port Number】 | 993 |
Security | SSL |
寄件服务器【IMAP】
设置 | 内容 |
---|---|
你的邮箱 | |
密码 | 你的邮箱密码 |
服务器【Host Name】 | mail.*.com |
端口【Port Number】 | 587 |
Security | SSL |
最好是再设置一下hostname
#这里使用的docker部署,直接执行 docker exec -it mailserver /bin/bash 再执行如下命令 域名替换成你自己的
hostnamectl set-hostname mail.* .com
最后
1)邮件测试,因为用的是com域名,用一些主流 作收发测试,发现没有进垃圾箱的邮件。
2)域名后缀选择,尽量选择主流域名,比如com、net、org等,少用一些非主流域名,因为可能在权重上有所区别。当然这只是建议,此外,域名注册的时间也是越长越好!!
3)一个很重要的功能rdns,这是不可或缺的,支持与否可以咨询你的服务商,该教程利用搬瓦工的vps安装是支持rdns功能的。
4)电子邮件服务器 (IP) 黑名单检查:https://mxtoolbox.com/SuperTool.aspx
5)1G内存的服务器需要设置好虚拟内存,不然运行起来很吃力!!
nginx proxy manager 配置
# ------------------------------------------------------------
# mail.open1024.top
# ------------------------------------------------------------
server {
set $forward_scheme http;
set $server "10.60.190.211";
set $port 80;
listen 80;
listen [::]:80;
server_name mail.open1024.top;
# Block Exploits
include conf.d/include/block-exploits.conf;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
access_log /data/logs/proxy-host-13_access.log proxy;
error_log /data/logs/proxy-host-13_error.log warn;
location / {
proxy_pass http://10.60.190.211:8880;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# Custom
include /data/nginx/custom/server_proxy[.]conf;
}
server {
set $forward_scheme https;
set $server "10.60.190.211";
set $port 443;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mail.open1024.top;
# Let's Encrypt SSL
include conf.d/include/letsencrypt-acme-challenge.conf;
include conf.d/include/ssl-ciphers.conf;
ssl_certificate /etc/letsencrypt/live/npm-17/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/npm-17/privkey.pem;
# Block Exploits
include conf.d/include/block-exploits.conf;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
access_log /data/logs/proxy-host-13_access.log proxy;
error_log /data/logs/proxy-host-13_error.log warn;
location / {
proxy_pass https://10.60.190.211:8843;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# Custom
include /data/nginx/custom/server_proxy[.]conf;
}
推荐阅读
欢迎关注我的公众号“JavaCodexPro”,原创技术文章第一时间推送。
↓↓↓ 点击阅读原文,直达个人博客
评论区