目 录CONTENT

文章目录

轻松打造你的专属邮件服务器一款最牛逼的poste.io了

Eric
2023-12-12 / 0 评论 / 0 点赞 / 79 阅读 / 2,993 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

轻松打造你的专属邮件服务器一款最牛逼的poste.io了

poste.io

第1集 前置准备条件

准备条件

  1. 一台VPS
  2. 一个域名

本次演示使用的是centos7.9

检查VPS是否开通了25端口

我们搭建邮件服务器,要开通25端口,那么怎么查看自己的VPS是否开通了25端口呢,咱们可以通过以下命令进行查看

#安装telnet命令
yum install -y telnet
#测试25端口是否开启
telnet smtp.qq.com 25
  • 未开通,如下图所示

    image-20231211201837281

  • 已开通

    image-20231211201907954

Docker环境安装

Docker安装可以参考这篇文章Docker轻松入门,玩转实战技巧,非常适合新手小白

测试你发出邮件的垃圾邮件匹配度 https://www.mail-tester.com/

image-20231211203018982

第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 网络管理

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。

  1. 域名解析
描述 主机记录 记录类型 记录值
A records mail 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记录
  1. 设置rdns也就是这种设置 PTR 反向解析

如果要开启rdns服务你需要让客服帮忙,所以就很遗憾了,你不能自己在后台设置ptr。当然,发工单也很简单,直接说出自己需要搭建邮件服务器需要rdns这个功能即可,客服会在后台帮你设置好的。这里贴出和客服交流开启rdns的截图:

image-20231212082503264

注意:

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
  1. docker 安装

    参考这篇教程

  2. 拉取镜像

docker pull analogic/poste.io
  1. 新建邮件目录
mkdir /home/mail/data
  1. 启动容器,注意这里的: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
  1. 访问地址 mail.你的域名/admin/install/server(这里显示不安全,继续访问,下一步设置证书),设置域名,管理员邮箱和密码。

image-20231211211138681

输入密码,提交

image-20231211210950237

创建一个邮箱用户

image-20231211212138734

image-20231211212105595

  1. 在系统设置中,找到标签TLS Certificate,自动申请个证书。申请完证书,就可以https访问了。然后在域名详情中,点击生成redirect,生成后添加域名DKIM 解析,例如:

设置DKM解析

image-20231211212507860

image-20231211212641069

image-20231211212700307

s20231211429._domainkey.open1024.top. IN TXT "k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFd9t/wM2ZBkzaXn5hYsZ2GkKs6QwzqN7DmoCP4GFpWu1ZAL5lnNu8tDwuxw7ejaUR8MwyzWg7JszKXsqCxgH+DjeF9YUQhEm3XxZ/WSqwRnVR7fGHvbxBZ4NDXVdvMnAEr6BspEMYb3MJx8LO+ndlpDtKsX+NalqLhdoBwb3fLn6hTv/rqYFHXUUTXfao61M5hrnJmS+JZo5+sosFxa2pwnYCYWgjPGZLNKfrVVYSkfHMWyeYucN1iHx3W2UNyHuLs2w+rMSUxFzl5DUyxfHKsw6nYHez1y8aqf/uxBYFiYEp2Cxqx7TRlcx0cwSuzhJrHVIt2AYyTkaabGXAqqQQIDAQAB"
  1. 设置DNS解析

image-20231211212819806

  1. 在邮件账户中,可以添加删除用户;服务器状态中,查看诊断,能清楚的看到服务器端口状态

image-20231211214731529

image-20231211214956850

image-20231211215014548

  1. 邮箱用户登陆地址为 mail.你的域名/webmail/,可以测试发信了;

image-20231211215204400

image-20231211215233239

image-20231211215346134

邮件跑分测试

检测邮箱健康 https://www.mail-tester.com/

得分超过5就能使用,但是要想更高一些分数,可以提交工单申请rDNS,前提是你不能发送垃圾邮件。

注意,该工具会检测你邮件存在的问题,并给出一定优化建议。当然这个工具得分并非绝对准确,结果只供参考。

image-20231212133456198

客户端设置

收件服务器【IMAP】

设置 内容
EMAIL 你的邮箱
密码 你的邮箱密码
服务器【Host Name】 mail.*.com
端口【Port Number】 993
Security SSL

寄件服务器【IMAP】

设置 内容
EMAIL 你的邮箱
密码 你的邮箱密码
服务器【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”,原创技术文章第一时间推送。

↓↓↓ 点击阅读原文,直达个人博客

0

评论区