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/ 中
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
复制代码 利用下面命令获取署名公钥, 记得路径中的域名替换成你本身的
- [nukix@nukixPC mailserver]# 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 是收费的,这里就不搞了,有兴趣的可以本身实验实验,艾特一下让我也学习学习 |