一、设置主机名

例如邮局域名为 mail.example.com

1. 编辑 /etc/hosts

增加如下内容

127.0.0.1 mail.example.com mail localhost localhost.localdomain

注意:CentOS可能需要根据 hosts 文件头部注释指示同时修改 /etc/cloud/templates/hosts.redhat.tmpl 文件,否则重启后 hosts 文件会被恢复

2. 编辑 /etc/hostname

修改内容为

mail

3. 重启并检查设置

reboot

执行 hostname 指令返回 mail执行 hostname -f 指令返回 mail.example.com

才是配置正确。

二、配置并创建容器

1. 创建初始化配置文件

执行以下指令准备初始化配置文件

# 创建目录
mkdir /iredmail
cd /iredmail
touch iredmail-docker.conf

echo HOSTNAME=mail.example.com >> iredmail-docker.conf
echo FIRST_MAIL_DOMAIN=example.com >> iredmail-docker.conf
# 管理员 postmaster@example.com 账户的密码
echo FIRST_MAIL_DOMAIN_ADMIN_PASSWORD=my-secret-password >> iredmail-docker.conf
echo MLMMJADMIN_API_TOKEN=$(openssl rand -base64 32) >> iredmail-docker.conf
echo ROUNDCUBE_DES_KEY=$(openssl rand -base64 24) >> iredmail-docker.conf

# 创建数据存储目录
mkdir -p data/{backup-mysql,clamav,custom,imapsieve_copy,mailboxes,mlmmj,mlmmj-archive,mysql,sa_rules,ssl,postfix_queue}

2. 创建并启动容器

docker run \
    -d \
    --restart=always \
    --name iredmail \
    --env-file /iredmail/iredmail-docker.conf \
    --hostname mail.example.me \
    -p 10080:80 \
    -p 10443:443 \
    -p 110:110 \
    -p 995:995 \
    -p 143:143 \
    -p 993:993 \
    -p 25:25 \
    -p 465:465 \
    -p 587:587 \
    -v /iredmail/data/backup-mysql:/var/vmail/backup/mysql \
    -v /iredmail/data/mailboxes:/var/vmail/vmail1 \
    -v /iredmail/data/mlmmj:/var/vmail/mlmmj \
    -v /iredmail/data/mlmmj-archive:/var/vmail/mlmmj-archive \
    -v /iredmail/data/imapsieve_copy:/var/vmail/imapsieve_copy \
    -v /iredmail/data/custom:/opt/iredmail/custom \
    -v /iredmail/data/ssl:/opt/iredmail/ssl \
    -v /iredmail/data/mysql:/var/lib/mysql \
    -v /iredmail/data/clamav:/var/lib/clamav \
    -v /iredmail/data/sa_rules:/var/lib/spamassassin \
    -v /iredmail/data/postfix_queue:/var/spool/postfix \
    iredmail/mariadb:stable

这里把80和443端口分别定为到了10080和10443,需nginx进行反向代理后方可访问

另外还需要把 110,995,143,993,25,465,587 端口添加到防火墙允许通过

管理员账户 postmaster@example.com 访问地址: 邮箱登录 https://mail.example.com 状态监控 https://mail.example.com/netdata 管理后台 https://mail.example.com/iredadmin

3. CentOS 默认占用25端口的问题

CentOS 默认使用了 postfix 占用25端口,会导致容器运行出错

在宿主机使用以下命令关闭解决

# 停止服务
sudo systemctl stop postfix
# 关闭自启动
sudo systemctl disable postfix

三、域名解析

PTR反向解析一般需联系服务器供应商开启

说明 类型 名称 内容 查询指令
A记录 A mail.example.com 服务器IP nslookup mail.example.com
MX记录 MX example.com mail.example.com nslookup -type=mx example.com
SPF记录 TXT example.com v=spf1 mx ~all nslookup -type=txt example.com
DKIM记录 TXT dkim._domainkey 下面会说获取方法,获取后直接填入 nslookup -type=txt dkim._domainkey.example.com
DMARC记录 TXT _dmarc v=DMARC1; p=none; pct=100; rua=mailto:dmarc@example.com nslookup -type=txt _dmarc.example.com

四、DKIM密钥

1. 单域名密钥

容器内使用 amavisd-new showkeys 命令可以查看到

root@mail:/# amavisd-new showkeys
; key#1 1024 bits, i=dkim, d=justinn.me, /opt/iredmail/custom/amavisd/dkim/example.com.pem
dkim._domainkey.example.com.     3600 TXT (
  "v=DKIM1; p="
  "MIGdsadsadasdasA4GNADCBiQKBgQDfhoPunSw1y7bd4gCw1tuHPwkvdsahhjfgg"
  "4bbrO96rLWIKPSlakwkZlmY9QInq1u0AJA+oa/Z+wdiZZQ1gBwYMgi6wD4SVCUfE"
  "UiFdxGXtMfl40pKwx3dsadasdasdwqeqweqrfdasdPhHtsakSN1/6jUhtmO/zdZh"
  "dwGFTscd9hQmdo0ZQIDAQAB")

其中引号中的所有内容连接起来即为密钥,例如

v=DKIM1;p=MIGdsadsadasdasA4GNADCBiQKBgQDfhoPunSw1y7bd4gCw1tuHPwkvdsahhjfgg4bbrO96rLWIKPSlakwkZlmY9QInq1u0AJA+oa/Z+wdiZZQ1gBwYMgi6wD4SVCUfEUiFdxGXtMfl40pKwx3dsadasdasdwqeqweqrfdasdPhHtsakSN1/6jUhtmO/zdZhdwGFTscd9hQmdo0ZQIDAQAB

2. 多域名密钥

容器内生成其他域名的私钥

amavisd-new -c /etc/amavis/conf.d/50-user genrsa /opt/iredmail/custom/amavisd/dkim/域名.pem

amavisd 的配置文件 /etc/amavis/conf.d/50-user 中找到如下位置

file

把其他域名添加进配置

file

然后容器内输入指令 amavisd-new showkeys 查看dkim密钥

root@mail:/# amavisd-new showkeys
; key#1 1024 bits, i=dkim, d=justinn.me, /opt/iredmail/custom/amavisd/dkim/example.com.pem
dkim._domainkey.example.com.     3600 TXT (
  "v=DKIM1; p="
  "MIGdsadsadasdasA4GNADCBiQKBgQDfhoPunSw1y7bd4gCw1tuHPwkvdsahhjfgg"
  "4bbrO96rLWIKPSlakwkZlmY9QInq1u0AJA+oa/Z+wdiZZQ1gBwYMgi6wD4SVCUfE"
  "UiFdxGXtMfl40pKwx3dsadasdasdwqeqweqrfdasdPhHtsakSN1/6jUhtmO/zdZh"
  "dwGFTscd9hQmdo0ZQIDAQAB")

; key#2 1024 bits, i=dkim, d=kujiu.net, /opt/iredmail/custom/amavisd/dkim/example2.com.pem
dkim._domainkey.example2.com.      3600 TXT (
  "v=DKIM1; p="
  "MIGdsadsadasdasA4GNADCBiQKBgQDfhoPunSw1y7bd4gCw1tuHPwkvdsahhjfgg"
  "4bbrO96rLWIKPSlakwkZlmY9QInq1u0AJA+oa/Z+wdiZZQ1gBwYMgi6wD4SVCUfE"
  "UiFdxGXtMfl40pKwx3dsadasdasdwqeqweqrfdasdPhHtsakSN1/6jUhtmO/zdZh"
  "dwGFTscd9hQmdo0ZQIDAQAC")

; key#3 1024 bits, i=dkim, d=92zq.com, /opt/iredmail/custom/amavisd/dkim/example3.com.pem
dkim._domainkey.example3.com.       3600 TXT (
  "v=DKIM1; p="
  "MIGdsadsadasdasA4GNADCBiQKBgQDfhoPunSw1y7bd4gCw1tuHPwkvdsahhjfgg"
  "4bbrO96rLWIKPSlakwkZlmY9QInq1u0AJA+oa/Z+wdiZZQ1gBwYMgi6wD4SVCUfE"
  "UiFdxGXtMfl40pKwx3dsadasdasdwqeqweqrfdasdPhHtsakSN1/6jUhtmO/zdZh"
  "dwGFTscd9hQmdo0ZQIDAQAD")

附录

1. 确定配置文件位置

如果版本不同,网上的资料里提及的配置文件位置完全不同(我就没搜到我的)

可在容器中搜索后缀为 .tips 的文件,在其中找头绪

# 进入容器
docker exec -it iredmail /bin/bash
find / -name "*.tips"

2. 邮箱测试评分网站

https://mail-tester.com

最后更新于 2024-03-19