其实对于我这个懒人来说,之前从没有在VPS上搞过邮件系统,Gmail啊QQ邮箱啊用得也挺方便,正式场合就使用学校的邮箱,何必自己再搞一个。但是,有一次看到别人用自己域名的邮箱之后,顿觉这个逼格高,正好这次又用回VPS了,就来配置一个吧。
动手之前自然需要Google一下,发现简单配置邮件系统的话,Postfix和Dovecot是两个常见的选择。好吧,就是你俩了,当然,考虑到安全性,加个sasl吧。
文章接下去按分为下面几部分讲述,可以按需调到指定的位置去看。
在配置系统之前,首先先把DNS给设定好,毕竟搞出个邮箱就是要拿出去用的,放在自己电脑上看有什么用。DNS设置的过程在此就不赘述了,总之,设置好之后dig
一下MX记录,如果有类似于下面这样的记录的话就OK了。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ dig mx your.address
; <<>> DiG 9.8.3-P1 <<>> mx your.address
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37534
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;your.address. IN MX
;; ANSWER SECTION:
your.address. 600 IN MX 10 111.111.111.111.
|
安全性始终是一个首要考虑的对象,所以我们需要用ssl保护所有到邮件系统的连接,于是,首先需要生成一个证书。注意,接下去的操作都是使用root用户进行的。
1
2
3
|
$ cd /etc/ssl
$ mkdir -p private
$ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out /etc/ssl/certs/mailcert.pem
|
生成证书的时候需要填写一些证书的基本信息,想怎么填就怎么填,反正想我们这种屌丝的证书不会送去认证的,都是未经认证的证书,所以发挥自己的想象去填吧。
生成完了之后别忘记给它配好权限,确保里面的文件只能由root读写。
Centos 7已经自带了Postfix,只需配置一下即可。如果没有的话,就装一个。
1
|
$ yum -y install postfix
|
嗯,然后是安装cyrus的sasl组件。
1
|
$ yum -y install cyrus-sasl-*
|
当然,其实也是可以用Dovecot的sasl组件的,但是我就是想装个B。
好了,接下来就是对Postfix进行配置了。下面是我的Postfix设置,其中各项的选项望文生义已经比较清楚了,详细资料可参考文末的参考文献。
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#域名设置
myhostname = mail.your.host
mydomain = your.host
myorigin = $mydomain
inet_interfaces = all
#启用安全性和性能更好的Maildir
home_mailbox = Maildir/
#不要暴露更多信息
smtpd_banner = $myhostname ESMTP unknown
#中继设置
relay_domains = $mydestination
#启用sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
#最大邮件大小20M
message_size_limit = 20971520
#反垃圾邮件,反非法中继设置
smtpd_client_restrictions = reject_rbl_client,
permit
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_rhsbl_sender,
permit
smtpd_sender_restrictions = reject_non_fqdn_sender,
permit
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
reject_rhsbl_client rhsbl.ahbl.org,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client dnsbl.sorbs.net,
permit
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
#启用ssl保护
smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem
smtpd_tls_key_file = /etc/ssl/private/mail.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_security_level = may
smtpd_tls_protocols = !SSLv2, !SSLv3
|
然后接着对sasl进行设置:
1
2
3
4
|
pwcheck_method: auxprop
auxprop_plugin: sasldb
#mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5
#注意,上面必须把mech_list给注释掉,让程序自动选择,不然会出错。
|
Postfix的配置就算完成了,接着启动Postfix。
1
|
$ systemctl start postfix
|
如果什么输出都没有,就说明启动成功了。
为了测试你的邮件系统对于中继的防御能力如何,可以到这里检查一下,如果全都通过的话基本没什么问题了。
首先是安装Dovecot
1
|
$ yum -y install dovecot
|
然后是配置/etc/dovecot/dovecot.conf
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#安全第一
disable_plaintext_auth = yes
mail_privileged_group = mail
#使用Maildir
mail_location = maildir:~/Maildir
#使用系统用户管理(最简单)
userdb {
driver = passwd
}
passdb {
driver = pam
}
#故作高冷,只支持imap
protocols = " imap"
namespace {
#prefix = INBOX. # the namespace prefix isn't added again to the mailbox names.
# ...
inbox = yes
mailbox Trash {
auto = subscribe
special_use = \Trash
}
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Sent {
auto = subscribe # autocreate and autosubscribe the Sent mailbox
special_use = \Sent
}
mailbox "Sent Messages" {
auto = subscribe
special_use = \Sent
}
mailbox Spam {
auto = subscribe # autocreate Spam, but don't autosubscribe
special_use = \Junk
}
mailbox virtual/All { # if you have a virtual "All messages" mailbox
auto = subscribe
special_use = \All
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
}
#安全,还是安全
ssl = required
ssl_cert = </etc/ssl/certs/mailcert.pem
ssl_key = </etc/ssl/private/mail.key
maildir_very_dirty_syncs = yes
|
既然用了系统的用户管理,所以别忘了到pam.d
里面设置一下
1
2
3
4
5
6
|
#%PAM-1.0
auth required pam_unix.so nullok
account required pam_unix.so
auth include password-auth
account include password-auth
session include password-auth
|
然后就是启动Dovecot
1
|
$ systemctl start dovecot
|
如果什么输出都没有,就说明启动成功了。既然都能启动成功,那就全都设置成开机自动启动吧
1
2
|
$ systemctl enable postfix
$ systemctl enable dovecot
|
因为我们使用的是系统用户管理,所以添加邮箱用户就像添加系统用户一样方便。添加系统用户的方法就不用我多说了吧。添加完之后,还要在sasl的数据库中添加记录。
1
2
3
4
|
$ echo "你的密码" | saslpasswd2 -p -u example.com -c test
# 然后检查一下是不是加入进去了
$ sasldblistusers2
test@example.com: userPassword
|
如果产生像上面的输出,那就是成功了。
发信设置

收信设置

好了,现在我们就可以拿着我们自己域名的邮箱出去装B了。