一、设置主机名
例如邮局域名为 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
修改内容为
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
中找到如下位置
把其他域名添加进配置
然后容器内输入指令 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"
Comments NOTHING