Docker部署邮件服务器

Docker部署邮件服务器

初始化配置

服务源于docker-mailserver

1
2
3
4
git clone https://github.com/docker-mailserver/docker-mailserver.git
# 所需文件
- docker-compose.yml 容器部署文件
- setup.sh 服务配置脚本

修改docker-compose.yml

 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
33
34
35
36
version: '3.8'

services:
  mailserver:
    image: docker.io/mailserver/docker-mailserver:latest
    container_name: mailserver
    hostname: mail
    # 更改为自己的域名
    domainname: cetacean.top
    ports:
      - "25:25"
      - "193:193"
      - "993:993"
      - "587:587"
      - "465:465"
    volumes:
      - /home/dms/mail-data/:/var/mail/
      - /home/dms/mail-state/:/var/mail-state/
      - /home/dms/mail-logs/:/var/log/mail/
      - /home/dms/config/:/tmp/docker-mailserver/
      # ssl证书
      - /etc/letsencrypt/:/etc/letsencrypt/
      - /etc/localtime:/etc/localtime:ro
    environment:
      - ENABLE_FAIL2BAN=1
      # 可选ssl证书类型
      - SSL_TYPE=letsencrypt
      - PERMIT_DOCKER=network
      - ONE_DIR=1
      - ENABLE_POSTGREY=0
      - ENABLE_CLAMAV=0
      - ENABLE_SPAMASSASSIN=0
      - SPOOF_PROTECTION=0
    cap_add:
      - NET_ADMIN
      - SYS_PTRACE

开放端口

需要开放[25,193,993,465,587]这几个端口,以下以ufw举例,具体开放防火墙请自行Google

1
2
3
4
5
ufw allow 25
ufw allow 193
ufw allow 993
ufw allow 465
ufw allow 587

域名DNS解析及SSL证书申请

添加DNS解析

前往你域名的服务商添加以下DNS解析

类型记录名记录值
Amailxxx.xxx.xxx.xxx(自己服务器的ip)
MX@mail.example.com(mail.<域名>); 优先级选10
TXT@v=spf1 mx ~all
TXT_dmarcv=DMARC1; p=quarantine; rua=mailto:dmarc.report@example.com; ruf=mailto:dmarc.report@example.com; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=quarantine(内有两个需要改为自己的域名)

使用certbot申请证书

1
2
apt install -y certbot
certbot certonly --manual --preferred-challenge dns -d  mail.example.com

解析验证

使用dig验证解析是否生效

1
2
apt-get install dnsutils
dig TXT _acme-challenge.mail.example.com

/posts/mailserver/pic01.png

配置续签证书

使用crontab添加定时任务

1
2
3
crontab -e
# 添加如下
0 5 * * 1 /usr/bin/certbot renew --quiet

Docker-compose部署

1
2
docker-compose up -d
docker-compose logs -f # 查看容器日志

项目配置

创建user

1
2
3
./setup.sh email add admin@example.com "xxx" # 添加账号密码
# 其他功能参见help
./setup.sh help

生成DKIM签名记录

1
2
3
4
./setup.sh config dkim keysize 2048
cat config/opendkim/keys/example.com/mail.txt
# 截取格式如下
v=DKIM1;h=sha256;k=rsa;p=xxx

同样添加到DNS解析中

类型记录名记录值
TXTmail._domainkeyv=DKIM1;h=sha256;k=rsa;p=xxx

ssl验证测试

测试是否以加上证书

/posts/mailserver/pic02.png

客户端安装

eM Client

下载安装并添加账号

/posts/mailserver/pic03.png

鸣谢