这次的歌是《春待ちクローバー》,《One Room》里的花坂结衣角色曲。

严格说起来这已经不算从零开始了,毕竟之前有建站的基础。不过架设邮件服务器对我来说,还是全新的尝试。

首先,我需要设置合法的DNS解析。假设域名为liver.cf,服务器地址为8.7.198.45,希望邮箱地址是[email protected],一般就要首先指定一台邮件服务器,添加以下记录:

mail                         A                  8.7.198.45

@                            MX                mail.liver.cf

mail                       TXT              v=spf1 IP4:8.7.198.45 ~all

这几条记录的作用如下:

MX 记录
这是为邮件服务器专门设计的,用于指定负责处理发往收件人域名的邮件服务器,简单邮件传输协议(SMTP)会根据 MX 记录的值来决定邮件的路由过程。
比如用 Gmail 往 163 发邮件,因为不是一个域的,在“转发”的过程中需要根据收信人地址(@163.com)查找 DNS 以确定对方域的 IP ,这样才能正确的投递
A 记录
这个是为了免登陆的,正常情况下,我们发邮件需要登陆自己的账户,那么 Gmail 往 163 进行“转发”也是在发邮件,这个过程显然不可能也要进行登陆,这就用到了 A 记录
Gmail 转发邮件时通过 ehlo 打招呼的时候表明自己的邮件服务器域,也就是类似 mail.gmail.com 这样的,就是指向发邮件的服务器;
对方(163)收到后进行确认,拿着这个地址查 DNS,找出对应的 IP,然后核对发送人是不是这个 IP,这样就可以确认发送人是服务器而不是个人用户,就不需要登陆了
TXT 记录
这是为了防范垃圾邮件而提出来的DNS记录,它用于登记某个域名拥有的用来外发邮件的所有IP地址按照SPF的格式在DNS记录中增加一条TXT类型的记录,将提高该域名的信誉度,同时可以防止垃圾邮件伪造该域的发件人发送垃圾邮件。它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。

接着要了解有关邮件服务的几个关键词:

MUA:用户代理端,即用户使用的写信、收信客户端软件

MTA:邮件传送端,即常说的邮件服务器,用于转发、收取用户邮件。

MDA:邮件代理端,相当于MUA和MTA的中间人,可用于过滤垃圾邮件。

POP:邮局协议,用于MUA连接服务器收取用户邮件,通信端口110。

IMOP:互联网应用协议,功能较POP多,通信端口143。

SMTP:简单邮件传送协议,MUA连接MTA或MTA连接MTA发送邮件使用此协议,通信端口25。

接下来是选择邮件服务软件,centos默认自带的sendmail配置太难了,我选择使用常用的postfix+dovecot组合。

然后就开始架设。环境为CentOS 6 x64  768MB RAM  15GB HDD的小VPS。

首先删除sendmail

#yum remove sendmail

安装postfix

#yum install postfix

然后安装cyrus函数库为postfix的stmp提供安全的验证支持
#yum install cyrus*
接着修改MTA(默认邮件传输代理)
#alternatives --config mta
接着安装Dovecot
#yum install dovecot
接下来进入最烦的配置文件编辑环节,建议将以下文件拷贝到本地电脑再编辑。
/etc/postfix/main.cf
/etc/dovecot/dovecot.conf
/etc/dovecot/conf.d/10-auth.conf
/etc/dovecot/conf.d/10-mail.conf
/etc/dovecot/conf.d/10-master.conf
先编辑main.cf

# 75行: 取消注释,设置mail主机名,此项需要添加A记录并指向postfix所在主机公网I
myhostname = mail.liver.cf
# 83行: 取消注释,设置域名
mydomain = liver.cf
# 99行: 设置postfix邮箱的域名后缀为$mydomain(@liver.cf)
myorigin = $mydomain
# 116行: 默认值为all 即监听所有网络接口,若注释或填入公网ip,服务器的25端口将对公网开放。换句话说,填什么IP,postfix就会在那个IP上监听。如果指定localhost,本机postfix就只能发邮件不能接收邮件
inet_interfaces = all
# 119行: 指定网络协议,推荐ipv4,如果支持ipv6,则可以为all
inet_protocols = all
# 164行: 指定postfix接收邮件时收件人的域名,换句话说,也就是你的postfix系统要接收什么样的邮件。此项配置中$myhostname表示postfix接受@$myhostname为后缀的邮箱的邮件 逗号分割支持指多项,此项默认值使用myhostname
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 264行: 取消注释,指定内网和本地的IP地址(范围)
mynetworks = 127.0.0.01,8.7.198.45
# 419行: 取消注释,邮件保存目录
home_mailbox = Maildir/
# 571行: 指定MUA通过smtp连接postfix时返回的header头信息,原始配置附带有postfix版本号 去掉即可,此项酌情处理
smtpd_banner = $myhostname ESMTP

# 添加到最后
# 规定邮件最大尺寸为10M
message_size_limit = 10485760
# 规定收件箱最大容量为1G
mailbox_size_limit = 1073741824
# SMTP认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

 

之后就可以启动postfix了

#/etc/rc.d/init.d/postfix start

还可以设置postfix开机自启

#chkconfig postfix on

 

然后编辑dovecot.conf

 

# 26行: 如果不使用IPv6,请修改为*
listen = *
然后编辑10-auth.conf
# 9行: 取消注释并修改
disable_plaintext_auth = no
# 97行: 添加
auth_mechanisms = plain login
编辑10-mail.conf
# 30行: 取消注释并添加
mail_location = maildir:~/Maildir
编辑10-master.conf
# 88-90行: 取消注释并添加 Postfix smtp 验证
unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
}
保存,接着上传到指定位置覆盖。
main.cf上传到/etc/postfix/覆盖
dovecot.conf上传到/etc/dovecot/覆盖
10-auth.conf、10-mail.conf和10-master.conf上传到/etc/dovecot/conf.d/覆盖
然后和postfix一样,启动服务并添加开机自启。
#/etc/rc.d/init.d/dovecot start
#chkconfig dovecot on
之后就是用户的设置了。依据以上的设置,默认的用户是linux系统用户,可以用root登陆,但我绝不推荐这么做,所以添加一个新用户test01
#useradd test01
然后为这个用户设置密码。
#passwd  test01
之后是最容易漏的一步:防火墙设置。
编辑/etc/sysconfig/iptables,添加以下内容来开放这几个端口:
#端口25:smtp服务器用来接收和发送邮件的,客户端来发送邮件的。(这个端口是不能更改的)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
#端口143:imap客户端用来接收邮件的。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
#端口465:smtp的加密端口用来发送邮件的(SSL/TLS协议)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
#端口587:smtp的加密端口用来发送邮件的(STARTTLS协议)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
#端口993:imap的加密端口用来接收邮件的
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
之后就可以用邮件客户端来收发邮件了。
电子邮箱地址:[email protected]
账号:test01
密码:********
IMAP服务器:mail.liver.cf
IMAP端口:143
SMTP服务器:mail.liver.cf
SMTP端口:25
注意账户后面没有@liver.cf。
——————————————————————————————————————————————————————————————————————
不过目前我发现用这种方法建立的邮件服务器不能将邮件发给外域。
这个问题和SSL放在后面再解决吧。
最后更新于 2019-04-18