前言
终于上大学了!
来到大学干的第一件科技相关还是把所有的服务迁移到我的 Contabo VPS 上,所以就迟来地记录一下安装邮件服务的过程吧(
开整!
在这里,我选择 hanxuan.ya
作为示例域名,hxsel
作为示例的选择器(selector
)名称,10.20.30.40
作为示例的服务器 IP。
Prerequisite
安装 dovecot
(IMAP 服务器)和 postfix
(SMTP 服务器):
[bai@duesseldorf-vps ~]$ sudo apt install dovecot-core dovecot-imapd dovecot-imaptest postfix
在 postfix
的配置阶段,将 Mail Server Configuration Type
设置为 Internet Site
,并设置 System Mail Name。
折腾一下 dovecot
首先把 imaps
给打开。
如此编辑 /path/to/dovecot/conf.d/10-master.conf
:
...
service imap-login {
...
inet_listener imaps {
port = 993
ssl = yes
}
...
}
顺手联动一下 Postfix
:
...
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
...
然后打开 /path/to/dovecot/conf.d/10-auth.conf
,把明文登录给禁咯:
...
disable_plaintext_auth = yes
...
再在 /path/to/dovecot/conf.d/10-ssl.conf
设置一下要使用的 SSL 证书:
...
ssl = required
ssl_cert = </path/to/your/ssl/cert/fullchain.pem
ssl_key = </path/to/your/ssl/key/privkey.pem
...
其中,如果你和我一样也在使用 Let’s Encrypt 的证书,格式大概像这样:
ssl_cert = </etc/letsencrypt/live/hanxuan.ya/fullchain.pem
ssl_key = </etc/letsencrypt/live/hanxuan.ya/privkey.pem
折腾一下 postfix
如此编辑 /path/to/postfix/main.cf
:
...
smtpd_tls_cert_file = /path/to/your/ssl/cert/fullchain.pem
smtpd_tls_key_file = /path/to/your/ssl/key/privkey.pem
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_tls_auth_only = yes
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
...
鉴于我在我自己的邮件服务器上使用的是 Maildir
,这里只展示使用它的配置:
home_mailbox = Maildir/
如此编辑 /path/to/postfix/master.cf
:
...
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
...
其他要设置的东西
在 DNS 服务商处,需要添加这些记录:
mail IN A 10.20.30.40
@ IN MX 10 mail.hanxuan.ya.
@ IN TXT "v=spf1 a:mail.hanxuan.ya ip4:10.20.30.40 ~all"
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected], mailto:[email protected]; pct=100; adkim=r; aspf=r"
其中,
_dmarc
段不一定要像我这么写,网上有很多的 DMARC 记录生成器,可以自己按照需求去生成一个(spf
记录中,如果设置了a
段,则必须在ip4
或ip6
段对应的 IP 地址设置一个指向a
段所示域名的PTR
记录。1
如果你有别的需求,那 spf 可能会长这样:
@ IN TXT "v=spf1 a:mail6.hanxuan.ya ip6:1a1a::3 ~all" -- 来!给他整个 IPv6!(
@ IN TXT "v=spf1 a:mail-double.hanxuan.ya ip4:10.20.30.39 ip6:1a1a::4 ~all" -- 双栈其实也可以啦(
@ IN TXT "v=spf1 a:mail-bulk.hanxuan.ya ip4:10.0.0.0/8 ~all" -- 以防你有好多好多 IP
杂七杂八的东西
opendkim
如果你还想使用 opendkim
,可以先安装一下:
[bai@duesseldorf-vps ~]$ sudo apt install opendkim
然后如此编辑 /path/to/opendkim.conf
:
Mode sv
...
KeyTable /storage/for/KeyTable
SigningTable refile:/storage/for/SigningTable
ExternalIgnoreList refile:/storage/for/TrustedHosts
InternalHosts refile:/storage/for/TrustedHosts
...
Socket inet:8891@localhost
...
Domain hanxuan.ya
RequireSafeKeys False
创建一个 /storage/for/KeyTable
文件,大概这么写一写:
hxsel._domainkey.hanxuan.ya hanxuan.ya:hxsel:/path/to/hxsel.private
然后是 /storage/for/SigningTable
:
*@hanxuan.ya hxsel._domainkey.hanxuan.ya
/storage/for/TrustedHosts
:
127.0.0.1
::1
*.hanxuan.ya
然后去生成一个 key:
opendkim-genkey --domain=hanxuan.ya --bits=1024 --directory=/path/to/ --selector=hxsel
这样,在 /path/to/
文件夹中会生成两个文件,一个是 hxsel.private
,另外一个是 hxsel.txt
。
其中, hxsel.txt
是对应的 TXT 记录,需要自行导入到相应的 DNS 提供商处。
再在 postfix
那边联动一下:
# /path/to/postfix/main.cf
...
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_defaule_action = accept
...
然后重启就可以了(!
letsencrypt
可以设置一个 crontab
每天自动重启一下服务(因为我的服务比较小 也一般不会有人大半夜给我发消息)以便刷新证书:
[bai@duesseldorf-vps ~]$ sudo crontab -e
0 0 * * * systemctl restart dovecot; systemctl restart postfix
完成!现在我们有了自己的邮件服务器(!
Google (n.d.). Google Email Sender Guidelines. IP Addresses. https://support.google.com/a/answer/81126?p=sender-guidelines-ip#ip The sending IP address must match the IP address of the hostname specified in the PTR record. ↩︎