利用Docker Mailserver 搭建本身的邮件服务

打印 上一主题 下一主题

主题 548|帖子 548|积分 1644

Docker Mailserver 官网
Docker Mailserver 仓库
  
前提

一个固有公网 IP 的 VPS 与域名
当然有条件的尽可能选择国外的服务器厂商和域名,因为国内的大部分都是封锁出站 25 端口同时域名也需要备案。
在服务器商那里开放25、143、465、587、993端口
tips:封锁 25 出站端口为后续的发送邮件功能产生了不少的麻烦。
这里介绍公网 IP 为1.2.3.4域名为example.com后续修改配置文件,可替换成本身的 IP 和域名

安装

   需要安装 Docker 与 Docker compose,这里就不多介绍了。可在其他博客中查看。教程正在 loading
  
1 创建安装目录

   位置自定义,软件本人一样平常都安装在 /opt/ 中
  1. cd /opt
  2. mkdir mailserver
复制代码

2 下载必要文件

   利用 wget 下载compose.yml与mailserver.env配置文件
也可以从 github 的仓库中下载好上传到服务器中
  1. wget -P /opt/mailserver/ "https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/compose.yaml"
  2. wget -P /opt/mailserver/ "https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/mailserver.env"
复制代码

3 编辑配置文件

编辑compose.yml文件,修改为本身的域名与证书
   这里分为两种情况
  

  • 裸域安装:裸域安装的相关文件可在官网查看,简单来说就是邮件地址为test@example.com
  • 子域安装:利用子域名,比方mail.example.com,邮件地址就为test@mail.example.com
  如果选择裸域安装则修改homename并排除解释
   如果选择子域名安装修改domainname并排除解释
选择差别的安装方式后续的 DNS 设置也是差别的
  1. services:
  2.   mailserver:
  3.     image: ghcr.io/docker-mailserver/docker-mailserver:latest
  4.     container_name: mailserver
  5.     # Provide the FQDN of your mail server here (Your DNS MX record should point to this value)
  6.     # hostname: mail.example.com
  7.     domainname: mail.example.com
  8.     env_file: mailserver.env
  9.     # More information about the mail-server ports:
  10.     # https://docker-mailserver.github.io/docker-mailserver/latest/config/security/understanding-the-ports/
  11.     # To avoid conflicts with yaml base-60 float, DO NOT remove the quotation marks.
  12.     ports:
  13.       - "25:25"    # SMTP  (explicit TLS => STARTTLS, Authentication is DISABLED => use port 465/587 instead)
  14.       - "143:143"  # IMAP4 (explicit TLS => STARTTLS)
  15.       - "465:465"  # ESMTP (implicit TLS)
  16.       - "587:587"  # ESMTP (explicit TLS => STARTTLS)
  17.       - "993:993"  # IMAP4 (implicit TLS)
  18.     volumes:
  19.       - ./docker-data/dms/mail-data/:/var/mail/
  20.       - ./docker-data/dms/mail-state/:/var/mail-state/
  21.       - ./docker-data/dms/mail-logs/:/var/log/mail/
  22.       - ./docker-data/dms/config/:/tmp/docker-mailserver/
  23.       - /etc/localtime:/etc/localtime:ro
  24.     environment:
  25.     restart: always
  26.     stop_grace_period: 1m
  27.     # Uncomment if using `ENABLE_FAIL2BAN=1`:
  28.     cap_add:
  29.       - NET_ADMIN
  30.     healthcheck:
  31.       test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"
  32.       timeout: 3s
  33.       retries: 0
复制代码

4 运行

  1. # 切换目录
  2. cd /opt/mailserver
  3. # 启动容器  -d 后台运行,初次接触安装不建议,无法便捷看到日志信息
  4. # 建议前台,配置结束后使用后台运行
  5. docker compose up
  6. # docker compose up
  7. -d
  8. # docker-compose logs -f `# 观察容器 相关日志`
  9. # 关闭容器
  10. docker compose down
复制代码
  Docker Mailserver规定首次运行容器时必须创建第一个邮箱账号,否则容器会自动退出
  1. # 在启动容器时, 使用 docker ps 查看容器的 ID
  2. docker ps
  3. # 出现如下内容
  4. CONTAINER ID   IMAGE                                                COMMAND                  CREATED          STATUS                    PORTS                                                                                                                                                                                                                       NAMES
  5. 318bbf389f9c   ghcr.io/docker-mailserver/docker-mailserver:latest   "/usr/bin/dumb-init …"   31 seconds ago   Up 30 seconds (healthy)   0.0.0.0:25->25/tcp, :::25->25/tcp, 0.0.0.0:143->143/tcp, :::143->143/tcp, 0.0.0.0:465->465/tcp, :::465->465/tcp, 0.0.0.0:587->587/tcp, :::587->587/tcp, 110/tcp, 995/tcp, 0.0.0.0:993->993/tcp, :::993->993/tcp, 4190/tcp   mailserver
  6. # 添加第一个邮箱账号
  7. # docker exec -it <CONTAINER NAME> setup email add user@example.com  <your password>
  8. # 使用裸域安装(与compose.yml配置文件选择安装方式一致)
  9. docker exec -it 318bbf389f9c setup email add user@example.com  <your password>
  10. # 使用子域安装(与compose.yml配置文件选择安装方式一致)
  11. docker exec -it 318bbf389f9c setup email add user@mail.example.com  <your password>
  12. # 查看邮箱账号列表
  13. docker exec -it 318bbf389f9c setup email list
  14. # 其他命令可通过 help查看
  15. docker exec -it 318bbf389f9c setup email help
  16. ......
复制代码

5 配置 DNS(以腾讯 DNS 为例)

   DKIM 查抄器
DKIM天生器
  
1 天生 DKIM 署名

  1. docker exec -it <CONTAINER NAME> setup config dkim
复制代码
利用下面命令获取署名公钥, 记得路径中的域名替换成你本身的
  1. [nukix@nukixPC mailserver]# cat /opt/mailserver/docker-data/dms/config/opendkim/keys/mail.example.com/mail.txt
  2. mail._domainkey IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; "
  3.         "p=MIIBIjANBgkqhkiG9w0BAQEFACAQ8AMIIBCgKCAQEAaH5KuPYPSF3Ppkt466BDMAFGOA4mgqn4oPjZ5BbFlYA9l5jU3bgzRj3l6/Q1n5a9lQs5fNZ7A/HtY0aMvs3nGE4oi+LTejt1jblMhV/OfJyRCunQBIGp0s8G9kIUBzyKJpDayk2+KJSJt/lxL9Iiy0DE5hIv62ZPP6AaTdHBAsJosLFeAzuLFHQ6USyQRojefqFQtgYqWQ2JiZQ3"
  4.         "iqq3bD/BVlwKRp5gH6TEYEmx8EBJUuDxrJhkWRUk2VDl1fqhVBy8A9O7Ah+85nMrlOHIFsTaYo9o6+cDJ6t1i6G1gu+bZD0d3/3bqGLPBQV9LyEL1Rona5V7TJBGg099NQkTz1IwIDAQAB" )  ; ----- DKIM key mail for mail.example.com
复制代码
  1. v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFACAQ8AMIIBCgKCAQEAaH5KuPYPSF3Ppkt466BDMAFGOA4mgqn4oPjZ5BbFlYA9l5jU3bgzRj3l6/Q1n5a9lQs5fNZ7A/HtY0aMvs3nGE4oi+LTejt1jblMhV/OfJyRCunQBIGp0s8G9kIUBzyKJpDayk2+KJSJt/lxL9Iiy0DE5hIv62ZPP6AaTdHBAsJosLFeAzuLFHQ6USyQRojefqFQtgYqWQ2JiZQ3iqq3bD/BVlwKRp5gH6TEYEmx8EBJUuDxrJhkWRUk2VDl1fqhVBy8A9O7Ah+85nMrlOHIFsTaYo9o6+cDJ6t1i6G1gu+bZD0d3/3bqGLPBQV9LyEL1Rona5V7TJBGg099NQkTz1IwIDAQAB
复制代码

2 添加 DMARC 记载(可选)

   DMARC(Domain-based Message Authentication, Reporting, and Conformance)是一种邮件验证技能,它可以帮助域名所有者控制其域名下的邮件发送,防止电子邮件被伪造和滥用。DMARC 是 SPF 和 DKIM 的补充,可以对 SPF 和 DKIM 的验证结果进行汇总和分析,并指定怎样处置惩罚未经验证或验证失败的邮件。
天生器
这里给个通用的最低策略,差别的策略可利用天生器自行天生
  裸域安装
  1. 请公布以下内容 DNS TXT 记录子域上的_dmarc.example.com
  2. 记录类型:TXT
  3. 主机:_dmarc
  4. 记录值:v=DMARC1; p=none; sp=none;
复制代码
子域安装
  1. 请公布以下内容 DNS TXT 记录子域上的_dmarc.mail.example.com
  2. 记录类型:TXT
  3. 主机:_dmarc.mail
  4. 记录值:v=DMARC1; p=none; sp=none;
复制代码

3 配置域名 DNS 剖析

裸域安装实例:
主机记载值记载类型记载值备注mailA e.g:1.2.3.4记载值为本身的 IP 地址@MAXmail.example.com记载值为本身的域名@TXTv=spf1 mx ~all_dmarcTXTv=DMARC1; p=none; sp=none;mail._domainkeyTXT< 替换本身天生的 DKIM >参考上面进行拼接 子域安装
主机记载值记载类型记载值备注mailA e.g:1.2.3.4记载值为本身的 IP 地址mailMAXmail.example.com记载值为本身的域名mailTXTv=spf1 mx ~all_dmarc.mailTXTv=DMARC1; p=none; sp=none;mail._domainkey.mailTXT< 替换本身天生的 DKIM >参考上面进行拼接 此中 MX 记载需要指向 A 地址。


  • v=spf1 表示这是 SPF 记载的版本号,目前只有一个版本
  • mx 表示授权由域名对应的 MX 记载中列出的 IP 地址发送邮件
  • SoftFail 和 HardFail 是两种策略,用于指定未经授权的发件人邮件怎样处置惩罚

    • ~all 宽容策略。如果发件人的 IP 地址不在 SPF 记载中指定的允许列表中,那么收件方的邮件服务器不会拒绝该邮件,而是将该邮件标记为“软失败”,并将其放入接收方的垃圾邮件文件夹或者标记为垃圾邮件。
    • -all 严酷策略。如果发件人的IP地址不在 SPF 记载中指定的允许列表中,那么收件方的邮件服务器会拒绝该邮件,并将其退回给发件人或者直接删除

   更多的 SPF 语法规则可以看这里 http://www.open-spf.org/SPF_Record_Syntax/。
  
4 设置 RTP(rDNS)(可选)

设置 PTR 记载(或者叫 rDNS),可以通过 IP 地址反向剖析出邮箱域名。 不设置也没关系,但是会被某些服务器标记为垃圾邮件。rDNS 重要在控制台进行配置,可能有些厂商设置 RTP 是收费的,这里就不搞了,有兴趣的可以本身实验实验,艾特一下让我也学习学习

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表