飞不高 发表于 2024-9-3 21:16:42

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

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/ 中
cd /opt
mkdir mailserver

2 下载必要文件

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

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 设置也是差别的
services:
mailserver:
    image: ghcr.io/docker-mailserver/docker-mailserver:latest
    container_name: mailserver
    # Provide the FQDN of your mail server here (Your DNS MX record should point to this value)
    # hostname: mail.example.com
    domainname: mail.example.com
    env_file: mailserver.env
    # More information about the mail-server ports:
    # https://docker-mailserver.github.io/docker-mailserver/latest/config/security/understanding-the-ports/
    # To avoid conflicts with yaml base-60 float, DO NOT remove the quotation marks.
    ports:
      - "25:25"    # SMTP(explicit TLS => STARTTLS, Authentication is DISABLED => use port 465/587 instead)
      - "143:143"# IMAP4 (explicit TLS => STARTTLS)
      - "465:465"# ESMTP (implicit TLS)
      - "587:587"# ESMTP (explicit TLS => STARTTLS)
      - "993:993"# IMAP4 (implicit TLS)
    volumes:
      - ./docker-data/dms/mail-data/:/var/mail/
      - ./docker-data/dms/mail-state/:/var/mail-state/
      - ./docker-data/dms/mail-logs/:/var/log/mail/
      - ./docker-data/dms/config/:/tmp/docker-mailserver/
      - /etc/localtime:/etc/localtime:ro
    environment:
    restart: always
    stop_grace_period: 1m
    # Uncomment if using `ENABLE_FAIL2BAN=1`:
    cap_add:
      - NET_ADMIN
    healthcheck:
      test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"
      timeout: 3s
      retries: 0

4 运行

# 切换目录
cd /opt/mailserver

# 启动容器-d 后台运行,初次接触安装不建议,无法便捷看到日志信息
# 建议前台,配置结束后使用后台运行
docker compose up

# docker compose up
-d
# docker-compose logs -f `# 观察容器 相关日志`

# 关闭容器
docker compose down
   Docker Mailserver规定首次运行容器时必须创建第一个邮箱账号,否则容器会自动退出
# 在启动容器时, 使用 docker ps 查看容器的 ID
docker ps

# 出现如下内容
CONTAINER ID   IMAGE                                                COMMAND                  CREATED          STATUS                  PORTS                                                                                                                                                                                                                     NAMES
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

# 添加第一个邮箱账号
# docker exec -it <CONTAINER NAME> setup email add user@example.com<your password>

# 使用裸域安装(与compose.yml配置文件选择安装方式一致)
docker exec -it 318bbf389f9c setup email add user@example.com<your password>

# 使用子域安装(与compose.yml配置文件选择安装方式一致)
docker exec -it 318bbf389f9c setup email add user@mail.example.com<your password>


# 查看邮箱账号列表
docker exec -it 318bbf389f9c setup email list
# 其他命令可通过 help查看
docker exec -it 318bbf389f9c setup email help
......

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

   DKIM 查抄器
DKIM天生器

1 天生 DKIM 署名

docker exec -it <CONTAINER NAME> setup config dkim
利用下面命令获取署名公钥, 记得路径中的域名替换成你本身的
# cat /opt/mailserver/docker-data/dms/config/opendkim/keys/mail.example.com/mail.txt

mail._domainkey IN      TXT   ( "v=DKIM1; h=sha256; k=rsa; "
      "p=MIIBIjANBgkqhkiG9w0BAQEFACAQ8AMIIBCgKCAQEAaH5KuPYPSF3Ppkt466BDMAFGOA4mgqn4oPjZ5BbFlYA9l5jU3bgzRj3l6/Q1n5a9lQs5fNZ7A/HtY0aMvs3nGE4oi+LTejt1jblMhV/OfJyRCunQBIGp0s8G9kIUBzyKJpDayk2+KJSJt/lxL9Iiy0DE5hIv62ZPP6AaTdHBAsJosLFeAzuLFHQ6USyQRojefqFQtgYqWQ2JiZQ3"
      "iqq3bD/BVlwKRp5gH6TEYEmx8EBJUuDxrJhkWRUk2VDl1fqhVBy8A9O7Ah+85nMrlOHIFsTaYo9o6+cDJ6t1i6G1gu+bZD0d3/3bqGLPBQV9LyEL1Rona5V7TJBGg099NQkTz1IwIDAQAB" ); ----- DKIM key mail for mail.example.com
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 的验证结果进行汇总和分析,并指定怎样处置惩罚未经验证或验证失败的邮件。
天生器
这里给个通用的最低策略,差别的策略可利用天生器自行天生
裸域安装
请公布以下内容 DNS TXT 记录子域上的_dmarc.example.com

记录类型:TXT
主机:_dmarc
记录值:v=DMARC1; p=none; sp=none;
子域安装
请公布以下内容 DNS TXT 记录子域上的_dmarc.mail.example.com

记录类型:TXT
主机:_dmarc.mail
记录值: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 是收费的,这里就不搞了,有兴趣的可以本身实验实验,艾特一下让我也学习学习
页: [1]
查看完整版本: 利用Docker Mailserver 搭建本身的邮件服务