Postfix是一款非常优异的邮件服务器,它可以说是用来替代Sendmail的,这就必须提到Wietse Venema这位牛人,此人觉得Sendmail用起来有诸多郁闷的地方,比如安全性,配置繁杂等,于是决定自己弄一个能替代Sendmail的邮件服务器,或者说是对Sendmail的改良,结果就弄出了这个Postfix邮件服务器软件。
Postfix主要是用在邮件服务器的发信上,也就是采用SMTP来进行发邮件,而收信则一般采用Dovecot来实现。在这里,子猴将根据自己配置Postfix的经历来记录一下配置Postfix的一些设置。
Postfix的官方网站是:http://www.postfix.org/ ,你可以去下载最新的版本进行安装,关于Postfix的安装我这里不会进行说明,因为我的Linux系统已经预装好了Postfix,而且也可以通过Linux的命令mail来发送邮件,也可以接收系统发送的邮件,不过如果使用客户端软件比如foxmail却不能发信,需要进行配置,这,也正是我这里要记录说明的。
应该说,将Postfix配置起来通过客户端软件来发送邮件其实并不难,但如果你是初次配置邮件服务器,那困难其实还是非常大的!就子猴的配置过程来说,前后花了一个星期的时间,虽然这一周的时间里只是利用空余时间来进行配置,但相比配置其他的,这个时间已经可说是最长的了。
Postfix的配置主要是在mail.cf里完成,文件目录在/etc/postfix里,mail.cf已经有一些默认的配置了,通常我们只需修改或增加几个设置即可。
1、 myhostname
服务器主机名,通常默认的是你服务器的名称,比如12333.site等这样的,这里我们需要将它修改为我们的域名,我这里修改为:
myhostname = zihou.me
表示我们的邮箱后缀为zihou.me,如:xxx@zihou.me
2、 inet_interfaces
这个参数是用来决定是否对除本机外的网络开放的,也控制着邮件能发送到哪里去,配置文件说明里有如下几个值:
$myhostname, localhost,all,它默认是本机,也就是本机能给本机发送邮件,也能接收本机发送的邮件,这里应当取值all:
inet_interfaces = all
这样,在非本机网络,也能用客户端发送邮件。
3、 mydestination
表示收信的主机名称,采用其默认值:$myhostname, localhost.$mydomain, localhost即可。
而实际上,根据子猴的测试,这个值是可以不用设置的,而且我们是要在整个互联网里收发邮件,而不是只在同域名中收发,所以从这个方面讲,这个参数也是无用的。
4、 smtpd_sender_restrictions
经过子猴的测试,这个参数可以不用设置,丝毫不影响到邮件的收发。
5、 smtpd_recipient_restrictions(非常重要!)
这个参数应当是main.cf中最重要的一个参数了,其中有两个值是必备的:
permit_mynetworks:允许mynetworks设置的地址或网络发信
reject_unauth_destination:拒绝未经验证的网络收信
我的配置是:
smtpd_recipient_restrictions =因为我采用了permit_sasl_authenticated的验证,也就是将验证交给了第三方工具去处理。
后面你自己愿意的话可以再加上一些类似reject_rbl_client dnsbl.njabl.org的拒绝垃圾邮件的设置。
但这里注意的是,经过测试,我发现如果将
permit_sasl_authenticated,reject_unauth_destination的顺序调换一下,也就是:
smtpd_recipient_restrictions =则发信的时候会报错:554 Relay access denied 这样的错误,我现在还不清楚这究竟是怎么一回事,但有点无疑的是,当把permit_sasl_authenticated放在reject_unauth_destination的前面就表示通过permit_sasl_authenticated的验证就够了!
6、 smtp_sasl_auth_enable
smtp_sasl_auth_enable默认是no,改为yes即可:
smtp_sasl_auth_enable = yes7、 smtpd_sasl_auth_enable
smtpd_sasl_auth_enable默认是no,改为yes即可:
smtpd_sasl_auth_enable = yes8、 smtpd_sasl_security_options
设为noanonymous,表示不允许匿名:smtpd_sasl_security_optiOns= noanonymous
9、 smtp_sasl_password_maps
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd这个参数不能少,否则会报错:
specify a password table via the `smtp_sasl_password_maps' configuration10、saslauthd服务启动
上面讲了用的是saslauthd验证,那么我们必须要保证saslauthd服务是可用的,用ps看看saslauthd服务是否在运行之中:
ps aux | grep saslauthd
如果没有运行,则我们可以通过命令:
saslauthd ?a pam来运行,pam是告诉saslauthd,采用pam模块来进行验证,除了pam外,还可以通过saslauthd -a shadow来运行saslauthd服务,如果是saslauthd -a shadow,则表示要通过系统里/etc/shadow里的用户进行验证,这种验证方法我还未进行研究与测试,不多说。
经过以上的设置后,邮件服务器已经可以正常通过客户端来进行收信了,当然,我觉得这里面还有很多东西都有待进一步研究,有许多的参数我还并不知道究竟是什么意思,但对一个企业邮件服务器来讲(不是像网易那样提供邮箱服务),这样就可以用起来了。