dockermailserver搭建

源代码下载 git项目地址

1. 域名解析

​ 域名解析一共需要解析六条数据包括一条A记录,MX记录,和4条TXT记录

  1. A记录,mail指向自己得服务器IP,NAME: mail ,CONTENT: <公网IP>(同时需要在VPS上配置rDNS,用于防止垃圾邮件过滤)
  2. MX记录 NAME: @ , CONTENT: <完整二级域名>,eg: mail.example.com 优先级为10
  3. TXT SPF记录,NAME: @, CONTENT: v=spf1 mx -all
  4. TXT _dmarx记录, NAME: _dmarc CONTEXT: v=DMARC1; p=reject; adkim=s; aspf=s
  5. 证书TXT解析 acme-challenge.mail 记录,需要动态生成 NAME: _acme-challenge.mail , CONTENT: <动态生成>, eg: I9zcK5Us5ae6sUaxczP5GH9lHqiasoxvcJTGGckhQAw
  6. DKIM解析 ,NAME: mail._domainkey , CONTENT: <动态生成> ,eg: v=DKIM1;h=sha256;k=rsa;p=MIIBIjANBgkqhkiG9w

image-20240108004352856

2.需要将主机名修改为邮件服务器域名

1
2
3
4
5
6
$ sudo vim /etc/hostname
# 使系统正确解析主句名 eg: mail.example.com
$ sudo vim /etc/hosts
$ sudo reboot
# 查看是否修改成功
$ hostnamectl

3.安装证书

  1. 使用certbot安装 邮件域名证书
  2. linux命令操作为certbot certonly --manual --preferred-challenge dns -d mail.example.com
  3. 通过该命令手动生成证书,为打印出acme-challenge.mail 的值,将该值在cf中进行解析
  4. 生成的密钥会放置在/etc/letencrypt/ 目录中

image-20240108005019983

4.配置docker-compose.yaml文件并运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 # ! ----------修改为自己的域名---------
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
- /etc/letsencrypt/:/etc/letsencrypt/ # -------!添加证书位置映射------------
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
  • 使用命令 docker-compose up -d运行
  • 查看日志 docker-compose logs -f

5.添加用户

  • 使用命令docker exec -ti <CONTAINER NAME> setup email add <NEW ADDRESS>
  • 或者./setup.sh email add [email protected] <password>
  • 修改密码./setup.sh email update [email protected] <newpassword>

6.添加DKIM解析

通过命令 docker exec -it <CONTAINER NAME> setup config dkim

或者./setup.sh config dkim keysize 2048生成dkim解析内容

解析对在./docker-data/dms/config/opendkim/keys/example.com/mail.txt文件中

1
2
3
4
# 请注意删除"号
NAME: mail._domainkey

CONTENT: v=DKIM1;h=sha256;k=rsa;p=MIIBIjANBgkqhkiG9w0BA.....

7.使用邮件客户端验证

  • 可以使用eM邮件客户端进行邮件发送与接收的验证。注意下载Windows版本
  • 直接输入账户密码登陆即可,无语手动设置

image-20240108011321982

8.邮件评分测试

  1. TXT解析测试

    1
    2
    $ nslookup -type=txt _dmarc.aigpt.asia
    $ nslookup -type=mx aigpt.asia
  2. 邮件性能测试

  3. SSL测试

9.其他可选添加(增加邮件服务器评分)

  1. 在VPS中设置PTR反向解析

  2. 开发25端口

  3. 添加邮件转发

1
2
3
4
5
6
7
8
9
# 添加[email protected] 可以接受其他用户邮件
./setup.sh alias add @example.com [email protected]
# 查看列表, 实际记录在 docker-data/dms/config/postfix-virtual.cf
./setup.sh alias list


#如果需要test账号自己也能接收到,需要添加自己, 否则自己收不到
./setup.sh alias add test@example.com test@example.com
./setup.sh alias add test@example.com [email protected]