Blog.GC

在CentOS 7上部署邮件系统(Postfix&cyrus-sasl&Dovecot)

| Comments

其实对于我这个懒人来说,之前从没有在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读写。

1
$ chmod -R 700 private

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了。

Comments

comments powered by Disqus