Table Of Contents
show
邮件服务器简介
1.常见邮局端口&&协议:
发邮件的协议有SMTP,收邮件的协议有POP3和IMAP。
SMTP:明文使用25端口。加密后使用25/587/465端口。
IMAP:明文使用143端口。加密后使用143/993端口。
POP3:明文使用110端口。加密后使用110/995端口。
sendmail:用于发邮件。资格最老的邮局,所有Linux发行版基本都带。但是配置麻烦。
postfix:Wietse Venema觉得sendmail配置太麻烦了,就开发了一个“简化配置版sendmail”,即postfix。支持smtp协议。
dovecot:用于收邮件,支持imap/pop3。
spamassasin:垃圾邮件过滤器。可以自订规则。
clamav:邮件杀毒工具。
opendkim:生成dkim签名。有什么用?详见下面的“反垃圾邮件技术”。
fail2ban:防止别人暴力破解用户名密码的工具。
2.常见邮局软件和安全软件:
3.反垃圾邮件技术:
假设我要在1.1.1.2这台机器上配置best.pm、best.nl这两个域名用于发邮件。1.1.1.2的主机名是mail1.wangchenyu.net.cn。那么我们需要
设置rDNS,将1.1.1.2映射到mail1.wangchenyu.net.cn。DNS是域名->IP的解析。rDNS即IP->域名的解析。有了这个rDNS记录,收到邮件的服务器就能确认mail1.wangchenyu.net.cn可以被用在1.1.1.2这个IP上。一般在主机商后台可以添加rdns记录,找不到的话提交一个工单即可。
设置best.pm和best.nl的MX记录,记录名为@,值为mail1.wangchenyu.net.cn,优先级为10。MX记录用于别人向best.pm这个域发送邮件时查找收信服务器。不设置的话无法收到别人发的邮件,并且自己发出的邮件的“可信度”也会大大降低。优先级
设置DKIM签名。DKIM先由发件服务器生成,之后每封邮件都会带上这个签名。接着,还要在best.pm和best.nl上各添加一条TXT记录,记录名和值在发件服务器生成DKIM时都会提供。收到邮件后会对比邮件中的DKIM签名和DNS中的TXT记录是否一致。
设置SPF记录。这个记录规定了可以用这个域发邮件的主机。在best.pm和best.nl上各添加一条TXT记录,记录名为@,值为v=spf1 mx ~all即可允许所有IP使用此域。
设置DMARC记录。这个记录指出他们的地址被 SPF 和/或 DKIM/或别的方法保护。在best.pm和best.nl上各添加一条TXT记录,记录名为_dmarc,值为v=DMARC1; p=none
准备工作
1.安装环境
由于docker-mailserver.yml文件使用3.8版本,因此需要更高版本的docker-compose才可以,需要docker-compose版本为1.29.2
2.https证书
可以到freessl.cn申请免费证书。
3.创建相应的文件夹
mkdir -p /opt/mailserver
mkdir -p /opt/mailserver/ssl
4.把https证书放到 /opt/mailserver/ssl文
件夹下
5.有关域名的解析(以阿里云设置DNS解析记录)
这里 设置的 DNS 未包含 DKIM
签名记录。这个记录需要在后面,使用脚本进行生成。
DNS类型 | 记录名 | 记录值 | TTL |
A | 000.000.000.000 | 10分钟 | |
MX | @ | mail.yuzhongit.com | 10分钟 |
TXT | @ | v=spf1 mx ~all | 10分钟 |
TXT | _dmarc | v=DMARC1; p=quarantine; rua=mailto:dmarc.report@yuzhongit.com; ruf=mailto:dmarc.report@yuzhongit.com; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=quarantine | 10分钟 |
yuzhongit.com
注意替换成自己的域名部署docker-mailserver容器镜像工作
1.镜像及相关配置文件的拉取
DMS_GITHUB_URL='https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master'
wget "${DMS_GITHUB_URL}/docker-compose.yml"
wget "${DMS_GITHUB_URL}/mailserver.env"
wget "${DMS_GITHUB_URL}/setup.sh"
chmod a+x ./setup.sh
2.修改docker-compose.yml文件
version: '3.8'
services:
mailserver:
image: docker.io/mailserver/docker-mailserver:latest
container_name: mailserver
# If the FQDN for your mail-server is only two labels (eg: example.com),
# you can assign this entirely to `hostname` and remove `domainname`.
hostname: mail
domainname: yuzhongit.com
env_file: mailserver.env
dns: 223.5.5.5
# More information about the mail-server ports:
# https://docker-mailserver.github.io/docker-mailserver/edge/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)
- "110:110"
- "143:143" # IMAP4 (explicit TLS => STARTTLS)
- "465:465" # ESMTP (implicit TLS)
- "587:587" # ESMTP (explicit TLS => STARTTLS)
- "993:993" # IMAP4 (implicit TLS)
volumes:
- /opt/mailserver/mail-data/:/var/mail/
- /opt/mailserver/mail-state/:/var/mail-state/
- /opt/mailserver/mail-logs/:/var/log/mail/
- /opt/mailserver/config/:/tmp/docker-mailserver/
- /etc/localtime:/etc/localtime:ro
- /opt/mailserver/ssl:/tmp/ssl:ro
restart: always
stop_grace_period: 1m
cap_add:
- NET_ADMIN
- SYS_PTRACE
3.设置mailserver.env配置
主要修改以下几个参数即可
DMS_DEBUG=1
SSL_TYPE=manual
SSL_CERT_PATH=/tmp/ssl/fullchain1.crt
SSL_KEY_PATH=/tmp/ssl/privkey1.key
4.添加邮件账户
mkdir -p /opt/mailserver/config
touch /opt/mailserver/config/postfix-accounts.cf
docker run --rm \
-e MAIL_USER=user1@yuzhongit.com \
-e MAIL_PASS=mypassword \
-ti docker.io/mailserver/docker-mailserver:latest \
/bin/sh -c 'echo "$MAIL_USER|$(doveadm pw -s SHA512-CRYPT -u $MAIL_USER -p $MAIL_PASS)"' >> /opt/mailserver/config/postfix-accounts.cf
5.启动容器 (要在/opt/mailserver/
下)
docker-compose up -d `# 启动容器`
docker-compose logs -f `# 观察容器 相关日志`
6.添加 email user
在CentOS 7下运行./setup.sh可能会出错,删除setup.sh 第29行shopt -s inherit_errexit
即可。
./setup.sh email add admin@yuzhongit.com "xxx" `# 添加 邮件账号及密码`
./setup.sh email update admin@yuzhongit.com "xxx" `# 更新 邮件账号及密码`
7.创建DKIM key:
注意下面的配置中,设置了 keysize 参数。原因是默认使用的 keysize 大小为 4096 ,在 aliyun中 无法进行正常的添加。
./setup.sh config dkim keysize 2048
cat config/opendkim/keys/treesir.pub/mail.txt `# 查看 DKIM 签名记录`
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ojqOcyeDlOn6TcpXCsU92xul6d54wlx/UwPTuE0aywFc+ihyKGAm9D8nmroneN7gf82qTtDbJiHghzRlf6JdpR3kM4ipWKaNRSlUL/64HQqrMeEWx5ErpcgwrXxKWI/rcQ7Rjg2BliP6ayJiEflH0FOtxfgLHnYEcSKupmCV8znM4rZ/LHx9RDwc7o8jWujey6h9zrYPXyqim"
"obGSB0PZGNQhe7mWRefMraFGgnNq+PrtEnmaOFxH2rG1Qh2hhMkeqJsH56yx9f1mxWYTX7r9FtvweGRb+GJNfi6a4vpDrTCffxx6XvGrq032i7VqHpmiaUUuM3j2x1DwHrIbpWTQIDAQAB" ) ; ----- DKIM key mail for treesir.pub
将括弧内的双引号""去掉,合并成一条。
v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ojqOcyeDlOn6TcpXCsU92xul6d54wlx/UwPTuE0aywFc+ihyKGAm9D8nmroneN7gf82qTtDbJiHghzRlf6JdpR3kM4ipWKaNRSlUL/64HQqrMeEWx5ErpcgwrXxKWI/rcQ7Rjg2BliP6ayJiEflH0FOtxfgLHnYEcSKupmCV8znM4rZ/LHx9RDwc7o8jWujey6h9zrYPXyqimobGSB0PZGNQhe7mWRefMraFGgnNq+PrtEnmaOFxH2rG1Qh2hhMkeqJsH56yx9f1mxWYTX7r9FtvweGRb+GJNfi6a4vpDrTCffxx6XvGrq032i7VqHpmiaUUuM3j2x1DwHrIbpWTQIDAQAB
添加 DKIM 记录值至 阿里云DNS
添加一条TXT记录,记录名是mail._domainkey,记录值是将两段引号内的字符串拼接起来即可
验证测试
证书验证测试
在进行邮件测试前,可以使用 此链接 中的工具,测试 是否支持 tls
验证。
邮件客户端配置
服务器配置好了,如何连接?
在任一个邮件客户端中这么配置:
收信:
服务器地址:mail1.yuzhongit.com
协议:IMAP
端口:993
用户名:user1@
yuzhongit.com密码:mypassword
使用SSL:是
发信:
服务器地址:mail1.yuzhongit.com
协议:SMTP
端口:587
用户名密码同上
使用SSL:是